如何测试 /sys 或 /proc 中的块设备是否为只读?

如何测试 /sys 或 /proc 中的块设备是否为只读?

在 CentOS6 系统上,我有/dev/block/sr0(只读)和/dev/block/sda(读/写)。如何以编程方式找出哪些设备是只读的?那里有一个ro文件,但对于两个设备来说都是“0”。

我可以使用一些技巧(比较名称^sr与名称^sd,查找cdrom设备节点的所有权),但我希望有一个通用的解决方案。

答案1

如果/sys/block/xxx/ro是1,那么内核保证它是只读的

$ sudo losetup /dev/loop0 a
$ sudo losetup -r /dev/loop1 b
$ cat /sys/block/loop0/ro
0
$ cat /sys/block/loop1/ro
1

如果不是,那么内核可能会让你尝试在上面写入,但写入可能会在较低级别被阻止。

对于 CD/DVD,您可以找到介质类型(只读、可写、可重写、开放会话...)cdrdao disk-info

现在设备可能是可写的,但您可能没有设备文件的写权限,但这是另一个故事,可以轻松检查[ -w "$dev" ]

答案2

看看/proc/mounts(或输出命令)。

我的/dev/sr0条目说ro,....
我的/dev/sda1条目说rw,....

通常,您的根分区将使用 UUID 进行挂载,或者像我的情况一样,使用卷标进行挂载。必须对那部分很聪明,但是 cdrom 和附加驱动器被列为/dev/...

需要记住,您正在寻找文件系统上的 RO/RW 状态,而不是设备上的状态。

相关内容