Linux での条件付き `mount`: dev または nfs

Linux での条件付き `mount`: dev または nfs

マウント ポイント (そのままにしておきます/media/question) と、物理 HDD とリモート NFS フォルダーの 2 つのデバイスがあります。デバイスを物理的に接続する場合もあれば、NFS 経由でマウントする場合もあります。

fstab実行時にmount /media/question物理ボリュームが優先的に選択され、それが利用できない場合は NFS が選択されるように、両方を指定する方法はありますか?

答え1

物理デバイスが存在するかどうかを確認し、存在する場合はデバイスをマウントし、存在しない場合は NFS 共有をマウントする Bash スクリプトを作成する必要があります。

このようなもの :

if [ -d /media/disk ] ; then {
mount /media/disk ...
}
else{ ...

このスクリプトを /etc/init.d に置いて起動時に実行したり、5 分ごとまたは別の時間範囲ごとにチェックするように cron に追加したりすることもできます...

答え2

udev がインストールされている場合は、それを調べることもできます。これにより、デバイスが追加または削除されたとき、たとえばネットワーク インターフェイスが起動したときなどにアクションを実行できます。これが実際にどのように機能するかを確認するには、/etc/udev/rules.d/ (私の SuSE ボックスでは 77-network.rules と呼ばれています) のネットワーク アクセスを扱うファイルを調べてください。インターフェイスが起動/停止したときのアクションを定義できます。

/etc/udev/rules.d/77-ネットワーク.rules

# サブシステム=="net",

ENV{INTERFACE}=="ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*|bond*|br*|vlan*|modem*|dsl*",GOTO="skip_ifup"

SUBSYSTEM=="net", ACTION=="add", RUN+="/sbin/ifup $env{INTERFACE} -o hotplug"

SUBSYSTEM=="net", ACTION=="remove", RUN+="/sbin/ifdown %k -o hotplug"

ラベル="skip_ifup"

(「ENV(INTERF....」行は非標準ネットワークインターフェースを無視するために使用され、一致すると対応するLABELステートメントにジャンプします。SUBSYTEM行はACTIONステートメントが一致するとトリガーされます。つまり、インターフェースがADDまたはREMOVされたときです)

したがって、「追加/削除」アクションを変更してスクリプトを呼び出すと、ifup/ifdown が呼び出され、その後に他の必要な操作が実行されます。たとえば、「ifup $@」を呼び出し、インターフェイス IP をチェックして対応するエントリをマウントします。マウントが fstab に「noauto」オプションでリストされている場合は、エントリを見つけてマウントを発行するための単純な命名規則のみが必要です。

同様に、スクリプト /etc/udev/rules.d/56-idedma.rules は IDE (または SATA ドライブ) をカバーし、ドライブが検出されたときに実行されます。このスクリプトにより、代替の RUN スクリプトを使用して、存在に基づいてローカル マウントを開始できるようになります。

ルールの命名と順序は、init システムで使用されるものと似ています。その他の例とオプションについては、ヘルプとルール ファイルを参照してください。

関連情報