Raspberry PiにUSBストレージで組んだRAID10障害からの復旧

投稿者: | 2020年9月1日

遠隔地にあるRaspberry Pi 3B+ の4つ全てのUSBポートに128GBのUSBストレージ、Sandisk Cruzer Ultra Flair (SDCZ73-128G-G46)を挿して構成しているRAID10に障害が発生したので、復旧を試みました。

前回webminを入れたことで見付かったRAID10障害、RAID10の2本降格は崖っぷちを意味します。障害発生時のディスク交換を鑑み、USBストレージ4本共同じ機種なので障害発生時に正しく個体識別出来るよう、予めシリアルナンバの下3桁をラベリングしています。

図1.USBストレージ4本挿しRAID10構成

図1.USBストレージ4本挿しRAID10構成

 Raspberry Pi 3B+に入っているOSは次の通り、セットアップ当時のJessieのままです。

早速ソフトウェアRAIDの現状を確認してみます。

抜けてしまっているのは、/dev/sdbと/dev/sddの2本であることは判りました。ダメ元で単に再追加させてみますが、ちょっと妙な理由で何度試行しても失敗します。

ここでUSBストレージの損傷であれば、I/Oエラーっぽいのが頻発するのですが、ログを確認しても類似するログエントリは無いので、抜けてしまったUSBストレージの再利用に望みはありそう。

結果的に再追加出来ない敗因は、このRAIDを組んだ際、各ディスク同じ機種だからとパーティショニングをせず、サイズいっぱいに自動設定としてしまったこと。将来の障害発生時の代替品調達を考えると、サイズ少し小さめの無難な容量でパーティションを切り、そのRAID構成とするのが、HDDであってもちょっとしたセオリーのはずでした。

 

もうRAID構成を単純に戻せないことと、幸い再利用可能と思われるディスクが2本あることから、次のようなシナリオで障害復旧を目指すことにします。

  1. はぐれディスク2本でRAID6アレイを2本足りない状態で新設する(RAID6には最低ディスク4本要)。
  2. RAID10アレイからRAID6アレイへrynscデータコピー。
  3. RAID10アレイを破壊、構成していたディスク2本を初期化してRAID6アレイへ合流。
  4. RAID6アレイはリビルド後、RAID6に必要な最低ディスク数確保につき、正常状態へ復帰。
  5. 今後の再発防止。

0.USBディスクのシリアル番号とドライブレターの照合

一応万が一に備え、現在抜けてしまっているディスクのシリアル番号を調べておきます。

と色々思いつくままにコマンド試しますが、ドライブレターとシリアルナンバが紐付けられた状態を確認出来るものはありません(usb-devicesは、シリアルナンバとUSBポート番号の紐付けまで)。次のlshwでようやく確認することが出来ましたが、デフォルトでは入っていないのでインストールが必要でした。

以上より個体は次のように特定されました。恒久的なダメージを受けている場合は、シリアル下3桁をラベリングしたストレージを現地作業員に交換してもらいます。

  • /dev/sda  4C530001160511110024  md0 member
  • /dev/sdb  4C530001040511109482  removed
  • /dev/sdc  4C531001600406117233  md0 member
  • /dev/sdd  4C530001060406120064  removed

 

1.ディスク2本でRAID6新設

先ずはぐれた2本のディスクを初期化、念の為superblockも消去します。

次にpartedを使い、sdbをディスクサイズ小さめでパーティショニングします。

こうして作成したsdbのパーティション情報をそっくりそのままsddへ複製します。この時UUIDもコピーされてしまうので、別途再生成を忘れずに。

いよいよRAID6の作成です。

コマンド自体は特にエラーなく成功したので、ステータスを確認。

 

2.古いRAID10アレイから新しいRAID6アレイへデータコピー

出来上がった/dev/md6にファイルシステムを作成し、一時的にマウントします。

rsyncでサクっとコピーします。計測し忘れましたが、USB接続な割にはさほど時間が掛からなかった印象です。

 

3.古いRAIDアレイを破壊し構成ディスクを新RAIDアレイへ合流

新しいRAIDアレイの中身に問題ないことが確認されたので、古いRAID10アレイを止めます。

同様に構成ディスクを初期化します。

既にRAID6を構成しているsdbからパーティション情報を複製し、UUIDを再生成します。

いよいよRAID6アレイへ合流させます。

 

4.RAIDリビルドを経て正常復帰

上記でaddされたことで即リビルドが開始されます。おおよそ10分で1%進捗するペースでしたので、翌日

忘れずにmdadm.confとfstabの設定を済ませ、再起動しても新しいアレイがマウントされ、共有フォルダとして機能することを確認しました。

 

5.今後の再発防止

今後RAIDアレイに異常が見付かった場合は、速やかにメールでお知らせしてくれるよう設定します。まずはRaspberry Piからメールを送信出来るよう、先人さまによるこちらの記事を参考にsSMTPを導入します。

ssmtp.confは個人用のGmailを使い次のように設定しました。

 

続いてmdadm.confの設定です。こちらを参考にさせて頂きました。

mdadmが既にモニタモードで動いていることを確認し、mdadm.confに宛先メールアドレスを設定します。

テストメールを送信してみます。

ほどなくして次のようなメールを受け取ることが出来ました。

 

今回、RAID障害顛末を記録を目的として、敢えて丁寧にまとめておいた次第です。

 

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA