利用しているSSDが不調になってしまったので、そのときに調べたことなどを記録しておきます。
今回はほぼ自分用の備忘録です。RAID1のミラーリングでも二台同時故障があるという記録です。
ゲストOSが調子悪い
宅内LANで主にLinuxサーバをゲストOSとして稼働していたクライアントHyper-V環境で問題は起きました。
主にDebianでbindによるDNSとかsambaの小規模Active Directoryとか、PostfixによるメールサーバをホストしているクライアントHyper-V環境(ホストOSはWindows10)のゲストOSであるLinuxが調子が悪いようでした。
最初は1ゲストOSだけかと思っていたのですが、どうも他のゲストOSも調子が悪そう…。
Hyper-Vマネージャーからコンソールを開いて画面を見てみると、あるゲストOSでは、
"Read-error"とか"I/O error"といった文字が並んでいます。結果"kernel panic - not syncing"と言う具合にシステムが停止しているようでした。
別のゲストOSでも、
メッセージの出方は異なりますが、"Read-error"とか"I/O error"が並んで"kernel panic - not syncing"の文字が見て取れます。
他のゲストでは、
"Failed to write entry"に続き"ignoring: Read-only file system"となっていました。
実際にこれらのゲストOSにSSHで接続してログを確認しようとしたのですが、ログインこそできるものの、catコマンドやlsコマンドを実行すると、このように
「ディレクトリ’.’を読み込んでいます:入力/出力エラーです」
と表示され、コマンドが正常に実行されないという状況に。お手上げでした。
ストレージの問題を疑う
クライアントHyper-Vに構成されたゲストOSがすべて同じように"I/O error"や"Read-only file system"エラーを出していることから、これはストレージの問題だなと、なんとなくですが思いました。ただ、ユーザは自分一人だけとはいえ、これだけの数のサーバを(Debianの)Linuxで一から作り直すとしたら、結構な手間となります。
まず真っ先に現状のデータをバックアップすることに。Hyper-Vマネージャーからゲストを一台づつ右クリックで選択して、外付けHDDにエクスポート、かなり時間が掛かりましたが何とか全台エクスポートが完了しました。
Hyper-VのゲストOSのストレージとして使っていたのは以前にリビルドを試した「GW2.5ACX2-U3.1AC」をRAID1で二台のSSDをミラーリングで使っていました。
以前リビルドを試したときの模様は、<玄人志向RAIDケースのリビルドを試す - treedown’s Report>こちら、ご参考まで。
さっそくSSDをケースから取り出して調べて見ることにしました。
調べる
さっそく動作確認、一台を取り出してUSB経由でSSDの状態を確認してみます。
こういうときはいつもお世話になっているFromHDDtoSSDを使ってディスクの状態を確認、不良セクタなどが発生していれば確実に見つけ出してくれるのですが…、
今回はちょっと様子が違っていました。とにかくアクセススピードが遅い、不良セクタや故障を示すメッセージは動作ログ画面に表示されないのですが、ひたすらSSDのスキャンが遅い進捗で、500GBのSSDのスキャンが全然完了しません。
これも一種の故障時の症状なのかなぁと思い、もう一台(RAID1なので同一の状態のディスクが二台ある)を別のPCで接続し、ディスクの状態をCrystalDiskInfoで確認してみることにしました。
あまり詳しくはないのですが、たぶん「メディア消耗指標」という値が「3」というのはちょっと見掛けない数字になっています。試しに正常なSSDで同ツールを動作させてみたところ、
このように、メディア消耗指標の数字は「100」となり、その他の数字は変わらない結果が出ました。(温度はSSDによって相違しますが)
念のため、スキャン中ですぐに確認できなかったRAID1のSSDもう一台も確認してみたら、メディア消耗指標の数字は同じく「3」が表示されました。
「メディア消耗指標」の示すところを調べてみると、使い込まれた状態にこれが該当するようだということはなんとなく理解しました。やっぱり故障か寿命ということなのかなぁという感じはします。
あと、RAID1の二台目(ミラーリングの副系)なので、読み込み量が極端に少なく書き込み量が多いという状態だったので、RAID1の一台目(ミラーリングの正系)側の読み書きの総量も調べてみたら、
納得の値が出てきました。
これはもう故障という判断で良いような気がしてきました。
対処:SSD交換してエクスポートからデータをリストア
ひとまず予備のSSDに交換し、正常な読み書きを確認した後で、エクスポートしてあったゲストOSデータをリストアしていきます。パスが変わらないように(エクスポートするとフォルダ名や.vmcファイル格納先のパスが変わってしまうので)変更していきます。
しかし、エクスポートは成功したと思っていたのですが、コピーに失敗するVHD(.vhdxファイル)がいくつか出てきてしまいました。やっぱりSSDが故障しているのでHyper-Vゲストのエクスポートも上手くできていなかったのかも。
エクスポートを失敗したVHDデータは故障が疑われるSSDからコピーして成功しました。ただ、読み書きの速度低下が非常にネックとなってコピーにかなりの時間を要しましたが、何とか完了。
データをリストアしたHDDケースを再びHyper-VのホストOSとなる本体に接続して、起動を確認、ドライブレターが以前と同じになるように調整してゲストOSを起動確認していくと、SSD交換前に発生していたエラーは既に収まっていました。
まだ経過観察中ではありますが、基本的なサーバの動作は戻ってきてくれました。
課題:RAID1でも防げない同時故障
今回はRAID1を構成していたボリュームをゲストOSの領域として使っていたので、かなり油断があったのですが、SSDの劣化による寿命(※SSDは寿命を迎えると読み込みはできても書き込みできなくなる)ということであれば、同時に購入して同じ時間同じデータが書き込まれることで使い込まれていくというRAID1の動きを考えると同時にSSDの寿命を迎える、というのもなんとなくしっくりきます。不良セクタや他の故障であればRAID1で助かることもあるかもしれませんが、今回のような使い込まれることで寿命を迎えるというケースにはRAID1はあまり有効ではないなと思いました。
やはり定期バックアップを別のメディアに、という手法を考えたほうがいいのかもしれません。クライアントHyper-V環境なのでそんなに予算は掛けられないという一面もありますが、良いバランスを取りたいところです。