VMware ESXi 6インフラストラクチャで実行されているRedHat 7仮想マシンがあります。フロッピーディスク挿入イベントを検出し、その挿入イベントに基づいてスクリプトを開始する必要があります。
私の最初のアプローチは、フロッピー挿入時にスクリプトの実行をトリガーするためにUdevルールを使用することでしたが、イベントは実行されないようです。
/etc/udev/rules.d/99-my.rules
SUBSYSTEM=="block", KERNEL=="fd0", ACTION=="change", RUN+="sh -c /my-custom-script"
それがうまくいかなかったとき、私は問題を解決しようとしましたが、プラグインで実行するのではなく、数分ごとにフロッピーをマウントし、特定のファイルがマウントポイントにあるかどうかをテストするクローンタスクを作成しました.ただし、フロッピーを挿入しないと、次のような不快な出力が発生します。
end_request: I/O error, dev fd0, sector0
だから私はUdevルールがうまくいかない理由を見つけようとしました。私はUdevルールを間違った方法で使用しているのでしょうか、それともこれを達成するための別の方法がありますか?
答え1
私が知る限り、udevはフロッピードライブを監視する方法を提供しません。フロッピードライブは挿入を検出する手段を提供しません。ディスクの挿入を検出するには、ドライブを継続的にポーリングする必要があります。
このdiskd
ユーティリティはあなたのニーズを満たすことができます。継続的にドライブをポーリングして接続すると、コマンドを終了または実行します。それは一部ですfdutils、Debianの下のリポジトリからインストールできます。 RHEL / Fedoraではソースコードをコンパイルする必要があります。
使用法:
diskd [-d drive] [-i interval] [-e command]
以下はディスクドライブを監視し、接続時にマウントしてからシャットダウンする必要があります。私はIDEフロッピードライブ(LS-120 SuperDisk)しか持っていないので、これを試みませんでした。
diskd -d /dev/fd0 -e "udisks --mount /dev/fd0 --mount-fstype=vfat"
floppy
フロッピーデバイス(たとえば)に直接アクセスする必要があるため、root以外のユーザーとしてこのグループを実行するには、このグループのメンバーである必要があります/dev/fd0
。FDPOLLDRVSTAT
ioctl(参考資料を参照)を使用してman 4 fd
デバイスをポーリングします。
しかもマニュアルページ/文書次の警告があります。
プログラムは短時間モーターをオンにし、トラック1を見つけるように動作します。長期的にハードウェアが損傷する可能性があります。 Amigasもこれらの技術を使用していましたが、ディスクドライブは数ヶ月使用後に正しく回転しないことが知られています。
これが本当に深刻な問題であるかどうかはわかりませんが、本番環境で使用したい場合は、スペアドライブを準備すると便利です。もうそんなに高価ではありませんか?
(このfdmountd
ユーティリティはかなり古いように聞こえ、「最新」カーネルの通常のFAT12フォーマットディスクで動作するかどうか疑われます。)