Дедупликация NTFS, ZFS, BTRFS

Дедупликация NTFS, ZFS, BTRFS

Главный вопрос зачем?

Есть множество примеров где дедупликация может решить поставленные задачи.

Скажем у вас есть домашний архив фото, вы храните их на ПК, но хотите так же иметь резервную копию на внешнем usb hdd, но фотографий так много что на диск они не помещаются, покупать новый вы не планировали, но иметь хоть какой то вариант резервной копии нужно, тут вам может помочь один из вариантов технологии дедупликации.

Либо у вас есть корпоративный сервер с резервными копиями данных, еще одна копия у вас хранится в другом офисе, но вы скажем хотите иметь offline бекап на периодически подключаемом NAS (ленточные бекапы для вас это что то на богатом), почему периодически? Потому что вы хотите обезопасить себя от всякого рода шифровальщиков и прочих онлайн угроз, и иметь такого рода “холодный” бекап где то под ногами, но опять же NAS всего то несколько террабайт, а копия весит сильно больше.

Есть также примеры с эфемерными VM поднимаемыми по требованию десятками тысяч в день, на которых нет каких либо важных данных, но суммарно они могут занимать терабайты дискового пространства одними и теми же библиотеками.

Что же такое дедупликация?

Дедупликация данных - это процесс обнаружения и удаления повторяющихся данных в файловой системе.

Это позволяет уменьшить размер данных, уменьшить затраты на хранение.

Есть так же реализации дедупликации данных в базах данных, но эта тема находится за рамками данной статьи.

Виды и варианты дедупликации данных:

Дедупликация на уровне блоков.

Этот вид дедупликации идентифицирует повторяющиеся блоки данных внутри файловой системы и хранит только одну копию каждого уникального блока. Повторяющиеся блоки заменяются ссылками на эту единственную копию, что позволяет сократить объем используемого дискового пространства.

Дедупликация на уровне файлов.

В этом случае дедупликация происходит на уровне целых файлов. Система идентифицирует повторяющиеся файлы и хранит только одну копию каждого уникального файла. Вместо дублирования файлов система создает ссылки на одну и ту же копию.

Дедупликация на уровне блоков с учетом контента (content-aware deduplication).

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

Так же реализации дедупликации данных могут комбинировать данные виды дедупликации для достижения наилучших результатов.

Помимо этого реализация дедупликации бывает “на лету” и в постобработке.

Inline Deduplication (интегрированная дедупликация): В этом подходе дедупликация выполняется непосредственно в момент записи данных на диск. Когда новые данные добавляются в файловую систему, система проверяет их на наличие дубликатов и удаляет повторяющиеся блоки данных, прежде чем записать данные на диск. Это позволяет избежать сохранения дублирующихся данных на диске и сразу же сэкономить пространство.

Как хороший пример использования: можно скопировать 10TB данных на диск с настроенной inline deduplication объемом 5TB, с оговоркой что вы попадете в коэффициент дедупликации x2 с вашим типом данных.

Post Processing Deduplication (последующая дедупликация): В этом подходе дедупликация выполняется после того, как данные уже были записаны на диск. В этом случае дедупликация процесс, который работает в фоновом режиме и сканирует файловую систему, ищет повторяющиеся блоки данных и удаляет дубликаты. Последующая дедупликация может быть более ресурсоемкой операцией, поскольку требуется сканирование всей файловой системы для выявления повторений, но она может быть эффективной, особенно для файловых систем, в которых часто происходят изменения данных.

Пример использования: у вас уже есть диск объемом 10 TB данных который практически заполнен, и вы хотите сократить занимаемое на нем место без фактического удаления данных.

Есть еще варианты реализации так называемых Target Deduplication и Source Deduplication, но они чаще всего применяются в специализированном ПО или системах СХД, в домашней лабе это сложно проверить.

И так лаба:

Virtualbox 7.0.4
Host PC:
Intel Core i7-10510U CPU 1.80GHz / 2.30 GHz
4 CPU
32GB RAM
NVME Samsung SSD 970 EVO Plus 1TB
Windows Server 2022
2 vCPU
4GB RAM
Ubuntu Server 23.04 ZFS
2 vCPU
4GB RAM
Ubuntu Server 23.04 BTRFS
2 vCPU
4GB RAM
Zabbix Appliance 6.4.3
2 vCPU
4GB RAM
Официальная документация доступна по ссылке:
https://www.zabbix.com/download_appliance
Датасет:
103 GB (111,144,359,353 bytes)
Внутри tar.gz архивы с бэкапами сайта.

