mytips.exblog.jp ブログトップ

FreeBSD ハードディスク復旧作業 HDD修復
接続されたHDD(マウントできていない)を修復するやり方メモ。
起動パーディションに不具合が発生し、起動せず、別のマシンへ接続した状態

■HDDの修復ユーティリティffs2recovをインストールする
su
cd /usr/ports/sysutils/ffs2recov
make
make install


■ボリュームラベル /dev/ad1に修復を試みる
/usr/local/sbin/ffs2recov -s /dev/ad1
--------
結果
readin: bread failed (blk 7031899 len 4096) : Input/output error
-------
修復できない

「super block」というボリューム内のファイル情報(どこに、どのファイルが格納されているか記録してある番地情報のようなもの)が、破損するとボリューム全体が読み込み不可になる。
super blockは、重要な情報が格納されている為、利用していく内に、バックアップ(コピー)を別の領域にも保存していく仕組みが自動的に行っている。

ディスクメンテナンスコマンド fsck_ffs を使って、このsuper blockの再構築を試みる。
fsck_ffs /dev/ad1

このコマンドで破損したsuper blockが再構築されると、下記のようなパーティーションもマウント可能になるはず
/dev/ad1s1
/dev/ad1s1a
/dev/ad1s1b

マウントさせるには
su root
mkdir /old_hdd
mount /dev/ad1 /old_hdd
ls /old_hdd

マウント解除は
umount /old_hdd


/dev/ad1のsuper blockが復旧できない場合、オプションで上記予備領域に複製されたsuper block情報を元に再構築を試みる
予備のsuper blockがどこに保管されているかを調べる

newfs -N /dev/ad1
(newfsコマンドはHDDのイニシャライズ、フォーマットを行うコマンドなので、-Nオプションを忘れずに)

数字の羅列が変えてくるので、その数字のブロック数指定で
fsck_ffs -b 160 /dev/ad1
のように修復を試みる
(160は、newfs -Nで表示された数字)

別のパーティーションでも同じ
newfs -N /dev/ad1s1g
fsck_ffs -b 160 /dev/ad1s1g

正常にsuper blockが認識できたパーティーションは、マウント可能状態にあるので、破損したHDDからパーティーション単位でデータの復旧が可能になる

fsck_ffs /dev/ad1s1g

fsck_ffs/dev/ad1s1c
表示例================
** /dev/ad1s1c
** Last Mounted on /old
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
3143 files, 36124 used, 479947 free (1059 frags, 59861 blocks, 0.2% fragmentation)
====================
正常終了したら(正常終了しなかった場合の方法は別途メモ)
mkdir /old_hdd
mount /dev/ad1s1g /old_hdd
du
マウントを確認

ls /old_hdd

データをバックアップ
tar -cvf /home/work/ad1s1g.tar /old_hdd
みたいに
[PR]
by sato025 | 2008-10-10 16:35 | FreeBSD
検索
タグ
カテゴリ
以前の記事
最新のコメント
最新のトラックバック
Tool
from adgj.net wiki ..
Googleウェブマスタ..
from i yahoo i.com:..
[Mac] NAV fo..
from あるネットワーク管理者(よっ..
ライフログ
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧


var gaJsHost = (("https:" == doc ument.loc ation.protocol) ? "https://ssl." : "http://www.");doc ument.write(unesc ape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));var pageTracker = _gat._getTracker("UA-103429-5");pageTracker._trackPageview();