実行中に「mdadm」RAIDをチェックする方法は?


41

私は自宅でコンピューターのコレクションを入手し始めており、それらをサポートするために、RAIDアレイを実行する「サーバー」Linuxボックスがあります。

その現在mdadm RAID-1RAID-5私はより多くのドライブを持っていると行きます(そしてRAID-6私は望んでいます)。ただし、1つのドライブでデータが破損するというさまざまな話を聞いたことがありますが、最初のドライブに障害が発生し、2番目のドライブもねじ込まれている(および3番目、4番目の、5番目のドライブ)。

明らかにバックアップは重要であり、私もそれを大事にしていますが、この問題を解決し、実行中にRAIDをチェックできると主張するスクリプトを見たことがあることは知っています。しかし、これらのスクリプトを再び探していると、以前に実行したものに似ているものを見つけるのが難しくなり、時代遅れで何が変わったかを理解していないように感じます。

実行中のRAIDをチェックして、すべてのディスクがまだ正常に実行されていることを確認するにはどうしますか?

私はすべてのドライブでSMARTを監視しており、mdadm障害が発生した場合にメールで通知するように設定していますが、自分のドライブもときどき「チェック」することを知りたいです。


すでに正しい道を進んでいるように聞こえますが、ドライブのsmartctlの結果を送信するには、cronをセットアップするだけです。
-laebshade

回答:


56

冗長性を備えたRAIDのポイントは、可能な限り継続することですが、明らかに、障害のあるディスクなどの劣化モードになるエラーを検出します。配列の現在のステータスを表示するにはmdadm -D

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

さらに、mdadm -Dコンポーネントの故障などの問題がある場合、リターンステータスはゼロではありません(1はRAIDモードが補うエラーを示し、2は完全な故障を示します)。

また、を見ることで、すべてのRAIDデバイスステータスの概要を簡単に取得でき/proc/mdstatます。RAIDデバイスに関する情報も取得できます/sys/class/block/md*/md/*Documentation/md.txtカーネルのドキュメントを参照してください。一部の/sysエントリも書き込み可能です。たとえば、あなたはの完全なチェック引き起こすことができるmd0としecho check >/sys/class/block/md0/md/sync_action

これらのスポットチェックに加えて、mdadmは何か問題が発生するとすぐに通知することができます。あなたが持っていることを確認してくださいMAILADDR root/etc/mdadm.conf(いくつかのディストリビューション(例えばDebianは)これを自動的に設定します)。その後、エラー(劣化したアレイ)が発生するとすぐに、電子メール通知受け取ります

ローカルマシンのルートへのメール送信を受信して​​いることを確認してください(一部の最新のディストリビューションでは、すべての電子メールが外部プロバイダーを通過することを考慮しているため、これを省略していますが、本格的なシステム管理者にはローカルメールの受信が必要です)。ルートにメールを送信して、これをテストしますecho hello | mail -s test root@localhost。通常、適切なメール設定には2つのことが必要です。

  • ローカルマシンでMTAを実行します。MTAは、少なくともローカルメール配信を許可するように設定する必要があります。すべてのディストリビューションには適切なMTAが付属しており、何でも選択できます(ただし、メールをローカルに配信する場合はnullmailerは選択しません)。
  • システムアカウント(少なくともroot)宛てのメールを、定期的に読んでいるアドレスにリダイレクトします。これは、ローカルマシンのアカウント、または外部のメールアドレスです。ほとんどのMTAでは、アドレスはで構成できます/etc/aliases。次のような行が必要です

    root: djsmiley2k
    

    ローカル配信の場合、または

    root: djsmiley2k@mail-provider.example.com
    

    リモート配信用。リモート配信を選択する場合は、MTAがそのために構成されていることを確認してください。MTAによっては、newaliases編集後にコマンドを実行する必要がある場合があります/etc/aliases


nullmailerを使用しない理由を説明できますか?それは、unix.stackexchange.com / questions / 1449 /…で言及されている理由によるものですか?どのMTAをお勧めしますか?
キャメロンマーティン

@CameronMartin Nullmailerは、メールをリモートマシンにのみ転送し、ローカル配信は行いません。マシンからのメールを受け入れるSMTPサーバーがある場合は使用できますが、メールをローカルに配信する場合は使用できません。答えを編集して明確にしました。
ジル 'SO-悪であるのをやめる'

19

アレイ全体をオンラインにした状態で強制的にチェックできます。たとえば、配列onを確認するには/dev/md0、ルートとして実行します。

echo check > /sys/block/md0/md/sync_action

また、次のコマンドを月に1回実行するcronジョブがあります。

tar c /dir/of/raid/filesystem > /dev/null

ドライブ自体を徹底的にチェックするわけではありませんが、ディスクから(ほぼ)すべてのファイルが正常に読み取られることを定期的にシステムに強制的に確認させます。はい、一部のファイルはディスクではなくメモリキャッシュから読み取られます。しかし、ファイルがメモリキャッシュにある場合は、最近ディスクから正常に読み取られたか、ディスクに書き込まれようとしており、これらの操作のいずれかによってドライブエラーも検出されます。とにかく、このジョブを実行すると、RAIDアレイの最も重要な基準(「データを正常に読み取ることができますか?」)をテストし、3年間でアレイを実行してきましたそれを発見したこのコマンド。

1つの小さな警告は、ファイルシステムが大きい場合、このコマンドには時間がかかることです。私のシステムは約6時間/ TiBかかります。私はそれを使用しioniceて実行し、システムの残りがドライブチェック中に停止しないようにします:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null

ionice(デフォルトの)CFQ I / Oスケジューラを使用する場合にのみ機能することに注意してください。
トーター

だから、これはほとんどの人には明らかかもしれませんが、それは私にはわかりません-出力がdevnullにリダイレクトされるスクリプトを実行すると、実際に何かが通知されますか?「tar」でエラーが発生すると、これらのエラーがmdadmデーモンに伝搬され、(おそらく)メールが送信されますか?
ljwobker

あなたへの私の質問は、cronジョブから実行されている場合、どのようにtarエラーを検出するのですか?その出力はどこにありますか?私はあなたが定期的に監視することができ、ファイルまたはそれの最後尾にstderrのためにリダイレクトを追加したいと思っているだろうが:)ターミナルウィンドウを開くのコンソールに出力されている
Madivad

1
@ljwobker古いスレッドを復活させてすみません。ここでのtarコマンドの目的は、ボリュームの内容全体を読み取ろうとすることだと思います。これにより、ボリューム全体がまだ読み取り可能であることを確認し、mdに不良ディスクを検出する機会を与えます。
mikepj

1
cronjobから来る場合、cronは通常、すべての出力をmailto =の場所(設定されている場合)に直接送信し、そうでない場合はrootに送信します。しかし...オーバーヘッドが低くなるため、ddの方がtarよりも優れているのだろうか?
djsmiley2k-CoW

11

DebianおよびUbuntuの 'mdadm'パッケージにはファイルが含まれています

/etc/cron.d/mdadm

毎月最初の日曜日にコマンドが実行されます

/usr/share/mdadm/checkarray --cron --all --idle --quiet

これにより、すべてのアレイの一貫性がチェックされます(/ etc / default / mdadmでAUTOCHECKをfalseに設定しない限り )。レポートが「root」ユーザーに送信されます(このようなメールを受信して​​いることを確認してください)。


8

この単純な関数を使用して確認し/proc/mdstatます。

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }

きちんとした!私はスタイルが好きです:) ..これはまさに私がMOTDに入れるために探していたものです:)ありがとう!
ジリスラフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.