Дедупликация NTFS, ZFS, BTRFS

Для минимального влияния просадки производительности хост машины все тесты я проводил поочередно, то есть включенными одновременно были только VM Zabbix и текущая VM с тестом дедупликации, другие 2 VM были выключены.

Linux ZFS

Копируем dataset

Дедупликация NTFS, ZFS, BTRFS
Дедупликация NTFS, ZFS, BTRFS

И так датасет скопирован, смотрим что у нас со статистикой zpool:

~$ zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT dedup-pool 119G 104G 15.4G - - 2% 87% 1.00x ONLINE -

Данные с копировались примерно за 18 минут, а вот с дедупликацией потребовалось уже около 30:

Дедупликация NTFS, ZFS, BTRFS

Так же посмотрим на процессор:

Дедупликация NTFS, ZFS, BTRFS

По оперативной памяти особой разницы нет.

Дедупликация NTFS, ZFS, BTRFS

Результат дедупликации.

Занято около 33 Gb дискового пространства, коэффициент дедупликации 3.39!

$ zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT dedup-pool 119G 30.6G 88.4G - - 1% 25% 3.39x ONLINE -

Занятое место по Заббикс:

Дедупликация NTFS, ZFS, BTRFS

Но в процентах картина ближе к правде:

Дедупликация NTFS, ZFS, BTRFS

Итого дедупликация на zpool дала нам следующую статистику:Было занято 104GB, стало 30.6G.

Коэффициент дедупликации: 3.39

Инфографика:

Дедупликация NTFS, ZFS, BTRFS
Дедупликация NTFS, ZFS, BTRFS

Выводы:

ZFS действительно способен эффективно экономить дисковое пространство, однако важным фактором является выбор между оперативной памятью и жестким диском, а также тип данных, который будет храниться и дедуплицироваться.

Linux BTRFS

Копируем файлы:

$ sudo btrfs fi usage /mnt/btrfs_disk Overall: Device size: 120.00GiB Device allocated: 107.02GiB Device unallocated: 12.98GiB Device missing: 0.00B Device slack: 0.00B Used: 103.73GiB Free (estimated): 14.47GiB (min: 7.98GiB) Free (statfs, df): 14.47GiB Data ratio: 1.00 Metadata ratio: 2.00 Global reserve: 112.08MiB (used: 0.00B) Multiple profiles: no Data,single: Size:105.00GiB, Used:103.51GiB (98.58%) /dev/sdb 105.00GiB Metadata,DUP: Size:1.00GiB, Used:113.28MiB (11.06%) /dev/sdb 2.00GiB System,DUP: Size:8.00MiB, Used:16.00KiB (0.20%) /dev/sdb 16.00MiB Unallocated: /dev/sdb 12.98GiB

Как видимо занято 103.73GiB

Результаты:

$ sudo btrfs fi usage /mnt/btrfs_disk Overall: Device size: 120.00GiB Device allocated: 108.02GiB Device unallocated: 11.98GiB Device missing: 0.00B Device slack: 0.00B Used: 82.30GiB Free (estimated): 35.88GiB (min: 29.89GiB) Free (statfs, df): 35.87GiB Data ratio: 1.00 Metadata ratio: 2.00 Global reserve: 97.64MiB (used: 0.00B) Multiple profiles: no Data,single: Size:106.01GiB, Used:82.11GiB (77.46%) /dev/sdb 106.01GiB Metadata,DUP: Size:1.00GiB, Used:100.41MiB (9.81%) /dev/sdb 2.00GiB System,DUP: Size:8.00MiB, Used:16.00KiB (0.20%) /dev/sdb 16.00MiB Unallocated: /dev/sdb 11.98GiB

Весь процесс занял более 7 часов. К сожалению, результаты дедупликации оказались не очень впечатляющими: объем занимаемого пространства до применения составлял 103.73GiB, а после сокращения процессом осталось только 82.30GiB, что означает, что удалось сократить всего лишь около 20.66%.

Инфографика:

Дедупликация NTFS, ZFS, BTRFS
Дедупликация NTFS, ZFS, BTRFS
Дедупликация NTFS, ZFS, BTRFS
Дедупликация NTFS, ZFS, BTRFS
Дедупликация NTFS, ZFS, BTRFS

Выводы:

