Linux: ルートパーティションを別ディスクに移動

Debian GNU/Linux 5.0 において、PC カードスロットの USB 2.0 インタフェースカードに接続しているデバイス (今回はフラッシュメモリ) をルートパーティションとして使用できるか試したかったので、「Momonga Linux/ルートパーティションの移動 - yohgaki's wiki」を参考にさせてもらい、実際にやってみた。
※ここで記載していることは、ほとんど無検証である。たまたま上手くいっただけかも知れず、あくまでも備忘録という扱いである。
※この情報を利用される際はくれぐれも自己責任で。

検証用マシンのディスク構成は下記の通り。

・ルートパーティション移動前
/dev/hda1 -> /boot
/dev/hda2 -> /
/dev/hda4 -> Swap

・ルートパーティション移動後
/dev/hda1 -> /boot
/dev/sda1 -> /
/dev/sda2 -> Swap

  1. カーネル再構築を行い、PCMCIA をカーネルに組み込むようにし、そのカーネルを該当 Linux マシンにインストールする。
    ※該当マシンの処理速度が遅いので、カーネル再構築は VMware Fusion 上にインストールした Debian GNU/Linux 5.0 にて行ったのだが、無論実機でも良いはず。
    ※参考までに、実際に作成した .config ファイルをここに置いておく。(ACPI 関係と、機種固有と思われるいくつかのモジュールは外してある。また、Processor family は Pentium-III/Celeron(Coppermine)/Pentium-III Xeon とし、High Memory Support は OFF としている。)
  2. インストールしたカーネルでシングルユーザモードにて起動し、あらかじめ初期化などをして準備しておいたフラッシュメモリに /proc, /sys, /dev を除いた全てのファイル・ディレクトリを所有権・権限ともに保ったままコピー。
    /dev/sda1 を /mnt/dst にマウントして、下記のコマンドで行った。
    # rsync -a --exclude /proc --exclude /sys --exclude /dev --exclude /mnt/dst / /mnt/dst
  3. /mnt/dst に chroot する。
    ※これより下記は、chroot 環境下での作業。(ファイルパスなどに注意。)
  4. /etc/fstab と /boot/grub/menu.lst にてルートパーティションを指定しているデバイスの部分を、新しくルートパーティションにしたいデバイス (現在 chroot となっているデバイス) に変更する。
    ※今回は Swap パーティションも移動しているので、fstab ではそれも変更している。
  5. /dev, /proc, /sys をマウントする。
    # mkdir /dev
    # mkdir /proc
    # mkdir /sys
    # mount /dev
    # mount /proc
    # mount /sys
  6. udev を再起動する。
    # /etc/init.d/udev stop
    # /etc/init.d/udev start
  7. initrd を作成する。
    # mkinitramfs -o /boot/initrd.img-<カーネル名> <カーネル名>
  8. chroot 環境下から抜ける。
    ※これより下記は、chroot 環境下から抜けた状態での作業。(ファイルパスなどに注意。)
  9. /mnt/dst/boot を /mnt/dst/boot.org にリネームする。
  10. /mnt/dst/boot.org/grub/menu.lst を /boot/grub にコピーする。
  11. /mnt/dst/boot.org/initrd.img-<カーネル名> を /boot にコピーする。
  12. 再起動して、フラッシュメモリのパーティションをルートパーティションとして起動できるか確認する。

上記のようなかたちで作業を行ったところ、フラッシュメモリのパーティションをルートパーティションとして起動することができた。
だたし、フラッシュメモリで運用するのはちょっと怖いので、そのうち HDD に再度移行しようかと思っている。