デバイスは読み取り専用としてマウントされていますが、書き込みは可能です (CentOS 6.8)

デバイスは読み取り専用としてマウントされていますが、書き込みは可能です (CentOS 6.8)

フラッシュ ドライブに CentOS 6.8 がインストールされていますが、そのライフ サイクルが限られているため (100,000 回の書き込み (各セクターの平均障害時間))、読み取り専用としてマウントしたいと考えています。

カーネルは ro として起動していると思われます。少なくとも、結果はcat /proc/cmdline「ro ...」で始まります。

/etc/fstab読み取り専用でマウントするように設定しました:

UUID=4addd4a7-97f6-4399-89e4-6d3728bd2979 /     ext4    defaults,noatime,ro        1 1
UUID=21a81149-6534-4313-8696-e203896d5881 /boot ext4    defaults,noatime,ro        1 2
UUID=D64B-DD9C          /boot/efi               vfat    noatime,ro,umask=0077,shortname=winnt 0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
tmpfs                   /var/log                tmpfs   defaults        0 0

を実行するとmount、の仕様が守られていることがわかります/etc/fstab。それにもかかわらず、ファイルを変更したり、新しいファイルを書き込んだりすることはできます。マウントが書き込み可能であることを示すさらなる証拠は、lsof(によると)実行中です。この郵便受け)。結果には、書き込み用に開かれているファイルがいくつか表示され、そのほとんどは /home 上にあります。(これに到達するには、/var/logとしてマウントする必要がありましたtmpfs。)

これは CentOS 6.8 のバグでしょうか? 回避策はありますか?

答え1

どこかで、おそらくマニュアル ページで、デバイスを読み取り専用にするにはデバイスを再マウントする必要があるという一種のバグがあると読んだのを覚えています。

mount -o remount,ro ...

fstab 内の他のエントリの後に再マウントを追加してみてください。ps マウントでは、fstab 内のファイルシステム「none」を提供できます。

アップデート:

関連する男性のエントリを見つけました。

   mount(8) since v2.27 allows to change the mount options by passing the relevant options along with --bind.  For example:

          mount --bind,ro foo foo

   This feature is not supported by the Linux kernel; it is implemented in userspace by an additional mount(2) remounting syscall.  This solution is not atomic.

   The alternative (classic) way to create a read-only bind mount is to use the remount operation, for example:

          mount --bind olddir newdir
          mount -o remount,ro,bind olddir newdir

   Note that a read-only bind will create a read-only mountpoint (VFS entry), but the original filesystem superblock will  still  be  writable,  meaning  that  the  olddir  will  be
   writable, but the newdir will be read-only.

   It's impossible to change mount options recursively (for example with -o rbind,ro).

これに基づいて、fstab オプションを使用してみてください。

default,rbind,ro

それができない場合は、再マウントするためのエントリを追加します。

更新 2 (man 8 mount / man 8 mount blockdev);

   -r, --read-only
          Mount the filesystem read-only.  A synonym is -o ro.

          Note  that,  depending  on the filesystem type, state and kernel behavior, the system may still write to the device.  For example, ext3 and ext4 will replay the journal if
          the filesystem is dirty.  To prevent this kind of write access, you may want to mount an ext3 or ext4 filesystem with the ro,noload mount options or set the  block  device
          itself to read-only mode, see the blockdev(8) command.

つまり、次のオプションがあります。

ro,noload

または使用すること。

blockdev --setro /dev/...

関連情報