2013/12/17(Tue)Fedoraのシステムディスクのお引っ越し手順

2013/12/17 1:25 Software::Linux
この度、FedoraのストレージをHDDからSSDに載せ替える作業をしたときに、いくつかトラブったのでメモ。

下準備

ext4形式のパーティションは、やはりdump/restoreコマンドを使ってLinux経由でコピーするのが一番手っ取り早く、異なるパーティションサイズにもコピーしやすい。
このために、FedoraのLiveイメージか、Knoppix辺りを用意しておく。

今回はFedora Live 19を使用するが、このイメージにはdump/restore/gpartedコマンド等が含まれていないため、毎回yumで撮ってくる必要有り。bootし直すのが面倒ではあるものの、コマンド体系などが完全に一緒なので確実性が増す。
また、USB接続ではなくSATAもしくはeSATA接続で繋ぐととても高速なので、手間をかけても利用しない手はない。*1

*1 : SATAとUSB3の変換アダプタを持っていればそれでも良いかも…。

パーティション確保

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 Portal
Momonga Linux/マルチブート環境/トラブルシューティング - yohgaki's wiki