在Linux中生成一个新的卷ID

尽pipe大多数细节/原因,我有一种情况,我克隆驱动器大规模生产。 其中一些安装在只需要一个磁盘的服务器上(在这种情况下,这不是问题),但有些服务器将安装在使用RAID1中的两个的服务器上。

在另一种情况下,我们正在构build一个工具来帮助pipe理员更换有问题的磁盘,方法是确保新磁盘足够大,然后复制MBR和分区表,然后将其添加到RAID1。 发生这种情况时,LILO抱怨重复的卷ID(这是有道理的)。

这就是为什么我想为要添加到RAID1arrays的分区生成新的卷ID。 使用sfdisk重写磁盘分区表是否有意义,还是有一个更直接的命令/技术来为现有卷创build新的卷标识?

从磁盘读取mbr,将mbr中的4字节@偏移量440的磁盘签名更改,然后将其写回磁盘。

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 

注意:我通过保存od -x的输出保存了mbr.dat和newmbr.dat,然后在2个文本文件上运行一个diff来显示只有相关的4个字节被改变。

 #!/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;