Como posso testar se um dispositivo de bloco é somente leitura de / sys ou / proc?

3

Em um sistema CentOS6 eu tenho /dev/block/sr0 (somente leitura) e /dev/block/sda (leitura / gravação). Como posso saber programaticamente quais dispositivos são somente leitura? Há um arquivo ro lá, mas é '0' para os dois dispositivos.

Existem alguns hacks que eu poderia usar (compare nomes ^sr vs ^sd , procure cdrom propriedade do nó do dispositivo), mas gostaria de ter uma solução genérica.

    
por kdt 04.10.2011 / 16:12

2 respostas

1

Se /sys/block/xxx/ro for 1, então o kernel garante que seja somente leitura

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

Se não estiver, o kernel pode tentar escrever, mas a escrita pode estar bloqueada em um nível inferior.

Para CDs / DVDs, você pode descobrir o tipo de mídia (somente leitura, gravável, regravável, sessão aberta ...), com cdrdao disk-info .

Agora, o dispositivo pode ser gravável, mas você pode não ter permissão de gravação no arquivo do dispositivo, mas isso é outra história e pode ser facilmente verificado com [ -w "$dev" ]

    
por 04.10.2012 / 12:38
0

Que tal procurar em /proc/mounts (ou saída do comando mount ).

minha entrada /dev/sr0 diz ro,....
minha entrada /dev/sda1 diz rw,....

Muitas vezes, sua partição raiz será montada usando o UUID ou, como no meu caso, o rótulo do volume. Tem que ser inteligente sobre essa parte, mas o cdrom e as unidades adicionais estão listados como /dev/...

Lembre-se de que você está procurando o status de RO / RW no FILESYSTEM, não no DEVICE.

    
por 06.07.2012 / 00:41