Linux 中的条件 `mount`:dev 或 nfs

Linux 中的条件 `mount`:dev 或 nfs

我有一个挂载点(就让它这样吧/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 系统中的类似。请参阅帮助和规则文件以获取更多示例和选项。

相关内容