/sysまたは/procのブロックデバイスが読み取り専用であるかどうかをテストするにはどうすればよいですか?

/sysまたは/procのブロックデバイスが読み取り専用であるかどうかをテストするにはどうすればよいですか?

/dev/block/sr0CentOS6システムには(読み取り専用)と/dev/block/sda(読み取り/書き込み)があります。どのデバイスが読み取り専用であるかをプログラムで確認する方法は?そこにファイルがありますが、ro両方のデバイスは「0」です。

利用可能ないくつかのトリック(nameを^srnameと比較^sd、デバイスノードの所有権を見つけるcdrom)がありますが、一般的な解決策を期待しています。

答え1

1の場合、/sys/block/xxx/roカーネルは読み取り専用であることを保証します。

$ 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状態を探していることに注意してください。

関連情報