2013/12/17(Tue)Fedoraのシステムディスクのお引っ越し手順
2013/12/17 1:25
下準備
ext4形式のパーティションは、やはりdump/restoreコマンドを使ってLinux経由でコピーするのが一番手っ取り早く、異なるパーティションサイズにもコピーしやすい。このために、FedoraのLiveイメージか、Knoppix辺りを用意しておく。
今回はFedora Live 19を使用するが、このイメージにはdump/restore/gpartedコマンド等が含まれていないため、毎回yumで撮ってくる必要有り。bootし直すのが面倒ではあるものの、コマンド体系などが完全に一緒なので確実性が増す。
また、USB接続ではなくSATAもしくはeSATA接続で繋ぐととても高速なので、手間をかけても利用しない手はない。*1
パーティション確保
fdiskを使用して、コピー元と同じパーティション構成を作成。今回は、sda1にext4、sda2にswapという単純構成。最近はSSDや4Kセクタアライメント問題が起こらないよう、自動的に開始セクタが2048セクタとなっているので余り気にしなくても良いかも。
64GB程度のSSDなら、GPT必須であることもなく単純なMBRで構成。
# fdisk -l /dev/sda
Disk /dev/sda: 64.0 GB, 64023257088 bytes, 125045424 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x857baec7
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 116799487 58398720 83 Linux
/dev/sda2 116799488 125045423 4122968 82 Linux swap / Solaris
コピー
sdbがコピー元、sdaがコピー先とする。まずはdump/restoreコマンドを用意。
# yum install -y dump次に、コピー先をフォーマットしてマウントし、dumpを開始。
# mkfs.ext4 /dev/sda1 # mkswap /dev/sda2 # mount /dev/sda1 /mnt # cd /mnt # dump -0uf - /dev/sdb1 | restore -xf -
UUID,GRUB2,dracutの調整/再実施
ブートローダー等を仕込み直すため、chrootしておく。# mount -t proc proc ./proc # mount -t sysfs sys ./sys # mount --bind /dev ./dev # chroot .
まずfstabのUUIDを変更する。
あるいは、# blkid コマンドでコピー元と同じUUIDを、tune2fsで設定しても良い。
# vi /etc/fstab UUID=xxxxxxxxxxxxxxxxxxxxxxxx / ext4 defaults 1 1 UUID=xxxxxxxxxxxxxxxxxxxxxxxx swap swap defaults 0 0
続いて、ブートローダーの再インストール。
grub2-installには、パーティションではなくデバイスを指定することに注意。
# cat /etc/default/grub 必要に応じて、GRUB_CMDLINE_LINUXパラメータなどを修正。 biosdevname=0 consoleblank=0 net.ifnames=0あたりを入れている。 # grub2-mkconfig -o /boot/grub2/grub.cfg # grub2-install /dev/sda
最後にdracutの仕込み直し。
このdracutというのは、/boot/に入っているinitramfs-*.imgという初期RAMディスクを生成するコマンドで、システムを起動するための必要なドライバが詰め込まれているファイルを生成する。mkinitramfsやmkinitrdも同等コマンド。
通常は、yum, PackageKit, RPMなどでカーネルをインストール/更新する際に自動的に実行されるため、そのシステムに最適な構成で作り直されている。
しかし、今回のように急にマシン構成などが変わった場合は、必要なドライバが足りなかったり、参照するディスクのUUID等が変更されてしまうため、ブートできなくなることがある。その場合、以下のようなdracutプロンプトが出て止まる。
[ 9.784580] fbcon: inteldrmfb (fb0) is primary device [ 10.497583] Console: switching to colour frame buffer device 170x48 [ 10.507417] i915 0000:00:02.0: fb0: inteldrmfb frame buffer device [ 10.507518] i915 0000:00:02.0: registered panic notifier [ 10.516853] acpi device:01: registered as cooling_device2 [ 10.517394] ACPI: Video Device [VID] (multi-head:yes rom: no post:no) [ 10.517615] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:00/input/input5 [ 10.517893] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0 [ OK ] Found device M4-CT064M4SSD2. [ OK ] Started Show Plymouth Boot Screen. [ OK ] Reached target Paths. [ OK ] Reached target Basic System. [ 10.727783] [drm] Enabling RC6 states: RC6 on, RC6p off, RC6pp off dracut-initqueue[102]: Warning: Could not boot. [ OK ] Found device M4-CT064M4SSD2. [ OK ] Started Show Plymouth Boot Screen. [ OK ] Reached target Paths. [ OK ] Reached target Basic System. dracut-initqueue[102]: Warning: Could not boot. dracut-initqueue[102]: Warning: /dev/disk/by-uuid/615816c7-1301-4053-804c-65221eb23dcc does not exist dracut-initqueue[102]: Warning: /dev/disk/by-uuid/bab7a3a5-07ed-4697-aee6-1d9eb03abba4 does not exist Starting Dracut Emergency Shell... Warning: /dev/disk/by-uuid/615816c7-1301-4053-804c-65221eb23dcc does not exist Warning: /dev/disk/by-uuid/bab7a3a5-07ed-4697-aee6-1d9eb03abba4 does not exist Generating "/run/initramfs/sosreport.txt" Entering emergency mode. Exit the shell to continue. Type "journalctl" to view system logs. You might want to save "/run/initramfs/sosreport.txt" to a USB stick of /boot after mounting them and attach it to a bug report. dracut:/#ちなみにこのメッセージは、[drm] Enabling RC6 states: RC6 on, RC6p off, RC6pp offが出て1分程度止まってから、全て表示される。おそらく存在しないデバイスの応答待ちをしているのであろう。
これを回避するため、dracutコマンドを使ってinitramfsの再作成を行う。
# cd /boot # ls -1 vmlinuz* vmlinuz-3.11.10-200.fc19.i686.PAE* vmlinuz-3.11.7-200.fc19.i686.PAE* vmlinuz-3.11.9-200.fc19.i686.PAE*例えばbootしたいカーネルがvmlinuz-3.11.9.200.fc19.i686.PAEならば、続けて以下のコマンドを打つ。
# mv initramfs-3.11.9-200.fc19.i686.PAE.img{,.old}
# dracut initramfs-3.11.9-200.fc19.i686.PAE.img 3.11.9.200.fc19.i686.PAE
# ls -1 initramfs*
initramfs-3.11.10-200.fc19.i686.PAE.img
initramfs-3.11.7-200.fc19.i686.PAE.img
initramfs-3.11.7-200.fc19.i686.PAE.img.old
initramfs-3.11.9-200.fc19.i686.PAE.img
後は、chrootをexitで抜け、先ほどmountしたものを全てumountしてからrebootするだけで完成!
GRUB2のメニューで、先ほどinitramfsを作成し直した3.11.9-200.fc19.i686.PAEを選んでBootすればよい。
参考文献
24.5. 初期 RAM ディスクイメージの検証 - Red Hat Customer PortalMomonga Linux/マルチブート環境/トラブルシューティング - yohgaki's wiki