Skip to content

Instantly share code, notes, and snippets.

@cordx56
Created September 4, 2019 21:10
Show Gist options
  • Save cordx56/c65ce99ded4e25daa3b278fe895196ff to your computer and use it in GitHub Desktop.
Save cordx56/c65ce99ded4e25daa3b278fe895196ff to your computer and use it in GitHub Desktop.

NAS(RAID10, Btrfs) 復旧メモ

概要

NASとして利用しているNETGEAR RN314が今年の4月に急に機能しなくなった1。 調べてみたところ、起動してしばらくするとbtrfs-transactiプロセスがリソースを食い潰し、一切アクセスが不可能な状態になっている。 NAS単体でどうにかできないかと試行錯誤したがどうにも復旧できなかったため、コンピュータに直接HDDを接続することで回復を試みた。

コンピュータに接続

SATAケーブルを利用してNASに利用していた全てのHDDをコンピュータに接続する。 4台のHDDでRAIDを構成していた為、必要なSATA接続は4つ。 マザーボードの空きSATAポートが丁度4つだったのでなんとかなった。 SATAケーブルはこのために4本買い足した。

今回、データを失うのが怖かったため、このドライブのバックアップの為だけに6TBのHDDを用意した。 SATAケーブルも決して安くはないため、復旧のためになかなかお金をかけたことになる。

コンピュータにHDDを接続する前に、予めソフトウェアRAID及びBtrfsの構成に必要なツール群をインストールしておく。 私の環境はArch Linuxだったので、次のようになった。

$ sudo pacman -Sy mdadm

Btrfsの基本的なユーティリティはデフォルトでインストールされていた。

RAIDを構成

HDDを接続して起動したら、ソフトウェアRAIDを利用してRAID構成のHDDを認識させる。 コマンドの意味は $ man mdadm のEXAMPLESを参照されたい。

$ mdadm --examine --brief --scan --config=partitions
$ cat /proc/mdstat
Personalities : [raid10] [raid1] [raid6] [raid5] [raid4]
md125 : active (auto-read-only) raid6 sdb2[2] sdd2[0] sdc2[3] sde2[1]
      1047424 blocks super 1.2 level 6, 64k chunk, algorithm 2 [4/4] [UUUU]

md126 : active (auto-read-only) raid10 sdd3[0] sde3[1] sdc3[3] sdb3[2]
      5850833664 blocks super 1.2 64K chunks 2 near-copies [4/4] [UUUU]

md127 : active (auto-read-only) raid1 sde1[1] sdb1[2] sdd1[0] sdc1[3]
      4190208 blocks super 1.2 [4/4] [UUUU]

unused devices: <none>

今回の例では、出力からmd126がRAID10とわかる。

RAIDを開始する。

$ sudo mdadm -R /dev/md126

ここまででソフトウェアRAIDの構成が終わり、コンピュータにマウントができるようになった。

バックアップ

念の為、Btrfs修復の前にバックアップをとることにした。

構成しているHDDはRAID10で6TB、利用していた容量がまだ1.5TBほどだった為、6TBのHDDにバックアップをとることができた。

$ sudo dd if=/dev/md126 of=~/backup/2019-09-02.img bs=512 conv=sparse

bs=512 conv=sparse を指定することで、データの入っていないディスク部分の容量を圧縮することができる。 詳しくは「dd conv sparse」とかでググってほしい。 こうすることで、容量6TBのHDDイメージを1.5TBほどで保存できた。

Btrfsのマウント

普通にマウントする。

$ sudo mount /dev/md126 /mnt/nas

特にファイル操作などをするわけでもないのであれば、マウントをする必要はない。

次のBtrfsの修復でアンマウントが必要になるので、作業を終えたらマウントを解除する。

$ sudo umount /mnt/nas

Btrfsの修復

今回はBtrfsに何らかの問題が起きている可能性が高かったため、Btrfsのチェックを行った。

$ sudo btrfs check /dev/md126

出力は省略するが、出力の最後に error(s) found という文言があり、読むとどうやらqgroup周りが壊れているらしいと推測できた。 修復を実行する。

Wikiなどにもある通りbtrfs check での実行はまだ不安な要素も多いため、バックアップをとってから実行する。

$ sudo btrfs check --repair /dev/md126

no error found が出力されれば無事終了。

さいごに

今回の私の症状では比較的容易に修復ができたが、Btrfsがもっと深刻に破損した場合や、そもそもRAIDが破損した場合については、追加の修復が必要になるだろう。

Footnotes

  1. 余談ですが、NASを使い始めるとNASが生活に欠かせなくなってくるため、機能してない間はなかなかしんどかったです……

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment