«前の日記(2011-11-20) 最新 次の日記(2011-12-03)» 編集

ぱぱネット(仮)


2011-11-30 Debian squeezeのブートドライブの複製 [長年日記]

_ [開発][Linux] ディスクのミラーイメージを作ったとき

同一サイズのディスク間なら、

# dd if=/dev/sda of=/dev/sdb bs=1M [ENTER]

で完全なコピーができる.....そう思っていた時期が私にもありました。

いや正確にはできてはいるらしいのだが、Debian squeezeはある時点で(多分次回ブート時?) 同じUUIDのパーティションを発見すると勝手に書き換えるようなんだ。 これでミラーした方ならともかく、なぜか ブートドライブを書き換えられてしまい 二度とブートせずに鼻血吹くくらい焦った。

勘違いかもしれんけど。なので、UUIDを少し真面目に管理しましょうという話。

_ [開発][Linux] 手順

コピー前

マスター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]

終わってもコピー先をマウントしないように。

新しいUUIDを作る

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------

パーティションのUUIDの変更

tune2fsを使う。コピー先のデバイス、かつ、新UUIDを指定。

# tune2fs /dev/sdb1 -U 2008a515-dfab-416f-bb14-82f598342936 [ENTER]

/dev/sd*のコピー

もし/mnt/root2/dev直下にsdb, sdb1などのブロックデバイス用のスペシャルファイルがない場合は、 コピーしておきます。ある場合はやらないでください。

# cp -dpR /dev/sdb* /mnt/root2/dev/ [ENTER]

chroot

/mnt/root2に移動して新システムにchrootしておきます。

# cd /mnt/root2 [ENTER]
# chroot . [ENTER]

initramfsの更新(chroot内)

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の更新(chroot内)

コピー先のシステムに対して、今回変更した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]

_ [開発][Linux] 疲れた

ここらへんの知識は、仮想マシンのインスタンスやディスクイメージを作る際にも応用が可能なので、 覚えておくと良いかもしれません。すごーくニッチな需要しかないと思いますが.....


2001|04|
2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|03|04|05|10|

[BANNER]
このサーバーをもう12年も維持しているかと思うとめまいがしますよ。
ツッコミ機能は、ハンドル名が完全日本語じゃないと登録できません。
また、本文にURLが含まれていても登録できません。
いずれもSPAM対策です。
[Panda Papanda]
2011年
11月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

[Papanda]  [Kuma]  [Tomorin]  [Iron]  [Eiza]  [Dokkin]  [Honya]  [Zyou]  [Tsuyo]  [Bike]  [KoeBBS]  [Chukei]  [portal]  [tvmatome]  [KaoPaku] 

訪問者数:(+2560143)