ThinkPad X60s DtoD(Disk to Disk) リカバリー領域の移植
ThinkPad X60s を買った。
安かったので HDD 40GB のモデルを購入したんだけど、もちろんそんな容量では話にならないので、さっそく HDD を換装した。
その際 DtoD(Disk to Disk)リカバリー領域を移植したので、その時の記録を残しておこうと思う。なお、本体と換装用ドライブ以外に私が使ったのは以下のもの。
- USB 接続 HDD ケース (2.5" SATA 用)
- Linux マシン1台
- Windows マシン1台
- USB FDD
- リカバリーディスクを起動するのに必要。ネットワークブートが出来るなら memdisk (syslinux に同梱)を使えるので不要かも。
- Debian(etch) の netboot インストーラ
- 試行錯誤の度にネットワークブートするのが面倒だったので、etch をインストールしてしまった。
私がやった手順は以下のとおり。
- ドライブを換装する。元のドライブは USB 接続な HDD ケースに納める。
- 有線 LAN を使ってネットワークブート。適当なディスクレス Linux 環境を起動させる。また、USB に移植元のドライブを接続して認識したことを確認する(dmesg とか /proc/partitions とか)。
- 以後、移植先のディスクを /dev/sda、移植元のディスクを /dev/sdb とする。
- 私はこの時に HDD に Debian GNU/Linux をインストールした。
- " fdisk -l /dev/sdb " などで DtoD 領域のサイズを確認した後、移植先の HDD に適当にパーティションを確保して、dd でパーティション内容を丸ごとコピー。
- 移植先のディスクのジオメトリ情報を記録しておく。
- sfdisk -l /dev/sda
- fdisk -l /dev/sda
- 移植先パーティションのブートレコードを取り出す。(移植先パーティションは /dev/sda2)
- dd if=/dev/sda2 of=/tmp/sda2.bin count=1
- file コマンドなどで、先ほど取り出した中身を確認する。ヘッダ数(heads)、開始セクタ位置(hidden sectors)、セクタ数(sectors)などが実際の値ではなく、移植元のドライブの値になっているはずなので、適当なバイナリエディタ等で修正する。
- 編集するアドレスは、dosfstools のソースの mkdosfs.c の msdos_boot_sector の定義が参考になる。
- バイナリの編集には vim + xxd が便利。
- 成功したかどうかは、セーブして file コマンドで確認。 32 MB) , FAT (32 bit), sectors/FAT 8680, reserved3 0x800000, serial number 0xccdee5ea, label: "SERVICEV001"">*1
- ブートレコードを移植先パーティションに書き戻す。
- dd if=/tmp/sda2.bin of=/dev/sda2
- Lenovo からリカバリー修復ディスケット]をダウンロードし、そこからブートする。
- "replace the current mbr" を選ぶ。
- 後は、マシン起動時に ThinkVantage ボタンを押せば Rescue and Recovery メニューに入れるはずなので、システムのリカバリーを選択して Windows 環境を復旧させれば作業終了。
以上の方法は「私の場合、それで出来た」というだけであって、当然ながらあらゆる保証はしないので、参考にする場合は At your own risk で。それに、たぶんもっと簡単な方法がありそうな気がする。
その他、作業中に気づいた点などは以下のとおり。
- DtoD 領域は、パーティション ID こそ特殊なものの、中身は FAT32。
- とは言え、ブートレコードが特殊らしく、普通に DOS や Windows のブートが可能な FAT32 パーティションを作成し、ファイルをコピーする、という方法ではダメなようだ。
なお、今回の作業にあたって、X40 - ThinkPad X60s/X40/X31 メモ の記述がたいへん参考になったことを申し添えておく。