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


13

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

Тем не менее, на странице руководства zfs есть что сказать о send -D:

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

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

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

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

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

Ответы:


11

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

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

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

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


Мне совсем не ясно, что zfs receiveобновляет метаданные файловой системы. Мне кажется, что было бы намного быстрее, если бы он просто принял метаданные как есть. Однако это может оказаться невозможным из-за блочной, а не файловой природы уровня контрольной суммы. В таком случае zfs send | zfs receiveсформируется приемлемая основа для решения.
84104

1
ZFS отправить | zfs recv эффективно изменит все метаданные (выбор сжатия, выбор контрольной суммы, выбор дедупликации). zfs send создает объект, который вы затем принимаете, используя zfs recv, который записывает его почти так же, как если бы это были все новые данные. Тем не менее - я думаю, что вы можете ошибочно думать о zfs send | recv в отношении дедупликации. zfs send -D пытается дедуплицировать данные / в самом потоке /, не поддерживая существующую дедупликацию данных из исходного набора данных. Вот почему нет требования, чтобы сторона recv также включала дедупликацию в наборе данных назначения.
Nex7

Для дальнейшего объяснения - в настоящее время zfs не может отправлять дедуплицированные данные | recv таким образом, чтобы все, что происходит по сети, представляло собой единственную копию дедуплицированных данных и связанных записей таблицы дедупликации. Даже если источник и пункт назначения синхронизированы, и вы отправляете только инкрементальный снимок. ZFS по-прежнему раздувает отправляемые данные до полного размера, если данные внутри него оказываются недедуплицируемыми / в рамках самого потока /. У вас могут быть данные, которые легко дедуплируются в POOL DDT, но, как небольшой отправляющий объект, будут полностью недедуплицируемыми.
Nex7
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.