BUFFALOのNAS TeraStationが壊れました。
もう5年以上稼働していて、ある日突然ディスクエラーでEMモードになりました。
ディスクは1TBのHDDを2枚挿しでRAID1(ミラーリング)構成だったのですが、運悪くどちらのディスクもエラー発生。。
バックアップは取っておらず。。
うんともすんとも言わなくなったので、LinuxのUbuntuブータブルUSBドライブを使用してデータ復旧・救出を行いました。
UbuntuブータブルUSBドライブの作成方法は、こちらの記事を参考にしてください。
なお、今回のバージョンは以下の通りです。
TeraStationのデータ領域は6つ目のXFSフォーマットのパーティション
TeraStationのディスクは、6つのパーティションに分かれています。
6つ目の一際大きな容量のパーティションにデータが格納されているのですが、ファイルシステムはXFSフォーマットです。
そのため、Windowsではディスクの管理で見てもRAWとなっていて、ドライブを割り当てて中身を見ることはできません。
また、EXTではなくXFSなのでフリーソフトのExt2Fsdも使えません。
Linux(Ubuntu)ならXFSフォーマットを扱えます。
fdiskコマンドで見てみたところ、この場合は「/dev/sdc6」がデータ領域ですね。
$ sudo fdisk -l
ディスク /dev/sdc: 931.5 GiB, 1000204886016 バイト, 1953525168 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 15BFC779-8AC6-47BD-AAFD-3FE2A9BE3482
デバイス 開始位置 最後から セクタ サイズ タイプ
/dev/sdc1 2048 2002943 2000896 977M Microsoft 基本データ
/dev/sdc2 2002944 12003327 10000384 4.8G Microsoft 基本データ
/dev/sdc3 12003328 12005375 2048 1M Microsoft 基本データ
/dev/sdc4 12005376 12007423 2048 1M Microsoft 基本データ
/dev/sdc5 12007424 14008319 2000896 977M Microsoft 基本データ
/dev/sdc6 14008320 1937508319 1923500000 917.2G Microsoft 基本データ
ddコマンドでディスク丸ごとバックアップ
まずは念のために、Ubuntuでディスクを丸ごと空きディスクにバックアップします。
TeraStationのHDDの接続には、サンワサプライのSATA-USB変換ケーブル USB-CVIDE4を使用しています。
USB-CVIDE4の詳細は、こちらの記事を参考にしてください。
接続したら、dmesg・fdiskコマンドでデバイスを確認して、ddコマンドを実行してしばらく放置しました。
$ sudo dd if=/dev/sdc of=/dev/sdd bs=512 conv=noerror,sync
- ddコマンドのオプション
- if … 読み出すファイル・デバイスファイルを指定。
- of … 書き込むファイル・デバイスファイルを指定。
- bs … 1回に読み書きするブロックサイズ。エラーが多い場合は少ないバイト数にする。
- conv … 変換方法を指定。
- noerror … 読み出しエラー後も処理を続行。
- sync … 各入力ブロックを「bs」で指定したサイズになるまでNULL文字で埋める。
XFSフォーマットのパーティションをマウントしてデータ復旧
続いて、XFSフォーマットのパーティションをマウントします。
XFSファイルシステムを扱うためのxfsprogsがインストールされていない場合は、こちらのコマンドでインストールします。
UbuntuブータブルUSBドライブでは、初めからインストール済みでした。
$ sudo apt install xfsprogs
mountコマンドで、適当な位置にマウントします。
$ sudo mkdir /mnt/nas
$ sudo mount -t xfs /dev/sdc6 /mnt/nas
- mountコマンドのオプション
- -t … マウントするファイルシステムの種類を指定。
マウントがうまくいけば、マウントしたディレクトリでTeraStationの共有フォルダがそのままの構成で見れるようになっていると思います。
うまく動いているうちにさっさと外付けHDDや他のNASにでもデータを全部コピーしましょう。
なお、アンマウントはumountコマンドで行います。
$ sudo umount /dev/sdc6
BUFFALO TeraStationの詳細は、こちらのリンクからご確認いただけます。
xfs_repairコマンドでXFSファイルシステムの修復
とりあえずデータは復旧できたのですが、せっかくなのでいろいろと見ているともう1本のHDDは同じようには行きませんでした。
そのときの作業メモです。
こちらのHDDは、エラーが発生してマウントできませんでした。
$ sudo mount -t xfs /dev/sdc6 /mnt/nas
mount: /mnt/nas: wrong fs type, bad option, bad superblock on /dev/sdc6, missing codepage or helper program, or other error.
xfs_repairコマンドでXFSファイルシステムの修復を試みます。
まずは検査だけ実行しました。
$ sudo xfs_repair -n /dev/sdc6
Phase 1 - find and verify superblock...
bad primary superblock - bad magic number !!!
attempting to find secondary superblock...
.found candidate secondary superblock...
error reading superblock 16 -- seek to offset 984832016384 failed
unable to verify superblock, continuing...
...
..........................................................found candidate secondary superblock...
verified secondary superblock...
would write modified primary superblock
Primary superblock would have been modified.
Cannot proceed further in no_modify mode.
Exiting now.
- xfs_repairコマンドのオプション
- -n … 検査だけで修復は行わない。
何かイケそうなので、修復を実施。
$ sudo xfs_repair /dev/sdc6
Phase 1 - find and verify superblock...
bad primary superblock - bad magic number !!!
attempting to find secondary superblock...
.found candidate secondary superblock...
error reading superblock 16 -- seek to offset 984832016384 failed
unable to verify superblock, continuing...
...
..........................................................found candidate secondary superblock...
verified secondary superblock...
writing modified primary superblock
xfs_repair: V1 inodes unsupported. Please try an older xfsprogs.
ダメでした。。
古いxfsprogsを使えとのメッセージが出ています。
KNOPPIXでXFSファイルシステムの修復
ググってみると、LinuxディストリビューションのKNOPPIX(クノーピクス)の古いバージョンでならできるみたいでした。
なので、こちらのリンク先からバージョン7.0.2のISOファイルをダウンロードしてきました。
最終更新日はかなり古くて、2012年6月17日です。
Ubuntuと同様の手順で、KNOPPIXのブータブルUSBドライブを作成しました。
KNOPPIXでマウントしてみると、「構造体を内容消去する必要があります」と出てできません。
$ sudo mount /dev/sdc6 /mnt/nas
mount: 構造体を内容消去する必要があります
なので、先ほどと同様にxfs_repairコマンドでXFSファイルシステムの修復を試みます。
$ sudo xfs_repair -n /dev/sdc6
Phase 1 - find and verify superblock...
sb root inode value 18446744073709551615 (NULLFSINO) inconsistent with calculated value 192
would reset superblock root inode pointer to 192
sb realtime bitmap inode 18446744073709551615 (NULLFSINO) inconsistent with calculated value 193
would reset superblock realtime bitmap ino pointer to 193
sb realtime summary inode 18446744073709551615 (NULLFSINO) inconsistent with calculated value 194
would reset superblock realtime summary ino pointer to 194
Phase 2 - using internal log
- scan filesystem freespace and inode maps...
bad magic # 0x0 for agf 0
bad version # 0 for agf 0
bad length 0 for agf 0, should be 7513671
bad magic # 0x0 for agi 0
bad version # 0 for agi 0
bad length # 0 for agi 0, should be 7513671
would reset bad agf for ag 0
would reset bad agi for ag 0
bad uncorrected agheader 0, skipping ag...
sb_icount 0, counted 253440
sb_ifree 0, counted 1100
sb_fdblocks 240404480, counted 223191396
root inode chunk not found
Phase 3 - for each AG...
- scan (but don't clear) agi unlinked lists...
error following ag 0 unlinked list
- process known inodes and perform inode discovery...
- agno = 0
bad magic number 0x0 on inode 192
bad version number 0x0 on inode 192
…
No modify flag set, skipping filesystem flush and exiting.
やたらと時間がかかって、検査が終わったみたいです。
よく分からんので、修復を実施しました。
$ sudo xfs_repair /dev/sdc6
Phase 1 - find and verify superblock...
sb root inode value 18446744073709551615 (NULLFSINO) inconsistent with calculated value 192
resetting superblock root inode pointer to 192
sb realtime bitmap inode 18446744073709551615 (NULLFSINO) inconsistent with calculated value 193
resetting superblock realtime bitmap ino pointer to 193
sb realtime summary inode 18446744073709551615 (NULLFSINO) inconsistent with calculated value 194
resetting superblock realtime summary ino pointer to 194
Phase 2 - using internal log
- zero log...
ERROR: The filesystem has valuable metadata changes in a log which needs to
be replayed. Mount the filesystem to replay the log, and unmount it before
re-running xfs_repair. If you are unable to mount the filesystem, then use
the -L option to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.
あれ?ダメ?
ログが云々言うてるんで、-Lオプションを付けたら通りました。
$ sudo xfs_repair -L /dev/sdc6
Phase 1 - find and verify superblock...
sb root inode value 18446744073709551615 (NULLFSINO) inconsistent with calculated value 192
resetting superblock root inode pointer to 192
sb realtime bitmap inode 18446744073709551615 (NULLFSINO) inconsistent with calculated value 193
resetting superblock realtime bitmap ino pointer to 193
sb realtime summary inode 18446744073709551615 (NULLFSINO) inconsistent with calculated value 194
resetting superblock realtime summary ino pointer to 194
Phase 2 - using internal log
- zero log...
ALERT: The filesystem has valuable metadata changes in a log which is being
destroyed because the -L option was used.
- scan filesystem freespace and inode maps...
bad magic # 0x0 for agf 0
bad version # 0 for agf 0
bad length 0 for agf 0, should be 7513671
bad magic # 0x0 for agi 0
bad version # 0 for agi 0
bad length # 0 for agi 0, should be 7513671
reset bad agf for ag 0
reset bad agi for ag 0
bad agbno 0 for btbno root, agno 0
bad agbno 0 for btbcnt root, agno 0
bad agbno 0 for inobt root, agno 0
agi unlinked bucket 0 is 0 in ag 0 (inode=0)
…
done
- xfs_repairコマンドのオプション
- -L … ログを強制的に消去(ゼロで初期化)。
ということで、再びマウントしてみるとファイルは全部「lost+found」ディレクトリに移動されてしていました。
フォルダ構成もなくなってるし、多くはファイル名(拡張子含む)も失っていて、どれがどのファイルかは探すの大変。。
1本目のHDDでデータ復旧できていて本当に良かった。。
最後に
今回は、BUFFALOのNAS TeraStationのディスク故障したときの話でした。
LinuxのUbuntuブータブルUSBドライブでXFSフォーマットのデータ領域から無事にデータ復旧・救出できました。
故障したTeraStationを処分する前に、acp_commanderでTeraStationのroot取得・SSH接続をしてみました。
BUFFALO TeraStationの詳細は、こちらのリンクからご確認いただけます。
コメント