Definir um ponto de montagem como imutável com ansible faz com que o volume montado não seja gravado, enquanto funciona manualmente

1

Como uma força de hábito, depois de perder várias centenas de TB de dados no passado durante uma paralisação da NAS, eu sempre defini pontos de montagem em servidores como imutáveis. Isso evita qualquer alteração na estrutura do disco sob o ponto de montagem. Isso evita um cenário em que um disco montado nesse ponto de montagem se desconecta e o kernel começa a gravar esses arquivos no ponto de montagem. Torná-lo imutável impede que o volume da raiz seja preenchido e faz com que os sinos de segurança comecem a gritar, o que nos ajuda a perceber o problema mais rapidamente.

Isso funciona bem normalmente. Se eu criar / mnt / mountpoint e torná-lo imutável, não posso criar arquivos lá como root. Se eu montar um volume em / mnt / mountpoint, posso criar arquivos de teste sem problemas.

[root@test-vm-1 ~]# mkdir /mnt/test
[root@test-vm-1 ~]# touch /mnt/test/testfile
[root@test-vm-1 ~]# ls /mnt/test/testfile
/mnt/test/testfile
[root@test-vm-1 ~]# rm -f /mnt/test/testfile
[root@test-vm-1 ~]# chattr +i /mnt/test/
[root@test-vm-1 ~]# touch /mnt/test/testfile
touch: cannot touch '/mnt/test/testfile': Permission denied
[root@bcv-ub-test-vm-1 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
TEXT OMMITTED
[root@test-vm-1 ~]# mount /dev/sdb1 /mnt/test/
[root@test-vm-1 ~]# touch /mnt/test/testfile
[root@test-vm-1 ~]# umount /mnt/test
[root@test-vm-1 ~]# umount /mnt/test/testfile
umount: /mnt/test/testfile: not found
[root@test-vm-1 ~]# touch /mnt/test/testfile
touch: cannot touch '/mnt/test/testfile': Permission denied

Portanto, o comportamento é que você não pode gravar no ponto de montagem a menos que um volume seja montado lá.

No entanto, eu uso um playbook para executar o seguinte em ansible:

- name: Validate that VIVALogger volume group is created and added
  stat:
    path: /dev/sdb1
  register: stat_result

- name: Configure export volume - add mountpoint
  file:
    path: /mnt/test
    state: directory

- name: Make test mountpoint immutable
  command: "chattr +i /mnt/test"

- name: Configure export volume - mount export volume
  mount:
    path: /mnt/test
    src: /dev/sdb1
    fstype: xfs
    state: mounted
    opts: inode64,nobarrier
    dump: 0
    passno: 2
  when: stat_result.stat.exists

- name: Pause for 30 seconds for volume to mount properly
  pause:
    seconds: 30

- name: Create testfile
  command: "touch /mnt/test/testfile"

Nenhum arquivo pode ser gravado no volume montado. Parece que a imutabilidade está sendo aplicada recursivamente a todos os subdiretórios do volume.

Eu também tentei configurar a imutabilidade usando o módulo de arquivo, e o comportamento é o mesmo.

Alguém já viu esse comportamento antes? Estou usando o ansible 2.6.3 contra o RHEL 5, 6 e 7.

    
por Matthew 26.09.2018 / 15:50

0 respostas

Tags