아래 설명과 같이 바인드 마운트 또는 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 공유가 마운트되지 않도록 하는 방법이 필요합니다.