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

Как дедупликация на уровне блоков ZFS сочетается с переменным размером блока?

В соответствии с Первый результат Google для «дедупликации ZFS»

...
Что дедупить: файлы, блоки или байты?
...
Блочная дедупликация имеет несколько более высокие накладные расходы, чем дедупликация на уровне файлов, когда дублируются целые файлы, но в отличие от дедупликации на уровне файлов, она очень хорошо обрабатывает данные на уровне блоков, такие как образы виртуальных машин.
...
ZFS обеспечивает дедупликацию на уровне блоков
...

В соответствии с Статья в Википедии о ZFS

ZFS использует блоки переменного размера до 128 килобайт. Доступный в настоящее время код позволяет администратору настроить максимальный размер используемого блока, поскольку определенные рабочие нагрузки не работают с большими блоками. Если сжатие данных (LZJB) включено, используются блоки переменного размера. Если блок можно сжать, чтобы он поместился в блок меньшего размера, меньший размер используется на диске для использования меньшего объема памяти и повышения пропускной способности ввода-вывода (хотя и за счет увеличения использования ЦП для операций сжатия и распаковки).

Я хочу убедиться, что правильно понимаю.

Предполагая сжатие выключено

Если я заполняю случайно заполненный файл размером 1 ГБ, то я пишу второй файл, который будет таким же, за исключением середины, я изменяю один из байтов. Будет ли этот файл дедуплицирован (все, кроме измененного блока байта?)

Если я напишу однобайтовый файл, это займет целых 128 килобайт? Если нет, будут ли блоки становиться больше, если файл станет длиннее?

Если файл занимает два блока по 64 килобайта (случится ли это когда-нибудь?), То идентичный файл будет удален после взятия одного блока размером 128 килобайт

Если файл укорочен, то часть его блока будет проигнорирована, возможно, данные не будут сброшены до 0x00 байтов. Будет ли удален наполовину использованный блок?

Дедупликация ZFS работает с блоками (длиной записи), о которых она не знает / не заботится о файлах. Контрольная сумма каждого блока вычисляется с помощью sha256 (по умолчанию изменяемый). Если контрольная сумма совпадает с другим блоком, она просто будет ссылаться на ту же запись, и новые данные не будут записаны. Одна из проблем дедупликации с ZFS заключается в том, что контрольные суммы хранятся в памяти, поэтому для больших пулов потребуется много памяти. Таким образом, вы должны применять дублирование только при использовании большой длины записи.

Предполагая длину записи 128k

Если я заполняю случайно заполненный файл размером 1 ГБ, то я пишу второй файл, который будет таким же, за исключением середины, я изменяю один из байтов. Будет ли этот файл дедуплицирован (все, кроме измененного блока байта?)

Да только один блок не будет продублирован.

Если я напишу однобайтовый файл, это займет целых 128 килобайт? Если нет, будут ли блоки становиться больше, если файл станет длиннее?

Будет выделено 128k, если размер файла превышает 128k, при необходимости будут выделены дополнительные блоки.

Если файл занимает два блока по 64 килобайта (случится ли это когда-нибудь?), То идентичный файл будет удален после взятия одного блока размером 128 килобайт

Файл займет 128 КБ, этот же файл будет дедуплицирован

Если файл укорочен, то часть его блока будет проигнорирована, возможно, данные не будут сброшены до 0x00 байтов. Будет ли выведен наполовину использованный блок?

Если найден такой же блок, да

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

ZFS использует статические, но настраиваемые размеры блоков.