Почему вызовы chown и chmod, которые ничего не изменяют, создают различия между снимками на ZFS?

Вопрос или проблема

На нашем сервере есть задача cron, которая регулярно вызывает chown и chmod для директории в файловой системе ZFS. Обычно это не меняет пользователя и права, так как у директории уже есть те же атрибуты.

Есть еще одна задача cron, которая регулярно создает снапшот этой файловой системы.

На Рождество я был один в офисе, поэтому изменений на сервере не должно было быть, но я обнаружил, что снапшоты ZFS не были пустыми.

Для пула и набора данных были установлены следующие атрибуты:

compression=on (lz4)
atime=off
xattr=sa
acltype=posixacl

Почему снапшот не пуст, если вызов chown и chmod ничего не меняет?

Есть ли способ предотвратить это?

(Нет, я не могу отключить эту задачу cron.)

если вызов chown и chmod ничего не меняет?

Но они это делают. Если вы переписываете предыдущие значения, они все равно записываются, и запись файла переписывается. Это изменение.

Чтобы предотвратить такие ‘нулевые’ изменения, вам нужно прочитать текущие значения, сравнить их с желаемыми и записывать только в случае необходимости изменения.

Как отметил @paladin, вероятно, существует более эффективный способ управления разрешениями файлов.

Ответ или решение

На вашем сервере регулярное выполнение команд chown и chmod через cron задачу для каталога в файловой системе ZFS приводит к неожиданным изменениям в снимках, создаваемых другой cron задачей. Несмотря на то, что вы ожидаете отсутствие изменений, снимки по-прежнему не пусты. Давайте разберемся, почему это происходит.

Причины изменения снимков ZFS

Когда вы вызываете команды chown и chmod, даже если фактически не происходит изменения владельца или прав доступа, запись все равно выполняется. Это связано с особенностями работы файловых систем, где обновление метаданных, таких как время изменения или данных о владельце, ведет к записи изменений в каталоге. Таким образом, ZFS воспринимает такие операции как изменения, которые необходимо зафиксировать в снимке.

Настройка ZFS

Ваши настройки ZFS включают сжатие данных (lz4), выключенное отслеживание времени доступа (atime=off), атрибуты расширенной безопасности (xattr=sa) и тип ACL (acltype=posixacl). Эти параметры нацелены на повышение эффективности хранения данных и управления правами доступа, однако они не предотвращают запись изменений метаданных при каждом вызове chown и chmod.

Решение проблемы

Чтобы предотвратить «фиктивные изменения», вам необходимо перед выполнением команд chown и chmod проверять текущие значения. Сначала считывайте текущие права доступа и владельца, затем сравнивайте их с желаемыми значениями. Если изменения не требуются, пропустите вызов команды.

Вот как это может быть реализовано:

  1. Скрипт для проверки изменений: Перед выполнением команды, создайте скрипт, который будет сначала проверять, нужно ли действительно менять владельца или права доступа.

  2. Оптимизация cron задачи: Обновите вашу cron задачу с использованием условия, которое запускает chown и chmod только в случае необходимости.

Таким образом, можно избежать лишних записей в ZFS и, в результате, изменения снимков, которые происходят без значительных изменений в данных.

Заключение

Понимание специфики работы команд и особенностей файловой системы ZFS позволяет вам управлять снимками более эффективно. Это поможет избежать нежелательных «фиктивных» изменений и улучшит управление вашими хранилищами данных.

Оцените материал
Добавить комментарий

Капча загружается...