Linux
在 Linux 中生成新的捲 ID
保留大多數細節/原因,我有一種情況,我正在複製驅動器以進行大規模生產。其中一些安裝在只需要一個磁碟的伺服器中(在這種情況下,這不是問題),但有些安裝在將在 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;