检查只读文件系统的脚本

检查只读文件系统的脚本

如何检查一堆系统以查找以只读方式安装的文件系统?可能通过脚本?

答案1

awk '$4~/(^|,)ro($|,)/' /proc/mounts

答案2

我过去使用过以下内容

grep ' ro ' /proc/mounts

在某些情况下,您可能希望跳过任何远程安装,这些远程安装可能是 RO 设计的

grep ' ro ' /proc/mounts | grep -v ':'

您可能还想跳过通过自动挂载安装的内容

grep ' ro ' /proc/mounts | egrep -v 'automount|autofs'

答案3

如果您的目的是查找有问题的文件系统(即,由于文件系统错误,安装状态已更改为只读),那么我会执行以下操作(假设 ext* 文件系统):

 tune2fs -e panic [raw-disk-partition-name]

前任:

 tune2fs -e panic /dev/sda1

这样做的作用是使系统恐慌,从而重新启动服务器,可能会在有问题的文件系统上调用 fsck 来修复它。因此,严重的文件系统问题是通过让系统自动修复它来处理的,而不是将其转储到只读模式,我发现这没有太大帮助。此外,我宁愿惊慌一个有问题的文件系统,修复它,而不是尝试在它损坏的情况下运行,随着时间的推移可能会造成更多损坏。

答案4

正如其他答案所建议的,您可以/proc/mounts使用grepor进行解析awk,例如您可以列出只读安装:

$ grep "\sro[\s,]" /proc/mounts

或者

$ awk '$4~/(^|,)ro($|,)/' /proc/mounts

您可以尝试解析内容的另一种方法/proc/mounts

$  grep '^ro$' /proc/fs/*/<device>/options

其中<device>是 下文件系统的设备节点名称/dev。例如

$ grep '^ro$' /proc/fs/*/sdc1/options

ro如果/dev/sdc1以只读方式安装,则会返回。

如果您想检查只读块设备(而不是已安装的文件系统),您可以使用

$ cat /sys/block/<device>/ro

1如果文件系统是只读的或0读写的,则返回。

注意,<device>上面指的是真实设备节点。如果您想检查符号链接设备(例如由设备映射器by-uuid引用)然后您可以使用basenamereadlink来获取设备节点名称。就像这些例子一样:

$ grep '^ro$' /proc/fs/*/$(basename $(readlink -f /dev/mapper/foo)/options
$ cat /sys/block/$(basename $(readlink -f /dev/mapper/foo)/ro

相关内容