如何通过直接询问文件系统来查看 (ext3) 文件系统是否已挂载(即,与系统启动时查看是否未完全卸载的方式相同)?检查输出mount
是没有用的,因为文件系统可能是由虚拟机挂载的。
我知道我可以运行fsck
,并且如果文件系统被挂载它将中止,但我不需要实际检查文件系统。
答案1
文件系统不知道它是否已挂载,只知道它是脏的还是干净的。我不确定虚拟机运行的是什么操作系统,但有些操作系统可以以只读方式挂载它,它会保持干净。也可能它被错误地卸载了,因此很脏,但实际上并没有使用。
答案2
大多数发行版启动时使用的文件系统都是mount -a
。它会使用 fstab 中auto
指定的文件挂载所有文件系统,这是规范的一部分default
。
对于 ext2/ext3,tune2fs
可以修改和显示导致文件系统被 fscked 的设置。例如,-c
允许您指定文件系统被 fscked 之前需要挂载多少次。最终,您对启动过程的假设是不准确的。
mount
是查看它是否已安装的解决方案。对于 ext3,我不认为“安装状态”与分区一起存储。如果您描述您不确定是共享存储还是 NFS 的原因,我们可能会提供适用于您特定情况的建议。
答案3
重新考虑您的架构。如果您需要从多个节点访问文件系统,请将其包装在 LVM 中。然后您有几个选择。
- 您可以在需要时导入卷,并在完成后将其导出。
- 或者,如果您更严格一些,您可以设置所有权标签来限制其激活位置。
那么 ext3 提供什么就不重要了;您可以限制对较低层的访问。
答案4
为什么不用以下脚本来编写FSSTAT=df | grep <filesystem mount point>
然后使用 if [ ! -n "$FSSTAT" ]
根据结果做出决定的位置进行测试
您可以通过在脚本中明确提及它们或通过从mount
命令输出中 grepping 值来循环测试您想要测试的文件系统,如下所示:
for FS in <replace with back quote> mount | grep ext3 | cut -c 26-43 <replace with backquote> ;do; FSSTAT=df | grep $FS; if [ ! -n "$FSSTAT" ]; ... do somehting; else; ... do something else; fi; done
很抱歉,处理格式时代码看起来很糟糕