![Linux 中的条件 `mount`:dev 或 nfs](https://linux22.com/image/515480/Linux%20%E4%B8%AD%E7%9A%84%E6%9D%A1%E4%BB%B6%20%60mount%60%EF%BC%9Adev%20%E6%88%96%20nfs.png)
我有一个挂载点(就让它这样吧/media/question
)和两个可能的设备:一个物理硬盘和一个远程 NFS 文件夹。有时我会以物理方式插入设备,有时我会通过 NFS 挂载它。
有没有办法同时指定它们,fstab
以便执行时mount /media/question
优先选择物理卷,当物理卷不可用时,选择 NFS?
答案1
您需要编写一个 Bash 脚本来检查物理设备是否存在,如果存在则安装该设备,否则安装 NFS 共享。
像这样:
if [ -d /media/disk ] ; then {
mount /media/disk ...
}
else{ ...
您可以将此脚本放在 /etc/init.d 中以便在启动时运行,或者您可以将其添加到 cron 中以便每 5 分钟或其他时间范围检查一次...
答案2
如果安装了 udev,您还可以查看它。这允许在添加或删除设备时执行操作;例如当网络接口启动时。要查看此操作,请查看 /etc/udev/rules.d/ 中涵盖网络访问的文件(在我的 SuSE 机器上称为 77-network.rules)。您可以定义接口启动/关闭时的操作:
/etc/udev/rules.d/77-network.rules
# 子系统==“网络”,
ENV {接口} ==“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"
子系统=="net", 动作=="删除", RUN+="/sbin/ifdown %k -o hotplug"
标签="skip_ifup"
(“ENV(INTERF....” 行用于忽略非标准网络接口,如果匹配则跳转到相应的 LABEL 语句。当 ACTION 语句匹配时触发 SUBSYTEM 行 - 即添加或删除接口”)。
因此,如果您将“添加/删除”操作更改为调用您的脚本,该脚本将调用 ifup/ifdown,然后运行您想要执行的其他任何操作。例如,调用“ifup $@”,然后检查接口 IP 并挂载相应的条目。如果挂载在 fstab 中使用“noauto”选项列出,那么您只需要一个简单的命名约定来找到条目并发出挂载。
类似地,脚本 /etc/udev/rules.d/56-idedma.rules 涵盖 IDE(或 SATA 驱动器),并在检测到驱动器时运行。此脚本将允许使用备用 RUN 脚本根据存在情况启动本地挂载。
规则的命名和排序与 init 系统中的类似。请参阅帮助和规则文件以获取更多示例和选项。