※実際には12/24のネタです。

■レスキュー用のpxebootを構成する
 ・復旧可能なWinをわざわざ削除するというのは。
 ・毎回USB起動ディスクを作るのもつまらないので、今回はちょっとひねってみた。
 ・pxebootは相対ディレクトリ参照なので、シンボリックリンク等で複数の起動イメージを同時に管理出来る。
  ※私の場合は行なわないので、PXE起動メニューが編集可能であることだけ示しておく。

 ★状況

 ・保証期限の切れたnetbookを使ってLinux/Winのマルチブートを行なっていた。
 ・上記はUSB起動ディスク(MicroSD16GB+USBアダプタ)を使用していた。

 ・今回バッテリが外れる事による電源断の影響で、
  MicroSDのデータが飛んで、LinuxですらUSBデバイスとして認識しなくなった。
  ※ERROR 21
 ・SDカードアダプタに差し替えても認識しないので、MicroSD自体は完全に使えない状態。

 ・grubのマップ参照はこのUSB起動ディスクにあるのだが、
  grubは「/dev/sda1」として認識されているWin側も参照しており、
  多段ブートローダ状態だった。
 ・手元にあるのは2GBと8GBのUSBメモリだけ。

 ★対応
 ・pxebootで起動して、USBメモリにdebianをインストールする。
 ・USBメモリから起動してgrubの設定を変更して元の環境に戻す。
 ・ついでに多段ブートローダ状態を修復する。

■どうしてもUSB起動ディスクを直接作りたいという方はこちら。
 ※この時既に私自身、「pxebootでもいいんじゃない?」とか言ってます。。。

 debian i386/amd64 Lenny/Squeeze USB起動インストーラ。
 http://ameblo.jp/labunix/entry-11035573844.html

■母艦がlennyなので、基本的には以下と同じです。

 Debian Lennyでpxebootを設定、AMD64対応のSqueezeをインストールする
 http://ameblo.jp/labunix/entry-10925618932.html

■CPUはatomのnetbookが対象ですので、netboot.tar.gzは別途ダウンロードします。

 $ wget ftp://ftp.riken.jp/11/debian/debian/dists/lenny/main/installer-i386/20090123lenny9/images/netboot/netboot.tar.gz

■netboot.tar.gzの展開前後には、tftpboot配下をバックアップしておきます。

 $ tar zcvf tftpboot-i386debianlenny.tar.gz /var/lib/tftpboot/

■今回異なるのは、起動しないマシンが対象というところです。
 BIOS画面でもMACアドレスが確認出来ない為、
 アクセスされるまで確認が出来ません。
 ※MAC指定が出来ないので、一旦仮IP(割り当て可能な最小の値のIPアドレス)でアクセスしてきます。

 tcpdumpでポート6768で監視して、「Client-Ethernet-Address」を得て設定します。

■メニューはここでインクルードしてます。

$ cat /var/lib/tftpboot/pxelinux.cfg/default
# D-I config version 1.0
include debian-installer/i386/boot-screens/menu.cfg
default debian-installer/i386/boot-screens/vesamenu.c32
prompt 0
timeout 0

■下記の menu.cfg にlocaldiskから起動する為の設定を追加します。
 ※BIOSから選択出来るので、特に必要ではありませんが、
  ここで他のイメージも指定出来ます。

$ tail -13 /var/lib/tftpboot/debian-installer/i386/boot-screens/menu.cfg
label disk1
      localboot 0x80

label disk2
      localboot 0x81

label disk1SLX
      localboot 0x80
      append SLX=0x80

label disk2SLX
      localboot 0x81
      append SLX=0x80

■まずは8GBの方にインストールしてみます。
 ※私の場合、最小インストールしかしないのでどちらでも良いのだが。。。

 ・HDD側を削除しないように気をつけてインストール

■USB起動時にHDDの読み込み順序が変わったため、
 /dev/sdbとして認識される。
 grubの起動メニュー時にシングルユーザを「e」コマンドで編集、「b」コマンドで起動

■USB起動したWinパーティションがIDEとして認識されているのか、
 SCSIとして認識されているのか確認します。
 ※こちらはUSBメモリ側を初期化しないように注意する

# dmesg | grep hardware | grep [hs]d
# dd if=/dev/sda bs=512 count=1 | hexdump -C
# dd if=/dev/sda1 bs=512 count=1 | hexdump -C

■sda1に書き込まれていたのが原因だった。
 バイナリを見る際に、「GRUB」の文字が表示される。
 また、MBRは空だった。
 ※install-mbr実行後はバイナリに「MBR」の文字が見える

# apt-get install mbr
# /sbin/install-mbr /dev/sda
# /sbin/install-mbr --force /dev/sda

■USBメモリ側のGRUBの設定ファイルを変更し、
 マルチブートが出来る事を確認します。
 ※以下は確認のみ

title Windows
root (hd1,0)
savedefault
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
chainloader +1

■追記

今度はパーティションも認識しなくなった。「fdisk -l /dev/sda」が空。
ddで見ると、MBRはきちんとある。パーティション情報が上書きで消えたようだ。

 参考:
吹き飛んだパーティションをTestdiskで修復した 
 http://projectzero-swb.blogspot.com/2008/09/blog-post_27.html

# apt-get install testdisk 

上記参考URLの手順通りAnalyseするとパーティション情報が出てくるので、Writeする。
「fdisk -l /dev/sda」 で再チェック。問題が解決した。

■USBメモリを抜いて単体でWinが起動する事を確認します。
 ※デュアルブートになっていたところの修復を確認。

これでデュアルブートも単体ブートも復旧した。
Windows側もマウスポインタのドライバが認識しなかったり色々あったけど、
別にWindowsとしてはいつもの事なので、特に気にならない。

D2Dリカバリからドライバを再インストールして復旧。
余り使わないWindowsですが、そのうちクリーンインストールしますかね。。。

■更に追記。。。

FAT32のEISA構成となっていたD2Dリカバリ用のディスクが普通にDドライブとして登場した。
同じモデルのコンピュータの管理から、ディスクの管理を見て、違いが分かった。

 参考:diskpartコマンドでディスクのパーティションを操作する
 http://www.atmarkit.co.jp/fwin2k/win2ktips/1115dpartcmd/dpartcmd.html

diskpartコマンドで「list partition」で見たところ、パーティションタイプが、
「OEM」となるはずが「プライマリ」になっている。
また、「list volume」で出るはずの無いDドライブとして認識している。
正しくは以下のようになる。
修復した方は、種類が「0B」、隠し属性が「いいえ」になっている。

DISKPART> detail partition

パーティション 1
種類         : 12
隠し属性     : はい
アクティブ   : いいえ

このパーティションに関連付けられたボリュームはありません。

 参考:DiskPart
 http://technet.microsoft.com/ja-jp/library/cc773140(WS.10).aspx

■acerのリカバリディスク上にある「MBRwrWin.exe」を実行
 ※「d:\」に移動しないと、エラーが出た。
cmd
> cd /d d:\
> 
MBRwrWin.exe 
> shutdown -r -t 1

■再起動して確認したところ、EISA構成に戻った。
 マウスポインタのドライバの再読み込みの為に
 もう一度システムを再起動して完全復旧となった。
 Windowsって面倒ですね。。。w