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

1

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 de cat /proc/cmdline começa com "ro ...".

Eu configurei /etc/fstab para 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 em /etc/fstab foram seguidas. Apesar disso, ainda posso modificar arquivos e gravar novos arquivos. Outra evidência de que a montagem sendo gravável está sendo executada em lsof (de acordo com postar ). Os resultados mostram alguns arquivos abertos para gravação, principalmente em / home. (Para chegar a isso, eu tive que montar /var/log como tmpfs .)

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

    
por MrMas 28.10.2016 / 21:14

1 resposta

0

Lembro-me de ler em algum lugar, provavelmente nas páginas man, que existe um tipo de bug que significa fazer com que um dispositivo seja lido e que você também tenha que remontar o dispositivo.

mount -o remount,ro ...

tente adicionar uma remontagem após as outras entradas no fstab, a montagem ps pode ser fornecida no sistema de arquivos "nenhum" na fstab.

ATUALIZAÇÃO:

Eu encontrei a entrada do homem 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 fstab;

default,rbind,ro

se falhar, adicione uma entrada para montar novamente.

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/...
    
por 28.10.2016 / 22:13