hack のためのネタ帳, etc,,,

引越しは KNOPPIX を使うと楽である。
GNOME Terminal 立ち上げて su コマンドで root になり gparted を起動すると楽。
ディスクが健康なら、そのままコピーすれば良い。

ディスクに欠損がある場合は dd コマンドを利用すると良い。
ここで hda1 を転送元、hdb1 を転送先とする。
まず fdisk で u コマンドを割り当て単位をセクタ単位にしておいて hda1 と同じ大きさで hdb1 を作成しておく。
hda1 には欠損があるため、direct I/O で、noerror にして1セクタ(512 byte)づつ読み込む。書き込みは、時間節約のため適当な大きさで。
dd if=/dev/hda1 of=/dev/hdb1 iflag=direct conv=noerror,sync ibs=512 obs=1M count=パーティションのセクタ数

不良セクタは zero fill すると代替(reallocation)が行われるらしい。
不良セクタがある場合
smartctl -t long /dev/hda1
のようにして、S.M.A.R.T の long test を行うと、不良セクタで止まる。
dd if=/dev/hda1 iflag=direct bs=512 count=1 skip=止まったセクタ番号
のようにして、本当に読めないことを確認。
dd if=/dev/zero of=/dev/hda1 oflag=direct bs=512 count=1 seek=止まったセクタ番号
のようにすると、zero fill が行われて、当該セクタが利用可能になる。
実際に代替が行われていれば、おそらくその痕跡として
smartctrl -A /dev/hda1
とした場合に Reallocated_Sector_Ct、Reallocated_Event_Count あたりの RAW_VALUE が増えているはずである。
あとは片っ端から、潰すだけだが、long を何度もかけると非常に手間がかかる。
もし Selective Self-test をサポートしていれば、-t select,潰したセクタ番号-max で潰したセクターから再開できるはずなのだが、どうも古いドライブは対応してそうにない雰囲気。
素直に、別のディスクに移して、全体を zero fill したほうが早い。

健康なHDDにコピーさえ出来れば、あとは gparted で好きな大きさにパーティションを変更すれば良い。

Windows の chkdsk は代替してくれているのか疑問符が付く。
空き領域の検査までしているはずなのに、self-test するとなぜか error sector は error のままである。


破損セクタが生じた NTFS の復旧

まず、すべてに優先して nftsclone すべし。新品の HDD 用意して丸ごとコピー。破損酷くても --rescure オプション付けとけばどうにかなる。
間違っても XP 以前の Windows で chkdsk をかけてはいけない。
chkdsk をかけちゃうと $BadClus に不良クラスタ情報が格納されてしまい、健康な HDD に nftsclone した後もまるで呪いのように不良クラスタ情報がついて回る。
こうなると ntfsresize が文句言い始めるので非常に面倒なことになる。
少なくとも gparted や qtparted 等の GUI wrapper からリサイズはおろかコピーさえも出来なくなってしまう。

$BadClus の中身を抹殺すれば、不良クラスタレスの NTFS に生まれ変わってくれるはずなのだが、それが余り簡単な作業ではなさげ、、、
やり方は以下のリンク参照。
HDD 側に代替させず FS レベルで不良クラスタ処理やっちまう上に、その情報消せないとか MS ってば頭おかしいよ。
道理で chkdsk いくらかけても代替されんわけだ。
$BadClus のクリアとかスクリプトか何か書かないと、とても手作業でやる気にならない。
Vista 以降では chkdsk /b で不良クラスタの再評価が出来るらしいが、ぶっちゃけ、Vista 買ってくるのが一番安全でお手軽に思えてならない。

Katy, Thanks. GJ. ;-)


あと以下に ntfstruncate 使うやり方もあるんだけど、KNOPPIX 5.3.1 にはまだ入ってない(つ ;)
Windows 95, 98SE ではレジストリいじると、scandskw.exe に bad cluster の再評価をさせることができたらしい。 ScanDisk は FAT 専用なので NTFS には使えない。
NT 系の chkdsk でこの方法が使えるかどうかは不明。

chkdsk はどうも素性がよろしくない。 辺りを見ると、bad sector ある場合、SCSI ならデータバックアップして low level format 後書き戻せとか、平気で書いてあったりして、目が点になる。IDE に至っては、IOCTL_DISK_REASSIGN_BLOCKS できんからあきらめて買い換えろみたいな書き方。
今時の IDE は firmware が勝手に reallocate するのにその事は完全に無視。
fault-tolerant disk なら代替クラスタ(=FS側で代替した領域)にデータ移すけど、そうじゃなければ代替領域は 0xFF で埋めるとか。
そこで bad sector を一旦ゼロフィルすれば IDE でもセクタ代替がハード的に発生するわけだから、再度チェックしても bad sector のままなら諦めてクラスタ代替するのが、どう考えても正しいやり方である。
もう何を考えてるんだか、わけが分からんです。


関連

タグ

このページへのコメント

ntfsやfatのfsに記録されているバッドクラスタ情報はchkdskに不良クラスタ再検討オプションを着けて実行すればよいだけだと思うが

0
Posted by 通りすがり 2008年11月25日(火) 16:58:33 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます