在 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 状态,而不是设备上的状态。