以下の説明のように、バインドマウントまたはNFSマウントを実行するために利用したいいくつかの条件があります。簡単な条件付きインストールの(限定的な)議論を見たことがありますが、次のような条件を使用する例は見たことがありません。(バインド) Yの場合はXをマウントし、そうでない場合はZをマウントします.」。
詳細:オプションでラップトップに接続できるUSBハードドライブがあり、起動時に次のように/ etc / fstabエントリを使用して自動的にマウントされます。
/dev/mapper/xusbhdd /path/to/usb/mount btrfs nofail,x-systemd.device-timeout=10,noatime,nodiratime,space_cache,compress=lzo,defaults,subvol=/@mysubvol/ 0 0
このマウントポイント内にフォルダがあります。/path/to/usb/mount/my_special_folder
デバイスがインストールされたら、次のようなバインドマウントを作成したいと思います。
mount --bind /path/to/usb/mount/my_special_folder /path2/my_special_folder
しかし、USBデバイスいいえ接続していますが、会社のLANに接続していて、次のように/etc/fstabエントリを使用してNFS共有をマウントしようとしています。
fileserver:/my_special_folder/ /path2/my_special_folder/ nfs _netdev,defaults,noatime,nodiratime,soft,retrans=6,timeo=20,retry=0,rsize=32768,wsize=32768,proto=tcp 0 0
明らかに、これらすべてを手動で実行できます。私の質問はそれを行う方法です自動。私のラップトップにUSB HDDが接続されているとマークされている場合は、必要なマウントとバンドルマウントが設定されています。逆に、会社のファイルサーバーにアクセスできる場合は、NFSマウントが設定されます。
この答えでいくつかの手がかりを見つけました。https://unix.stackexchange.com/a/568351/15010
私はまた、私がしたいアプローチではなく、bashスクリプトを使用する非常に古い答え(2010)を見つけました。Linuxの条件mount
:devまたはnfs
ここでも関連回答を見つけました。システム化された条件付きマウント。しかし、私の要件はより複雑です。そのリンクから次のようなユニットファイルを利用できると思います。
[Unit]
Description=Mount my_special_folder from USB HDD
ConditionPathExists=/path2/my_special_folder/NOT_MOUNTED
[Mount]
What=/dev/mapper/xusbhdd
Where=/path/to/usb/mount
Type=auto
Options=nofail,x-systemd.device-timeout=10,noatime,nodiratime,space_cache,compress=lzo,defaults,subvol=/@mysubvol/
[Install]
WantedBy=local-fs.target
fstab
ただし、オプションはUSBデバイスがある場合はすでにマウントまたは失敗せずにスキップされるため、実際には何もしません。
したがって、条件付きバインドマウント用のユニットファイルと条件付きNFSマウント用のユニットファイルが必要です。また、USBデバイスがすでにマウントされている場合は、NFS共有がマウントされないようにする方法も必要です。