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

公開 | 更新 
図1.USBストレージ4本挿しRAID10構成

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

RAID10システム構成

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

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

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

Raspberry Pi 3B+に入っているOSは次の通り、セットアップ当時のRaspbian 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 へ複製します(デバイス表記順に注意。 sgdisk -R [] [] )。この時UUIDもコピーされてしまうので、別途再生成を忘れずに( sgdisk -G )。

いよいよRAID6の作成です。ここで4本中、まだ参加しない2本( /dev/sda1 と /dev/sdd1 )は missing にしておきます。

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

 

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

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

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

 

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

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

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

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

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

 

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

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

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

 

5.今後の再発防止

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

設定ファイル /etc/ssmtp/ssmtp.conf では、メール送信元に個人用のGmailを用い、次のように設定しました。

 

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

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

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

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

 

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

 

created by Rinker
¥2,257 (2024/02/25 18:39:46時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA