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

Принудительно обновить контрольную сумму на zfs?

Я недавно изменил checksum свойство одной из моих файловых систем zfs без дубликатов в sha256 из on (fletcher4), чтобы лучше поддерживать отправку дублированных пар репликации, как в этой команде zfs send -DR -I _starting-snaphot_ _ending-snapshot_.

Однако в man-странице zfs есть что сказать о send -D:

Этот флаг можно использовать независимо от свойства дедупликации набора данных, но производительность будет намного лучше, если файловая система будет использовать контрольную сумму с возможностью дедупликации (например, sha256).

На странице руководства zfs также говорится об этом checksum свойство:

Изменение этого свойства влияет только на вновь записанные данные.

У меня нет желания доверять fletcher4. Компромисс заключается в том, что, в отличие от SHA256, fletcher4 не является псевдослучайной хэш-функцией, и поэтому нельзя доверять предотвращению конфликтов. Поэтому он подходит для дедупликации только в сочетании с опцией «verify», которая обнаруживает и разрешает конфликты хешей.

Как я могу обновить контрольные суммы файловой системы, желательно без отключения системы?

Чтобы изменить свойства (будь то сжатие, дедупликация или контрольная сумма) уже записанных данных, подход zfs заключается в том, чтобы пропустить данные через zfs send | zfs receive последовательность. Очевидно, что для этого не нужно отключать систему, но вы воля необходимость

  1. достаточно ресурсов в вашем zpool / в системе для хранения двух дедуплицированных копий рассматриваемого набора данных
  2. время простоя для набора данных, так как вам нужно будет либо уничтожить его, либо переименовать в процедуре
  3. достаточно времени и терпения для завершения операции

Поскольку вы уже используете дедупликацию для zpool, запустите zfs send | zfs receive с местом назначения в том же пуле, что и источник, будет использовать только пространство, необходимое для вновь записанных блоков метаданных. Но будьте готовы к тому, что копирование займет некоторое время - дедупликация может быть ужасно медленной, особенно если у вас недостаточно оперативной памяти для хранения всей таблицы дедупликации в ОЗУ.

Очевидно, вам нужно будет прекратить все операции записи, чтобы создать окончательную, авторитетную копию набора данных, но вы можете минимизировать время простоя, сначала скопировав моментальный снимок, остановив все записи и выполнив добавочные zfs send -i | zfs receive как последний шаг.