平衡点
2008/05/03
_ TuxOnIce で resume 失敗 -> USB メモリから rescue boot.
suspend のイメージを swap へ変えようとしたのだけれど, grub の update を忘れていて嵌る. 幸い妹が USB メモリを持っていたので, dual boot の Windows 側で USB メモリで installer を作成し, レスキューブートしてファイルを修復し, 事無きを得る.
「resume 時に異なるカーネルから起動するとマジ死亡だから注意」を体験.
教訓の為にメモしておく.
事の発端.
TuxOnIce(旧 Software Suspend2) で, 今迄 FileWriter を使っていたんだけど, resume する image を変えたり, 別に保存する必要も無いので SwapWriter に戻そうとした.
やることは
- /etc/hibernate/suspend2.conf の修正
- /etc/default/grub の修正
- /sbin/update-grub
- 再起動
- suspend, resume の確認
な訳ですが, 再起動せずに suspend しちゃった訳.
で, 「resume しないな」 「あ, grub のパラメタ違うじゃん」 「update-grub」 再起動 「を, resume したよ...あれ? read-only?」 なんと /etc/fstab が無い(笑)
initrd があって, grub で root を指定しているので, 起動はできる. けれど /proc が無いので全て read-only になっちゃう. single user mode で /etc/fstab を作成しようにも駄目. うーん.
USB メモリに Debian installer をセットアップ.
USB メモリがあったので, Debian installer 作成し, resuce boot してみることに. 作成手順は以下の通り.
- Windows で起動.
- debian installer の hd-media の中から、boot.img.gz をダウンロードしておく.
- 同じく, debian installer から, 適当な iso イメージをダウンロードしておく.
- とりあえず, どちらも C:\ 直下に置いた.
- Windows 用の syslinx を取得しておく.
- 今回は http://www.kernel.org/pub/linux/utils/boot/syslinux/ から入手.
- single user mode で起動.
- まっとうに使える環境があるなら, それで良いのだけど, 今回無いし(笑).
- USB メモリを挿す. -> /dev/sda だった.
VFAT なファイルシステムを作成する.
# mkfs.msdos -I /dev/sda [sda は USB メモリのデバイス]
Windows のパーティションを mount し, boot.img.gz と iso イメージを USB メモリに設置.
# mount -t ntfs /dev/hda1 /NTFS [ /NTFS は依然から存在していた. 無かったらどうすんだろ. /home ?] # zcat /NTFS/boot.img.gz > /dev/sda # mount -t vfat /dev/sda /mnt # cp /NTFS/**.iso /mnt # umount /mnt # umount /NTFS
- 再起動後, Windows 側へ.
syslinux で SYSLINX MBR を install.
- USB メモリが D: と認識されたなら, cmd 上で
# syslinux -a D:
- 再起動して USB メモリから boot.
...を, ちゃんと起動したよ.
rescue 作業
Debian Installer で resuce boot して, shell へ行き, nano で /etc/fstab を書いた. その後, fsck.ext3 を実行して再起動.
続いて, lost+found 以下のファイルの復旧を試みる. 調べてみると, 主に /proc/数字, だったので一安心.
...他に壊れている所があると嫌なんで, もう一度 fsck.ext3 をかけてみたが, とりあえず問題無いみたい.
...ああ, 焦った.