Linux

在 Linux 中生成新的捲 ID

  • October 28, 2010

保留大多數細節/原因,我有一種情況,我正在複製驅動器以進行大規模生產。其中一些安裝在只需要一個磁碟的伺服器中(在這種情況下,這不是問題),但有些安裝在將在 RAID1 中使用其中 2 個的伺服器中。

在另一種情況下,我們正在建構一個工具來幫助管理員更換故障磁碟,方法是確保新磁碟足夠大,然後複製 MBR 和分區表,然後將其添加到 RAID1。當這種情況發生時,LILO 會抱怨重複的捲 ID(這是有道理的)。

這就是為什麼我想為要添加到 RAID1 陣列的分區生成新的捲 ID。使用 sfdisk 重寫磁碟分區表是否有意義,或者是否有更直接的命令/技術來為現有捲創建新的捲 ID?

從磁碟讀取 mbr,更改磁碟簽名,即 mbr 中的 4 個字節 @ offset 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

注意:我通過為 mbr.dat 和 newmbr.dat 保存 od -x 的輸出然後在 2 個文本文件上執行差異來測試這一點,這表明只有相關的 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;

引用自:https://serverfault.com/questions/195345