Как дедупликация на уровне блоков ZFS согласуется с переменным размером блока?
Согласно Первому Результату Google для "Дедупликации ZFS"
...
Что для дедупликации: файлы, блоки или байты?
...
В случае дублирования файлов целиком дедупликация на уровне блоков имеет несколько более высокие издержки, чем дедупликация на уровне файлов, но в отличие от дедупликации на уровне файлов она очень хорошо обрабатывает данные на уровне блоков, такие как образы виртуальных машин.
...
ZFS обеспечивает дедупликацию на уровне блоков
...
В соответствии со статьей ZFS Википедии
ZFS использует блоки переменного размера размером до 128 килобайт. Доступный в настоящее время код позволяет администратору настраивать максимальный размер блока, который используется, поскольку определенные рабочие нагрузки не работают с большими блоками. Если сжатие данных (LZJB) включено, используются переменные размеры блоков. Если блок можно сжать, чтобы он соответствовал меньшему размеру блока, на диске используется меньший размер, чтобы использовать меньше памяти и повысить пропускную способность ввода-вывода (хотя за счет увеличения использования ЦП для операций сжатия и распаковки).
Я хочу убедиться, что я правильно понимаю.
Предполагая, что сжатие выключено
Если я случайно заполняю файл размером 1 ГБ, то я записываю второй файл, который такой же, за исключением половины, я меняю один из байтов. Будет ли этот файл дедуплицирован (все, кроме блока измененного байта?)
Если я напишу один байтовый файл, это займет целых 128 килобайт? Если нет, увеличатся ли блоки в случае увеличения длины файла?
Если файл занимает два блока по 64 килобайта (произойдет ли это когда-нибудь?), Будет ли идентичный файл дедуплицирован после получения одного блока по 128 килобайт
Если файл укорочен, то часть его блока была бы проигнорирована, возможно, данные не будут сброшены до 0x00 байтов. Будет ли дедуплицирован половина использованного блока?
2 ответа
Дедупликация ZFS работает с блоками (длина записи), она не знает / не заботится о файлах. Каждый блок проверяется с помощью sha256 (по умолчанию изменяемый). Если контрольная сумма совпадает с другим блоком, она будет ссылаться на ту же запись, и новые данные не будут записываться. Одной из проблем дедупликации в ZFS является то, что контрольные суммы хранятся в памяти, поэтому для больших пулов потребуется много памяти. Таким образом, вы должны применять дублирование только при использовании большой длины записи
Предполагая длину записи 128k
Если я случайно заполняю файл размером 1 ГБ, то я записываю второй файл, который такой же, за исключением половины, я меняю один из байтов. Будет ли этот файл дедуплицирован (все, кроме блока измененного байта?)
Да, только один блок не будет продублирован.
Если я напишу один байтовый файл, это займет целых 128 килобайт? Если нет, увеличатся ли блоки в случае увеличения длины файла?
128 КБ будет выделено, если размер файла превысит 128 КБ, при необходимости будет выделено больше блоков.
Если файл занимает два блока по 64 килобайта (произойдет ли это когда-нибудь?), Будет ли идентичный файл дедуплицирован после получения одного блока по 128 килобайт
Файл займет 128 КБ, тот же файл будет дедуплицирован
Если файл укорочен, то часть его блока была бы проигнорирована, возможно, данные не будут сброшены до 0x00 байтов. Будет ли выводиться половина использованного блока?
Если точно такой же блок найден, да
Блоки ZFS переменного размера, как уже упоминал Явор, не должны путать рандомизированные чанки переменного размера, также называемые чанкингом с определенным содержанием или дактилоскопией Рабина. Вот небольшой разговор, описывающий различия.
ZFS использовал статические, но настраиваемые размеры блоков.