如何检查一堆系统以查找以只读方式安装的文件系统?可能通过脚本?
答案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
使用grep
or进行解析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
引用)然后您可以使用basename
和readlink
来获取设备节点名称。就像这些例子一样:
$ grep '^ro$' /proc/fs/*/$(basename $(readlink -f /dev/mapper/foo)/options
$ cat /sys/block/$(basename $(readlink -f /dev/mapper/foo)/ro