Устройство смонтировано только для чтения, но я все равно могу записывать на него данные (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 mount можно указать файловую систему "none" в fstab.

ОБНОВЛЯТЬ:

Я нашел соответствующую запись о человеке;

   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/...

Связанный контент