PXE で SystemRescueCd をブートする

ディスクのブートブロックが壊れたとか,設定がおかしくなってうまく立ち上がらなくなったという時は,復旧用の汎用 Linux を利用すると便利。

もちろん LiveCD な UbuntuKNOPPIX(あと今は Fedora とかもいけるんだっけ)を立ち上げればいいんだけど,ディストリビューションによってはサポートしているファイルシステムにムラがあったりするので,SystemRescueCd を使っている。

いままではこれを CD ブートしてたんだけど,昨日 PXE ブートの環境を作ったので,せっかくだから PXE から SystemRescueCd が立ち上がるようにしてみた。


実は SystemRescueCd にはもともと PXE ブート用のしくみが備わっている。

  1. マスタとなるマシンで SystemRescueCd を立ち上げて
  2. そのマシンの IP 設定や PXE にまつわる設定を修正し
  3. /etc/init.d/pxebootsrv start とうちこむと PXE 用の各種サーバがたちあがる
  4. ターゲットとなるマシンで PXE ブートする

とすればよい。

だけど,これだとマスタとなるマシンは SystemRescueCd を立ち上げっぱなしにしなきゃいけない。たしかに SystemRescueCd を使うのはなんらかのトラブル時だけなので,そのときにどこかのマシンで SystemRescueCd を立ち上げればいいんだけど,せっかく PXE ブートの環境をセットアップしたのでそれを利用することにする。


なお,SystemRescueCd はけっこう巨大なので,

  1. kernel ブート
  2. initramfs 起動
  3. 本体読み込み&起動

の手順を経ている。この3番目のために,HTTP サーバ(あるいは FTP サーバ)が必要になる。


下記の手順をあみだすうえで,SystemRescueCd - PXE network booting3.2 The PXE boot process が参考になった。

SystemRescueCdPXE 用ファイルの準備

まず SystemRescueCd の CD イメージを取得して,適当な場所にマウントする。

# mkdir sysresc

# mount -o loop,ro -t iso9660 systemrescuecd-x86-1.2.2.iso sysresc

SystemRescueCd の本体イメージ(けっこう大きい;1.2.2 で 190M ある)を WWW 公開用フォルダにコピーする。

# cp sysresc/sysrcd.dat /var/www/html/

# cp sysresc/sysrcd.md5 /var/www/html/

SystemRescueCd の initrd (initramfs) の init の中で,この sysrcd.dat の MD5SUM をチェックしているため,sysrcd.md5 もコピーしておくことを忘れない。

SystemRescueCdカーネルと初期 initramfs をコピーする。この initramfs は,CD ブートの場合でも PXE ブートの場合でも共通なので CD の isolinux/ フォルダからコピーすればよい。

# cp sysresc/isolinux/rescuecd /tftpboot/rescuecd

# cp sysresc/isolinux/initram.igz /tftpboot/rescuecd.igz

もともとは initramfs は initram.igz という名前で存在するんだけど,ドキュメントに倣って rescuecd.igz という名前にしておいた。

これで CD イメージは用済みなのでアンマウントして大丈夫。

# umount sysresc

# rmdir sysresc

PXELINUX の設定

pxelinux.cfg/default は下記のような感じ。

default rescuecd
prompt 1
timeout 50

label rescuecd
kernel rescuecd
append initrd=rescuecd.igz netboot=http://THIS_HOST/sysrcd.dat ip=dhcp

もちろん THIS_HOST の部分は適宜書き換えること。この netboot= というカーネルコマンドラインパラメータを SystemRescueCd の initramfs(の init スクリプト)がパースしている。

なお ip=dhcp はなくても動いた(きちんと DHCP で取得してくれた)けど,ドキュメントに倣って一応つけたしといた。

起動

PXE ブートすると,CD で立ち上げたときと同じように SystemRescueCd が立ち上がる。

うぇぇコマンドラインかよ。って思った人は GUI (X) を立ち上げればよい。

さいしょ説明文を斜め読みして Xorg とか入力したら何もでてこずに(plain な X の画面だけ)ちょっとあせった。ちゃんと読むと wizard と入力しろって書いてあるね。