Dispositivo montado como somente leitura, mas ainda posso gravar nele (CentOS 6.8)

Dispositivo montado como somente leitura, mas ainda posso gravar nele (CentOS 6.8)

Tenho o CentOS 6.8 instalado em uma unidade flash e devido ao seu ciclo de vida limitado (100.000 gravações (tempo médio antes da falha para cada setor)), quero montá-lo como somente leitura.

O kernel está supostamente sendo lançado como ro. Pelo menos, o resultado cat /proc/cmdlinecomeça com "ro ...".

Eu configurei /etc/fstabpara montar somente leitura:

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

Quando executo mount, vejo que as especificações /etc/fstabforam seguidas. Apesar disso, ainda posso modificar arquivos e gravar novos arquivos. Mais evidências de que a montagem pode ser escrita está em execução lsof(de acordo comesta postagem). Os resultados mostram alguns arquivos abertos para gravação, principalmente em/home. (Para chegar a isso, tive que montar /var/logcomo tmpfs.)

Isso é um bug no CentOS 6.8? Existe uma solução alternativa?

Responder1

Lembro-me de ter lido em algum lugar, provavelmente nas páginas de manual, que existe um tipo de bug que significa que para fazer um dispositivo somente leitura você também precisa remontar o dispositivo.

mount -o remount,ro ...

tente adicionar uma remontagem após as outras entradas no fstab, ps mount pode receber o sistema de arquivos "none" no fstab.

ATUALIZAR:

Encontrei a entrada man 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).

com base nisso, você pode tentar usar as opções do fstab;

default,rbind,ro

caso contrário, adicione uma entrada para remontar.

ATUALIZAÇÃO 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.

Isso significa que você tem a opção de;

ro,noload

ou para usar;

blockdev --setro /dev/...

informação relacionada