/* * make backup of CF-R5 by FreeBSD * FreeBSD 的 Let's note CF-R5 のバックアップ方法 * by uratan! 2007.4.17, 2007.7.3 */
Panasonic のノート PC、Let's note CF-R5 の隠しリカバリ領域の
バックアップをFreeBSD 的に取ってみました。
●用意する環境
・Let's note CF-R5L●事前準備
・USB CD-ROM ドライブ
・FreeBSD 6.2R install CD
・親 FreeBSD マシン
各マシンの IP アドレスは以下のとおりと仮定します。
・親 FreeBSD マシン 192.168.7.55なお、ネットワークはケーブルを介してつなぎます。 無線 LAN は使えません。
・Let's note CF-R5 192.168.7.66
親 FreeBSD マシンにて、以下を準備します。●ブート
1. nfs サーバーとして使えるように設定する。
2. スペシャル atacontrol を make しておく。:::: /etc/rc.conf :::: nfs_server_enable="YES" # This host is an NFS server (or NO). nfs_reserved_port_only="YES" # Provide NFS only on secure port (or NO).:::: /etc/exports :::: /usr -maproot=root -alldirs -network=192.168.7.0
install CD からソースを解凍し、 パッチ を充てて作成します。 (Makefile に "LDFLAGS= -s -static" の 一行を追加する必要があるかもしれません)# mount /cdrom # mkdir /usr/xxx # cd /usr/xxx # cat /cdrom/6.2-RELEASE/src/ssbin.a* | tar xzvf - sbin/atacontrol # umount /cdrom # cd sbin/atacontrol # patch < /somewhere/someplace/the-patch # make
CF-R5 に USB CD-ROM を接続し、FreeBSD 6.2-RELEASE install CD-ROM にて ブートします。ATA CD-ROM ドライブをそこいらへんの ATA-USB 変換ケーブル で変換したものでもブートできました。●HDD プトテクトの解除
(2012.10.24 これ 元の ATAPI CD が MATSHITA 製だったからかもしれません)
installer が起動したら すかさず fixit 環境をたちあげ、network 経由で 親 FreeBSD マシンのディスクをマウントします。●リカバリーデータの吸出し先に用意したスペシャル atacontrol を使って HDD の領域プロテクトを はずします。# ifconfig rl0 inet 192.168.7.66 # mount_nfs 192.168.7.55:/usr/xxx /mnt
まず現状を確認すると、
と表示されます。# /mnt/sbin/atacontrol cap ad0 ... device model TOSHIBA MK6034GAX ... lba48 supported 110912760 sectors ...
以下の手順により HDD の領域プロテクトをはずし、一度 OS から 切り離すことで変更後の領域を認識させます。/var/log/messages に残ったログの確認の方がわかりやすいかもしれません。# /mnt/sbin/atacontrol max ad0 # /mnt/sbin/atacontrol detach ata0 # /mnt/sbin/atacontrol attach ata0 # /mnt/sbin/atacontrol cap ad0 ... lba48 supported 117210240 sectors ...# dmesg | fgrep TOSHIBA ad0: 54156MB <TOSHIBA MK6034GAX AC102F> at ata0-master UDMA100 ad0: 57231MB <TOSHIBA MK6034GAX AC102F> at ata0-master UDMA100 <=== 3GB 増えてる
親 FreeBSD マシンの HDD に余裕があるならまるごと吸い出すのもいいですが、 (bs をある程度大きくとっておかないと時間がうんとかかります)●おまけMBR とリカバリー領域だけにとどめておくと効率的ですね。# dd if=/dev/ad0 bs=65536 | gzip > /mnt/dd-alldisk.gz
(ネットワークを流れるデータが極小になるように、こちら側で圧縮します)# dd if=/dev/ad0 bs=512 count=1 | gzip > /mnt/dd-mbr.gz # dd if=/dev/ad0 bs=32256 iseek=1760520 | gzip > /mnt/dd-recov.gz(ここでは 63セクタを 1ブロックとして扱ってまして、
32256 とは: 512[byte/sector] * 63[sector]
1760520 とは: 110912760[LBA] / 63[sector] という意味です)
吸い出したリカバリー領域を別の LBA に置いてブートさせる場合には、 リカバリー領域の先頭セクタに含まれる「自分はここに置いてある」情報の LBA(4バイト)を書き換える必要があるようです。|0000 : EB 58 90 49 42 4D 20 20 37 2E 31 00 02 08 20 00 : .X.IBM 7.1... . |0010 : 02 00 00 00 00 F8 00 00 3F 00 FF 00 F8 64 9C 06 : ........?....d.. . . . ~~~~~~~~~~~ 0x069c64f8 is 110912760 |01F0 : 42 6F 6F 74 20 66 61 69 6C 75 72 65 00 00 55 AA : Boot failure..U.
- * - * -
まだやり方を模索していた頃...
/* * make backup of CF-J10V by FreeBSD * by uratan! 2012.6.9 * revised: 2022.9.10 */
Panasonic Let's note CF-J10V のリカバリ領域のバックアップを、
例によって FreeBSD 的に取ってみました。
リカバリ領域は隠されてなかったので普通の作業です。
細かいところは上の CF-R5 のもご参照ください。
●使用した環境
・Let's note CF-J10V●ブート
・親 FreeBSD マシン (8.1-RELEASE)
・FreeBSD 8.3-RELEASE install DVD
・USB DVD ドライブ: LF-P968C
なお、ネットワークはケーブルを介してつなぎます。 無線 LAN は使えたとしても遅いですし。
BIOS setup にてブートの優先順位を変更します。USB 光学ドライブを内蔵 HDD よりも上にしておきます。●shell 環境
CF-J10V に LF-P968C を接続し、FreeBSD 8.3-RELEASE install DVD にて ブートします。
installer が起動したら すかさず fixit 環境を立ち上げ…ようとしたら DVD が mount できないとのメッセージが…。●リカバリーデータの吸出し
とりあえず Holographic Shell を起動し、なにはともあれ 親 FreeBSD マシンのディスクを mount_nfs します。
/bin のツールの備えでは全然足りないので、親 FreeBSD マシンの /rescue/ を nfs で見える所に丸ごとコピーしました。親マシンの /bin などは 共有ライブラリベースで使えませんでしたので。
8.1R vs 8.3R の OS の minor version の違いはまあ上位互換でしょう。
しかし手作業では DVD を mount_cd9660 できるのにヘンですねぇ。
dmesg や fdisk にて HDD の様子を窺ったところ、特に細工はしてない模様 でしたので、後は dd するだけです。●おまけ
(HDD のお尻側では さすがにいろいろ無理がある 容量だからかな?)
fdisk の数値も 512bytes/sector のようですし、dd bs=512 で普通に アクセスできるようなので HDD のセクターサイズは 512bytes/sector なのでしょう、よかった。
# /mnt/rescue/dmesg ... ad4: 238475MB <Hitachi HTS543225A7A384 ESBOA60W> at ata2-master UDMA100 SATA 3Gb/s ... # /mnt/rescue/atacontrol cap ad4 ... lba supported 268435455 sectors lba48 supported 488397168 sectors ... # /mnt/rescue/fdisk ad4 ... The data for partition 1 is: sysid 39 (0x27),(unknown) start 2048, size 30720000 (15000 Meg), flag 0 beg: cyl 0/ head 32/ sector 33; end: cyl 1023/ head 254/ sector 63 The data for partition 2 is: sysid 39 (0x27),(unknown) start 30722048, size 614400 (300 Meg), flag 80 (active) beg: cyl 1023/ head 254/ sector 63; end: cyl 1023/ head 254/ sector 63 The data for partition 3 is: sysid 7 (0x07),(NTFS, OS/2 HPFS, QNX-2 (16 bit) or Advanced UNIX) start 31336448, size 122880000 (60000 Meg), flag 0 beg: cyl 1023/ head 254/ sector 63; end: cyl 1023/ head 254/ sector 63 The data for partition 4 is: <UNUSED>
gzip にて圧縮されたバックアップファイルの確認作業中に、dd の妙な 挙動に気が付きまして、以下 8.1-RELEASE での再現例をご覧ください。
[参考]
% dd if=/dev/random bs=512 count=2000 | gzip > t.gz 2000+0 records in 2000+0 records out 1024000 bytes transferred in 0.786689 secs (1301658 bytes/sec) % zcat t.gz | dd bs=512 count=100 | wc -c 100+0 records in 100+0 records out 51200 bytes transferred in 0.001149 secs (44562848 bytes/sec) 51200 <=== correct % zcat t.gz | dd bs=512 count=1000 | wc -c 993+7 records in 993+7 records out 511850 bytes transferred in 0.032756 secs (15626102 bytes/sec) 511850 <=== uum... % zcat t.gz | dd obs=512 | dd bs=512 count=1000 | wc -c 1000+0 records in 1000+0 records out 512000 bytes transferred in 0.038798 secs (13196525 bytes/sec) 512000 <=== correct
これって…、しかし dd 使うのに block size に気を使うなんて なんか本末転倒な…。
- * - * -
win7 より前に FreeBSD がブートされた幸せな子(?)
[2022.9.10 追記]
CF-J10V の HDD ですが、半年ほど前から いわゆる「プチフリ症状」が出始めました。 (読めるまでに何度もリトライが必要なセクタが部分的に出現した感じです) 嫌な予感がしつつも だましだまし使い続けていたのですが、 結局 boot 不能にまで至ってしまいました。
なにか予兆を感じていたのか そのちょっと前に取ってた backup はあったのだけれど、 果たして本当に windows 環境を復元できるのかぁ?
(HDD の換装自体は このページ を参考に すんなりできました)
使用した環境は
・親 FreeBSD マシン は 10.2-RELEASE
・boot メディアは FreeBSD-12.2-RELEASE-amd64-memstick.img
と上の記述の当時とは違いますが、考え方やり方は基本同じです。
HDD を換装した後の実際の書き戻しはこんな感じで。
# dmesg ... ada0: <TOSHIBA MQ01ABF050 AM0P6M> ATA8-ACS SATA 2.x device ada0: 300.000MB/s transfers (SATA 2.x, UDMA5, PIO 8192bytes) ada0: 476940MB (976773168 512 byte sectors) ... (500GBです、AdvancedFormat らしいですけど…) # ls /dev/*ada* (さらピンなので) /dev/ada0 (partition/slice は無いですが) # dd if=/mnt/j10/ada0-0-4096.dd of=/dev/ada0 (最初に MBR を書き戻すと) # ls /dev/*ada* (デバイスが現れますので) /dev/ada0 /dev/ada0s1 /dev/ada0s2 /dev/ada0s3 # zcat /mnt/j10/ada0s2.dd.gz | dd of=/dev/ada0s2 bs=64k (その後) # zcat /mnt/j10/ada0s1.dd.gz | dd of=/dev/ada0s1 bs=256k (各 slice 毎に) # zcat /mnt/j10/ada0s3.dd.gz | dd of=/dev/ada0s3 bs=1M (書き戻せます)
いやーちゃんと復元できましたよ! 良かったっす (手法が正しいことが初めて実証できた)
そして10年もよくがんばった 日立 HDD ! (ここ 8年間は ほぼ 24時間運転だったのに)
んで 見直したよ Windows 7! (エラーリカバリー系が意外と粘り強いことを知った)