Gerar um novo ID do Volume no Linux

1

Com a maioria dos detalhes / razões, tenho uma situação em que estou clonando drives para produção em massa. Alguns deles estão sendo instalados em servidores que precisam apenas de um disco (nesse caso, isso não é um problema), mas alguns estão sendo instalados em servidores que usarão dois deles no RAID1.

Em outro caso, estamos criando uma ferramenta para ajudar o administrador a substituir um disco defeituoso, garantindo que o novo disco seja grande o suficiente e copiando o MBR e a Tabela de Partição e, em seguida, adicionando-o ao RAID1. Quando isso acontece, o LILO reclama sobre IDs de volume duplicados (o que faz sentido).

É por isso que eu gostaria de gerar novos IDs de volume para a partição que está sendo adicionada à matriz RAID1. Faz sentido usar o sfdisk para reescrever uma tabela de partição de discos, ou existe um comando / técnica mais direta para criar um novo ID de volume para um volume existente?

    
por andyortlieb 27.10.2010 / 16:32

1 resposta

1

Leia o mbr do disco, altere a assinatura do disco que é o byte de 4 bytes @ 440 no mbr e então grave de volta no disco.

dd if=/dev/sda of=mbr.dat bs=512 count=1
sigchange.pl # see script below
dd if=newmbr.dat of=/dev/sda bs=512 count=1

Nota: Eu testei isso salvando a saída de od -x para mbr.dat e newmbr.dat e depois executando um diff nos 2 arquivos de texto que mostram que somente os 4 bytes relevantes são alterados.

#!/usr/bin/perl
#sigchange.pl
open FILE,"<mbr.dat" or die $!;
binmode FILE, ":raw";
my ($data,$n);
if ( ( $n=read FILE,$data,512 ) !=512 ) {
    print "Error - Only managed to read $n bytes from file";
   exit 2;
}
close FILE;
my @mbr=unpack("c*", $data);

$mbr[440] = int(rand(255));
$mbr[441] = int(rand(255));
$mbr[442] = int(rand(255));
$mbr[443] = int(rand(255));

$data=pack("c*",@mbr);
open FILE,">newmbr.dat" or die $!;
binmode FILE;
print FILE  $data;
close FILE;
exit 0;
    
por 28.10.2010 / 14:16