En un sistema CentOS6 tengo /dev/block/sr0
(solo lectura) y /dev/block/sda
(leer escribir). ¿Cómo puedo averiguar mediante programación qué dispositivos son de solo lectura? Hay un ro
archivo allí, pero es '0' para ambos dispositivos.
Hay algunos trucos que podría usar (compare los nombres ^sr
vs ^sd
, busca cdrom
propiedad del nodo del dispositivo), pero me gustaría tener una solución genérica.
Respuesta aceptada:
Si /sys/block/xxx/ro
es 1, entonces el kernel garantiza que es de solo lectura
$ sudo losetup /dev/loop0 a
$ sudo losetup -r /dev/loop1 b
$ cat /sys/block/loop0/ro
0
$ cat /sys/block/loop1/ro
1
Si no es así, es posible que el kernel le permita intentar escribir en él, pero la escritura puede estar bloqueada en un nivel inferior.
Para CD/DVD, puede averiguar el tipo de medio (solo lectura, grabable, regrabable, sesión abierta...), con cdrdao disk-info
.
Ahora se puede escribir en el dispositivo, pero es posible que no tenga permiso de escritura en el archivo del dispositivo, pero esa es otra historia y se puede verificar fácilmente con [ -w "$dev" ]