Linux의 조건부 `mount`: dev 또는 nfs

Linux의 조건부 `mount`: dev 또는 nfs

마운트 지점이 있고 /media/question두 개의 가능한 장치(물리적 HDD와 원격 NFS 폴더)가 있습니다. 때로는 장치를 물리적으로 연결하기도 하고, 다른 경우에는 NFS를 통해 마운트하기도 합니다.

fstab실행할 때 mount /media/question물리적 볼륨을 선택하고, 사용할 수 없는 경우 NFS를 선택 하도록 두 가지를 모두 지정하는 방법이 있습니까 ?

답변1

물리적 장치가 존재하는지 확인하는 Bash 스크립트를 만들어야 하며, 존재하는 경우 장치를 마운트하고 그렇지 않으면 NFS 공유를 마운트해야 합니다.

이 같은 :

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-network.rules

# SUBSYSTEM=="넷",

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

SUBSYSTEM=="net", ACTION=="추가", RUN+="/sbin/ifup $env{INTERFACE} -o 핫플러그"

SUBSYSTEM=="net", ACTION=="제거", RUN+="/sbin/ifdown %k -o 핫플러그"

LABEL="skip_ifup"

("ENV(INTERF...." 라인은 비표준 네트워크 인터페이스를 무시하는 데 사용됩니다. 일치하는 경우 해당 LABEL 문으로 점프합니다. SUBSYTEM 라인은 ACTION 문이 일치할 때 트리거됩니다. 즉, 인터페이스가 ADDed 또는 REMOVed입니다. ")

따라서 "추가/제거" ACTION을 변경하여 스크립트를 호출하면 ifup/ifdown을 호출한 다음 그 이후에 원하는 다른 것을 실행하게 됩니다. .예: "ifup $@"을 호출한 다음 인터페이스 IP를 확인하고 해당 항목을 마운트합니다. 마운트가 "noauto" 옵션을 사용하여 fstab에 나열된 경우 항목을 찾고 마운트를 실행하려면 간단한 명명 규칙만 필요합니다.

비슷한 방식으로 /etc/udev/rules.d/56-idedma.rules 스크립트는 IDE(또는 SATA 드라이브)를 다루며 드라이브가 감지되면 실행됩니다. 이 스크립트를 사용하면 대체 RUN 스크립트를 사용하여 존재 여부에 따라 로컬 마운트를 시작할 수 있습니다.

규칙의 이름 지정 및 순서는 init 시스템에서 사용되는 것과 유사합니다. 더 많은 예제와 옵션을 보려면 도움말과 규칙 파일을 살펴보세요.

관련 정보