web-dev-qa-db-ja.com

blockdev --setroは機能しません(少なくとも私にとっては)

Blockdevがどのように機能するのか理解していないと確信しています。

フラッシュドライブをマウントしましたが、/dev/sdb1にマップされました。次に、ターミナルを(rootとして)入力します。

root# blockdev --setro /dev/sdb1
root# blockdev --report

レポートは次のとおりです。

enter image description here

ご覧のとおり、レポートには、/dev/sdb1が読み取り専用(ro)に設定されていると記載されています。それでも、フラッシュドライブにファイルやフォルダを作成することはできます。

私が欠けているものは何ですか?

3
Raydel Miranda

これは、blockdevおよびHDDとの対話に使用されるドライバーの問題のようです。

抜粋 RE:物理ディスクへの読み取り専用ループバック

> Another option that I recently found was the 'blockdev' command. You can 
> specify that the blockdev is ro even before mounting.
>
> $ blockdev --report
> $ blockdev --setro /dev/device
>
> But my professor brought up the point - these probably depend on the 
> driver used. Maybe a driver for ntfs totally ignores the ro switch? I 
> don't totally agree that blockdev would be based on the driver, but how do
> you test whether the drive actually is in ro without writing? What if
> it fails?

また、このセクションは関連しています:

そうですね、ファイルシステムコードはブロックレイヤーを通過する(またはshould)ので、blockdev --setroを使用すると効果的です。ただし、パーティションは読み取り専用フラグを継承していないようです。つまり、単一のパーティション/dev/sdaを持つハードディスク/dev/sda1がある場合は、blockdev --setro /dev/sdaを実行できますが、blockdev --getro /dev/sda1を実行すると、sda1が読み取られることに気付くでしょう。 -フラグのみが設定されていません!そのような状況でsda1に書き込むことができるかどうかはまだ確認していません。

したがって、特定のパーティションが読み取り/書き込み権限を継承していないように見える場合は、代わりにmountを使用する必要があります。

別の抜粋

> Then the saving grace - loopback devices. Mount the partition as a file. 
> You don't need to worry about drivers, support, etc.
> To do this use losetup to create a loopback device:
>
> $ losetup -r /dev/loop1 /dev/hda1
>
> This creates a read-only loopback device  pointing to `/dev/hda1`
> Then you can mount the loopback device (read-only if you are paranoid)
>
> $ mount -o ro /dev/loop1 /media/test

> This mounts the loopback device loop1 at `/media/test`. You can then 
> traverse the directory of `/dev/hda1` just like it was mounted.

> According to the PDF document I mentioned above, doing this:
>
> $ mount -o ro,loop /dev/hda1 /media/test
2
slm