Dispositivo montado como solo lectura pero aún puedo escribir en él (CentOS 6.8)

Dispositivo montado como solo lectura pero aún puedo escribir en él (CentOS 6.8)

Tengo CentOS 6.8 instalado en una unidad flash y debido a su ciclo de vida limitado (100.000 escrituras (tiempo medio antes de fallar para cada sector)), quiero montarlo como de solo lectura.

El kernel supuestamente se lanza como ro. Al menos, el resultado de cat /proc/cmdlinecomienza con "ro...".

He configurado /etc/fstabpara montar solo lectura:

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

Cuando ejecuto mount, veo que /etc/fstabse siguieron las especificaciones. A pesar de esto, todavía puedo modificar archivos y escribir archivos nuevos. Se están ejecutando más pruebas de que la montura se puede escribir lsof(segúnesta publicación). Los resultados muestran algunos archivos abiertos para escritura, principalmente en /home. (Para llegar a esto, tuve que montar /var/logcomo tmpfs).

¿Es esto un error en CentOS 6.8? ¿Existe alguna solución?

Respuesta1

Recuerdo haber leído en algún lugar, probablemente en las páginas de manual, que hay una especie de error que significa que para hacer que un dispositivo sea de solo lectura, también hay que volver a montarlo.

mount -o remount,ro ...

intente agregar un reinicio después de las otras entradas en fstab, a ps mount se le puede proporcionar el sistema de archivos "ninguno" en fstab.

ACTUALIZAR:

Encontré la entrada del hombre relevante;

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

En base a esto, puedes intentar usar las opciones de fstab;

default,rbind,ro

en su defecto, agregue una entrada para volver a montar.

ACTUALIZACIÓN 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.

Eso significa que tienes la opción de;

ro,noload

o para usar;

blockdev --setro /dev/...

información relacionada