解決策 1:
ZFS の場合 Linux の場合、バージョン 0.6.3 以降 これは、ZFS イベント デーモン (zed) を使用することで非常にエレガントに処理できます。 イベント デーモンは、カーネル イベントを直接監視することにより、発生するすべてのイベントにほぼ即座に反応でき、他のコマンドの出力の継続的なポーリングと解析に依存しません。
03
で始まる任意のファイル名でシェル スクリプトを作成します。 (例:11
)。このスクリプトは、電子メールを送信したり、どこかにログ エントリを書き込んだり、システムを歌ったり踊らせたりするなど、適切なアクションを実行できます (そうではないかもしれません)。出発点を提供できる例が提供されています。
スクラブが完了したときに電子メールを受信することだけが必要な場合は、提供されている 29
スクリプトはそれをうまく行います。 /etc/zfs/zed.d/zed.rc を編集して、電子メールの送信先と、プールで問題が発生していない場合に電子メールを送信するかどうかを指定するだけです。コード> その後に /etc/zfs/zed.d 内の何かが続くとそれにつながり、起動時に zed が開始されていることを確認してください。
解決策 2:
この簡単なスクリプトを使用して、電子メールでステータス レポートをスクラブします。
- zpadmin
44
からの遷移を検出する必要がある場合 51
まで 61
をチェックします 78
のフィールド 出力。このようなもの:
# start scrubbing
zpool scrub ZPOOL
# wait till scrub is finished
while zpool status ZPOOL | grep 'scan: *scrub in progress' > /dev/null; do
echo -n '.'
sleep 10
done
# send a report
zpool status | mail -s "zpool status: ZPOOL" RECIPIENT
解決策 3:
この質問は Linux に固有のものですが、「スクラブが終了するまで待つ」 を検索したときの最初の Google の結果です。 、したがって、Linux (通常の Solaris も動作するはずですが、そこではテストしていません) の代わりに、OpenSolaris を実行している人々 (OmniOS でテストしましたが、SmartOS、illumos なども同様であるはずです) に役立つ情報を追加したいと思います。
86
を使用できます カーネルイベントを登録します。完全なリストは 91
にあります (このファイルで「ZFS」を検索するだけです)。イベントを追加した後、サービスを再起動する必要があります。例:
syseventadm add -c EC_zfs -s ESC_ZFS_scrub_finish /path/to/script.sh \$pool_name
syseventadm restart
このようにして、プールのスクラブが終了するとスクリプトが開始されます - 105
の場合はスクリプト内をチェックする必要があります 目的のプール名と同じです。それでも、ポーリングよりもはるかにオーバーヘッドが少なくなります。
解決策 4:
zfswatcher で多くの成功を収めました