Вопрос или проблема
На нашем сервере есть задача 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
проверять текущие значения. Сначала считывайте текущие права доступа и владельца, затем сравнивайте их с желаемыми значениями. Если изменения не требуются, пропустите вызов команды.
Вот как это может быть реализовано:
-
Скрипт для проверки изменений: Перед выполнением команды, создайте скрипт, который будет сначала проверять, нужно ли действительно менять владельца или права доступа.
-
Оптимизация cron задачи: Обновите вашу cron задачу с использованием условия, которое запускает
chown
иchmod
только в случае необходимости.
Таким образом, можно избежать лишних записей в ZFS и, в результате, изменения снимков, которые происходят без значительных изменений в данных.
Заключение
Понимание специфики работы команд и особенностей файловой системы ZFS позволяет вам управлять снимками более эффективно. Это поможет избежать нежелательных «фиктивных» изменений и улучшит управление вашими хранилищами данных.