木っ端拾いの材木流し

Cannot see the wood for the trees.

PC Solarisご臨終

やってもうた。ディスクの修復をミスってデータからOSまで綺麗に消えた OTZ

PC Solarisマシンでディスクの読み取りエラーが発生。

formatコマンドのpartition printで表示されるブロック数とsyslogのError Blockの番号から照合するとswapに割り当てているパーティションだった。別にデータは入っていないのでformatコマンドのディスクの修復で修復してみることにした。

前準備。/ にスワップ用のファイルを作ってスワップに追加。

# mkfile 1G /swapfile01
# swap -a /swapfile01
# swap -l
(結果が表示される)

swap -dコマンドでスワップパーティションを削除しようとしたが、現在のスワップがダンプの出力先に指定されているから削除できないと言われたので/etc/vfstabからはずして再起動。

# vi /etc/vfstab
(現在のスワップを追加しているエントリをコメントアウト)
(/swapfile01をスワップとしてマウントするエントリを追加する。/をマウントするエントリよりうしろに書く)
# shutdown -i6 -g0 -y

再起動後formatコマンドで修復に入る。いきなりanalyzeメニューのサブコマンドを実行するとディスク全体(全パーティション)が対象かつ不良ブロックを修復しようとするので、setupで設定を変えておく。

# format
(省略)
> analyze
(省略)
> setup
(analyze entire diskはn)
(blockを指定する。swapパーティションの最初から最後まで)
(ループ回数は1で十分)
(自動repairはnoにする)
(ランダムテストはいらない)
(書き込みパターンなんたらもいらない)
(defect list restoreこれがわからん。no)
(veriry disk labelこれもわからん。no)
> config
(結果を確認)

設定変更後、readを実行。

> read
error blkno 46502
:

エラーになったブロックが出てくる。

ブロックの修復方法は2つ。repairサブコマンドで1ブロックずつ指定して修復する方法と、setupでRepair defective blocks: yesにしてからanalyzeメニューのサブコマンドを実行し自動修復する方法。

前回はreadで出てきた数十個の不良ブロックを1個ずつrepairコマンドで修復した。というのも、Repair defective blocks? yesにしてreadを実行してもエラーが修復されなかったため。*1

で、今回はread以外のサブコマンドを使ってみた。自分が選んだのはverify。よりによって。

verifyも他のサブコマンドと同様ブロック範囲を指定すればそこだけを上書きすると思っていたが、マニュアルをよく読むと、

purge ディスク上のデータをすべて削除し、いかなる手段でも取り出せないようにします。ディスク全体 (またはディスクのセクション) に 3 種類のパターンを書き込むことにより、データを削除します。検査に合格すると16 進のビットパターンがディスク全体 (またはディスクのセクション) に上書きされます。
デフォルトで欠陥ブロックを修復します。
verify 最初の検査に合格すると、ディスク全体の各ブロックに固有のデータを書き込みます。次の検査に合格すると、データを読み取り、検証します。ディスク上の既存のデータは破壊されます。デフォルトで欠陥ブロックを修復します。
Solaris 10 System Administrator Collection - Japanese - Solaris のシステム管理 (デバイスとファイルシステム) - 15. format ユーティリティー (参照情報) - format のメニューとコマンドの説明 - analyze メニュー

ひとつ上のpurgeと比べるとverifyには「ディスク全体」のうしろに括弧書きがない。つまりsetupのStarting block number: やEnding block number: で選んだブロック番号の範囲とは関係なく、ディスクのすべてのデータを上書きする。えー。

このときはまだそれに気づかず、

analyze> verify
 Ready to verify (will corrupt data). This takes a long time,but is interruptable with CTRL-C.
 Continue? y

はい消えたー。(CV:愛川欽也)
verify終了後にreadを実行するとエラーは出なくなった。formatコマンドを終了して再起動。この時点ではまだ操作できている。

再起動後、BIOS:OK→Primery Boot(ブルーバックのメニュー):OK→Secondary Boot(白バックのメニュー):黒い背景にloading boot.iniとだけ表示された状態で停止。本当にありがとうございました。

*1:Restore defect list? とRestore disk label? の設定がまずかったのかも知れない。前回はたしかno,noで実行した。この2つのオプション、何をどこからどこに復元するのか説明されていない。Restore defect list? で言うと、readなどで見つかった不良ブロックをディスク上のprimeryのdefect listに書き込むことを言っているのか、backup defect listをprimeryに上書きすることを言っているのか不明。