Назад | Перейти на главную страницу

Установка неизменяемой точки монтирования с помощью ansible делает невозможным запись смонтированного тома, хотя он работает вручную

По привычке после потери нескольких сотен ТБ данных в прошлом во время простоя NAS я всегда устанавливаю неизменяемые точки монтирования на серверах. Это предотвращает любые изменения в структуре диска под точкой монтирования. Это предотвращает сценарий, когда диск, смонтированный в этой точке монтирования, отключается, и вместо этого ядро ​​начинает записывать эти файлы в точку монтирования. Его неизменность предотвращает заполнение корневого тома и заставляет колокольчики безопасности начать кричать, что помогает нам быстрее заметить проблему.

Это нормально работает. Если я создам / mnt / mountpoint и сделаю его неизменным, я не смогу создавать там какие-либо файлы с правами root. Если я смонтирую том в / mnt / mountpoint, я могу без проблем создавать там тестовые файлы.

[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

Итак, поведение таково, что вы не можете писать в точку монтирования, если там не установлен том.

Однако я использую playbook для выполнения следующих действий:

- 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"

На смонтированный том нельзя записать файлы. Кажется, что неизменяемость рекурсивно применяется ко всем подкаталогам тома.

Я также попытался настроить неизменяемость с помощью файлового модуля, и поведение осталось таким же.

Кто-нибудь видел такое поведение раньше? Я использую ansible 2.6.3 против RHEL 5, 6 и 7.