同一サイズのディスク間なら、
# dd if=/dev/sda of=/dev/sdb bs=1M [ENTER]
で完全なコピーができる.....そう思っていた時期が私にもありました。
いや正確にはできてはいるらしいのだが、Debian squeezeはある時点で(多分次回ブート時?) 同じUUIDのパーティションを発見すると勝手に書き換えるようなんだ。 これでミラーした方ならともかく、なぜか ブートドライブを書き換えられてしまい 二度とブートせずに鼻血吹くくらい焦った。
勘違いかもしれんけど。なので、UUIDを少し真面目に管理しましょうという話。
マスターHDDのブートパーティションのuuidを控えておく。 コマンドはblkidを使う(vol_idというのもある)。
# blkid /dev/sda1 /dev/sda1: LABEL="system" UUID="faca9b62-b828-32a7-abf6-1500bc4bf56a" TYPE="ext4"
普通にディスクごとコピーする。sdaがコピー元、sdbがコピー先とする。当然これを間違えると、 一発でパーティションごと葬ることが可能なので間違えないように。責任とれないし。
# dd if=/dev/sda of=/dev/sdb bs=1M [ENTER]
終わってもコピー先をマウントしないように。
uuidgenコマンドを使う。ない場合はapt-get install uuid-runtimeを実行しておく。 これもメモっておくなりエディタで保存しておくこと。
# uuidgen [ENTER] 2008a515-dfab-416f-bb14-82f598342936
コピー先を適当なマウントポイントにマウントする。例えば/mnt/root2。
# mkdir -p /mnt/root2 [ENTER] # mount /dev/sdb1 /mnt/root2 [ENTER]
/mnt/root2/etc/fstabをエディタで開き、該当個所を旧UUIDから上記の新UUIDへ変更。 間違えてコピー元の方を変更しないように。
-------/mnt/root2/etc/fstab------ UUID=2008a515-dfab-416f-bb14-82f598342936 / ext4 noatime,errors=remount-ro 0 1 -------/mnt/root2/etc/fstab------
次に/mnt/root2/boot/grub/grub.cfgをエディタで開き、同じ変更を行う。 今度は6個所くらいあるので間違えないように。
-------/mnt/root2/boot/grub/grub.cfg------ search --no-floppy --fs-uuid --set 2008a515-dfab-416f-bb14-82f598342936 (省略) linux /boot/vmlinuz-2.6.32-5-amd64 root=UUID=2008a515-dfab-416f-bb14-82f598342936 ro quiet (省略その他) -------/mnt/root2/boot/grub/grub.cfg------
tune2fsを使う。コピー先のデバイス、かつ、新UUIDを指定。
# tune2fs /dev/sdb1 -U 2008a515-dfab-416f-bb14-82f598342936 [ENTER]
もし/mnt/root2/dev直下にsdb, sdb1などのブロックデバイス用のスペシャルファイルがない場合は、 コピーしておきます。ある場合はやらないでください。
# cp -dpR /dev/sdb* /mnt/root2/dev/ [ENTER]
/mnt/root2に移動して新システムにchrootしておきます。
# cd /mnt/root2 [ENTER] # chroot . [ENTER]
unameでカーネルバージョンを調べて、initramfsを更新します。 この作業は絶対にchrootした状態で実行してください (下手をするとシステム壊します)
# uname -a [ENTER] Linux oneseg2 2.6.32-5-amd64 #1 SMP Mon Oct 3 03:59:20 UTC 2011 x86_64 GNU/Linux # update-initramfs -k 2.6.32-5-amd64 -u [ENTER]
コピー先のシステムに対して、今回変更したgrubを書き込みます。 実際にはgrub.cfgを読み込むのはStage2のはずで、わざわざgrubを書き込む処理は必要ないはずですが、 私が試した限りは実行しないとブートしませんでした。 この作業は絶対にchrootした状態で実行してください (しつこいですが)
# grub-install /dev/sdb [ENTER]
デバイス名が/dev/sdbなのは、chrootしていても現在ブートしているカーネル基準ではコピー先が /dev/sdbだからです。
chrootを抜けて、ディスクをアンマウントして終了です。
# exit [ENTER] (※chroot) # cd / [ENTER] # umount /mnt/root2 [ENTER]