По моему мнению, дедупликация в сочетании BTRFS с BEES не оказалась такой интересной и эффективной, как в случае с ZFS. Хотя у них разные принципы работы, конечные результаты на ZFS выглядят более привлекательными и достигаются за меньший период времени.

С другой стороны, BTRFS, как видно, менее требовательна к оперативной памяти, хотя при таких результатов сжатия места лично для меня это уже не так важно.

Windows NTFS

Копируем файлы на нашу систему:

PS C:\Windows\system32> Get-DedupStatus FreeSpace SavedSpace OptimizedFiles InPolicyFiles Volume --------- ---------- -------------- ------------- ------ 16.38 GB 0 B 0 0 E: PS C:\Windows\system32> Get-DedupVolume -Volume E: Enabled UsageType SavedSpace SavingsRate Volume ------- --------- ---------- ----------- ------ True Default 0 B 0 % E: PS C:\Windows\system32> Get-DedupProperties -DriveLetter E InPolicyFilesCount : 0 InPolicyFilesSize : 0 OptimizedFilesCount : 0 OptimizedFilesSavingsRate : 0 OptimizedFilesSize : 0 SavingsRate : 0 SavingsSize : 0 UnoptimizedSize : 111247380480 PSComputerName :

Результаты:

PS C:\Windows\system32> Get-DedupStatus FreeSpace SavedSpace OptimizedFiles InPolicyFiles Volume --------- ---------- -------------- ------------- ------ 112.85 GB 98.11 GB 377 377 E: PS C:\Windows\system32> Get-DedupVolume -Volume E: Enabled UsageType SavedSpace SavingsRate Volume ------- --------- ---------- ----------- ------ True Default 98.11 GB 93 % E: PS C:\Windows\system32> Get-DedupProperties -DriveLetter E InPolicyFilesCount : 377 InPolicyFilesSize : 111144308918 OptimizedFilesCount : 377 OptimizedFilesSavingsRate : 94 OptimizedFilesSize : 111144308918 SavingsRate : 93 SavingsSize : 105341122774 UnoptimizedSize : 112999258326 PSComputerName :
Дедупликация NTFS, ZFS, BTRFS
Дедупликация NTFS, ZFS, BTRFS

Удивительно, но результаты дедупликации оказались впечатляющими. Размер был сжат на целых 93%! Теперь занимаемое место на диске составляет всего 7.13GB вместо изначальных 103 GB. Это значительное уменьшение объема данных, которые нужно хранить, и безусловно позволяет сэкономить драгоценное дисковое пространство.

Инфографика:

Дедупликация NTFS, ZFS, BTRFS

Вот тут было неожиданно для меня, дедупликация потребовала меньше RAM чем копирование файлов.

Дедупликация NTFS, ZFS, BTRFS
Дедупликация NTFS, ZFS, BTRFS
Дедупликация NTFS, ZFS, BTRFS

Выводы:

Для моего датасета Windows оказалась удивительно эффективной, и коэффициент сжатия данных оказался превосходным – просто мечта! Жаль, что у Майкрософт есть проприетарные ограничения и нюансы, которые не позволяют использовать дедупликацию на обычной версии Windows. Она доступна только на Windows Server.

Дедупликация NTFS, ZFS, BTRFS

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

Дедупликация может быть реализована "на лету" или в постобработке. При интегрированной дедупликации данные проверяются на наличие дубликатов и удаляются перед записью на диск, что позволяет сразу сэкономить пространство. При последующей дедупликации процесс сканирует файловую систему и удаляет дубликаты уже после записи данных на диск.

Linux ZFS и Windows (на Windows Server) предлагают эффективные реализации дедупликации данных. Например, Windows сжала размер данных на целых 93%, что значительно экономит дисковое пространство. Однако у Windows есть ограничения, и дедупликация доступна только на Windows Server.

Linux BTRFS с BEES показал менее впечатляющие результаты дедупликации по сравнению с ZFS и Windows. Хотя она менее требовательна к оперативной памяти, результаты сжатия пространства не так впечатляющи.

Выбор между оперативной памятью и жестким диском, а также тип данных, может оказывать влияние на эффективность дедупликации.

В целом, дедупликация данных может быть полезна в различных сценариях, таких как создание резервных копий, сокращение занимаемого места на диске и обеспечение эффективного использования ресурсов хранения. Однако, при выборе реализации дедупликации необходимо учитывать особенности каждой системы и типов данных, чтобы достичь наилучших результатов.

11
Начать дискуссию