私の目標は、SATAディスクと組み合わせて小さなOpenSolaris NAS(OmniOS + napp-itをHPMicroserver N54Lで実行)でバックアップルーチンを自動化することです。
1つのポート、電源ボタン、およびいくつかのLED(電源およびHDDアクティビティ)を備えた単純なSATAまたはSAS/SATAバックプレーンを含む5.25 "-> 3.5"キャリアレスHDDトレイの1つを取り付けました。複数のHDDをバックアップするために(ローテーションで毎週1つ、オフサイトに保存)、zfs send/recv
を使用してすべてのスナップショットを含む完全なメインプールをダンプするスクリプトを作成しました(新しいブロックのみを更新します)。このスクリプトは、手動で起動すると正常に機能します。
NASには直接VGAまたはシリアルコンソールが接続されておらず、ディスクを挿入してデスクトップシステムに戻り、ログオンするのが面倒なので、このプロセスをさらに自動化したいと思います。 WebインターフェイスまたはSSHを使用して、スクリプトを手動で開始します。バックアップの日数が若干異なる場合があるため(ディスクを忘れた、休日など)、cronジョブによる時間指定の開始はオプションではありません。したがって、バックアップはディスクの挿入直後に開始する必要があります。 。
スクリプトでは、cfgadm
を使用して、ディスクを接続+構成し、後で構成解除+切断します。ディスクを挿入するだけで回転する場合、ディスクがそこにあることを知る方法がありません。私がすでに検討した可能な解決策:
cfgadm -f -c connect
を使用して、x分ごとに新しいディスクとzpoolを継続的にプローブし、エラー結果を確認します。あまりエレガントではありません。/var/adm/messages
をチェックし、デバイスパスまたはAHCIをgrepします。デバイスが手動で接続されている場合にのみメッセージが書き込まれるため、不可能です。iostat -En
を使用します。ディスクを表示しますが、ポート情報がリストされていないため、正確なシリアル番号をgrepする必要があります。また、x分ごとに実行する必要があります。cfgadm
を使用して、レセプタクルのステータスをフィルタリングします。挿入によって何もトリガーされないため、機能しません(バックプレーンが安すぎる可能性があります)。私は2つのことが必要だと思います:
これは可能ですか?そうでない場合、代替案として何を提案しますか?
将来同様の問題を抱えている人のために:
syseventadm
を使用して、ディスクがオンラインになったときにバックアップスクリプトをトリガーします。WARNING: ahci0: ahci_port_reset port 5 the device hardware has been initialized and the power-up diagnostics failed
メッセージが表示されました)。オンボードSata/AHCIはホットプラグ対応ですが、OmniOSではデフォルトで無効になっています。有効にするには、次の行を/ etc/systemに追加します。
set sata:sata_auto_online = 1
興味深い質問...ちょっとした科学実験です。おそらくUSBを使用するか、リモートで送信するか、スケジュールどおりに送信するでしょう...
しかし、あなたの場合、私はcfgadm
またはログ解析の方法からディスクを「探す」ことはまったくしません。それはスケーラブルではありません。
定期的なzpool import
の周りに、一意のZFSプール名とスクリプトロジックを使用して、リムーバブルディスクに名前を付けるだけです。 LinuxでのZFSでは、プールのインポートプロセスはシステムサービス/デーモンです。ただし、定期的に実行するのに費用はかかりません。ドライブと関連するプールを検出します。
バックアップが完了したら、プールがエクスポートプールになっていることを願っています。これは、ドライブが複数のバックアップサイクルの間サーバーに残っている状況をカバーします。ドライブにバックアップテープを残すようなものです。
この回答を追加して、イベントの監視について私が見つけたものを文書化します(他の場合にも役立つ可能性があります)。
Unix/linux.SEで質問しようとしたときに、Linuxでudev
を使用してカーネルイベントを監視することについて 便利なスレッド に気づきました。 Solarisの同等のツールとして、私は つまずいた 使用する提案 syseventadm
これは、syseventを監視し、定義されたアクション/スクリプトをトリガーします。
最初は、manページのコピーとXen Hypervisorの問題に関するいくつかの議論以外はあまり見つかりませんでしたが、サポートされているイベントは/usr/include/sys/sysevent/eventdefs.h
(またはさまざまなリポジトリの/usr/src/uts/common/sys/sysevent/eventdefs.h
でオンライン)にリストされています。そのディレクトリ内のファイル。
マンページの最初の例とsyseventadm add -c EC_zfs -s ESC_ZFS_scrub_start /path/to/script.sh \$pool_name
を使用して、スクラブが開始されるたびに発生し、最初の引数としてプール名を返すサンプルイベントのテストに成功しました。
試行錯誤の末、新しく追加されたディスクを監視する正しい方法を見つけました。
syseventadm add -c EC_dev_add -s disk /path/to/script.sh \$version \$dev_name \$phys_path \$driver_name \$instance
syseventadm restart
disk
の後のすべてはオプションであり、引数$1
から$5
としてスクリプトに直接渡されます。
これで、新しく追加されたディスクがオンラインになるとすぐに、スクリプトがトリガーされ、スクリプトはデバイスIDが正しいかどうかを確認し(オプション)、名前でプールをインポートできます。