在Linux中有条件`mount':dev或nfs

我有一个挂载点 – 让它成为/media/question – 以及两个可能的设备:一个物理硬盘和一个远程NFS文件夹。 有时候我把设备插在物理上,在其他情况下,我通过NFS挂载。

有没有办法在fstab指定它们,以便执行mount /media/question最好select物理卷,当它不可用时 – NFS?

您需要创build一个Bash脚本来检查物理设备是否存在,如果存在挂载设备,则挂载NFS共享。

像这样的东西:

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

你可以把这个脚本放在/etc/init.d中以便在启动时运行,或者你可以每隔5分钟或者其他时间添加一个cron来检查…

如果安装了,你也可以看看udev。 这允许在添加或移除设备时进行操作; 例如networking接口出现时。 要看到这个动作,请查看/etc/udev/rules.d/(我的SuSE框中称为77-network.rules)的networking访问文件。 您可以定义接口上/下时的动作:

/etc/udev/rules.d/77-network.rules

#SUBSYSTEM ==“net”,

ENV {}接口==“PPP * | IPPP * | ISDN * | PLIP * | LO * |红外线* |假* |安全* | TUN * |水龙头* |债券* | BR * | * VLAN |调制解调器* | 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”

LABEL = “skip_ifup”

(“ENV(INTERF ….)”行用于忽略非标准的networking接口,如果匹配,则跳转到相应的LABEL语句。当ACTION语句匹配时触发SUBSYTEM行 – 即接口是ADDed或REMOVed “)

所以,如果你改变“添加/删除”行动来调用你的脚本,这将调用ifup / ifdown,然后运行任何你想要的。 .eg调用“ifup $ @”,然后检查接口IP并挂载相应的条目。 如果挂载在fstab中用“noauto”选项列出,那么只需要一个简单的命名约定来定位条目并发出挂载。

以类似的方式,脚本/etc/udev/rules.d/56-idedma.rules覆盖IDE(或SATA驱动器),并在检测到驱动器时​​运行。 该脚本将允许使用备用RUN脚本根据在场启动本地挂载。

规则的命名和sorting与init系统中使用的相似。 查看更多示例和选项的帮助和规则文件。