[an error occurred while processing the directive] Настраиваем блочную дедупликацию на Synology | hwp.ru

Настраиваем блочную дедупликацию на Synology

Предостережение: 

На момент подготовки статьи, дедупликация данных не являлась встроенной функцией NAS-серверов Synology. Желая включить эту недокументированную опцию, вы действуете на свой страх и риск. Ни Synology, ни тем более HWP не несут ответственности за последствия, связанные с использованием инструкций, данных в этой статье.

Что потребуется:

  • NAS Synology с DSM 6.1 или выше
  • Раздел с файловой системой BTRF
  • Возможность установки Docker из центра пакетов Synology

Пока вы делаете бэкапы перед тем, как приступить, немного теории, совсем чуть-чуть и общими словами.

Btrfs - ключ к блочной дедупликации

Если вы запишете на NAS в 10 папок 10 файлов windows.iso размером по 3 Гб, то вы займете 30 Гб свободного места. Обычная дедупликация способна выявить повторяющиеся файлы и показать вам, что их можно удалить, у Synology есть эта функция в пакете "анализатор хранения", но это - прошлый век. Блочная дедупликация сканирует каждый файл в поисках повторяющихся блоков (экстентов), и если находит в разных файлах идентичные блоки, то в одном из них она производит удаление дубля экстента, заменяя его ссылкой на такой же экстент в другом файле. Совсем грубо это выглядит так: допустим, есть 10 архивов, в каждом из которых лежит dx.dll, так вот из 9 архивов содержимое файла dx.dll будет удалено и заменено на ссылку, отправляющую к 10-му архиву, где этот файл сохранился. Конечно, на самом деле этот процесс куда более сложный, но смысл все равно остается тем же - ссылка на dx.dll, например, занимает 128 байт, а сам dx.dll - 300 мегабайт. Проведя дедупликацию, мы сэкономим 2700 мегабайт из 3000, и при этом все файлы останутся на месте, их можно копировать, открывать и удалять независимо друг от друга. При записи на другой носитель, например на компьютер, дедуплицированные данные снова займут 3000 мегабайт, так что экономим мы место только внутри NAS-а.

Принцип дедупликации

Современные NAS-ы Synology поддерживают файловую систему Btrfs, в которой вот такие "ссылки" на экстенты - есть основа всего, поэтому ядро операционной системы, умеющее работать с Btrfs поддерживает функцию дедупликации само по себе, без лишних инструментов. Но Btrfs сама не умеет проводить дедупликацию, как например ZFS, ни на лету, ни как-то иначе. Файловой системе нужно, чтобы кто-то просмотрел все файлы, нашел в них повторяющиеся блоки и указал, что их можно удалить, заменяя ссылками. Для этой цели существуют несколько программ, одна из которых - duperemove

Поскольку поддержка Btrfs встроена в ядро операционных систем Synology DSM 6.x, то нам не важно, что в самой Synology DSM нет инструмента дедупликации, ведь все что нам нужно - это сообщить файловой системе, где лежат повторяющиеся блоки данных внутри файлов, а дальше Synology DSM все сделает сама.

Убедитесь, что у вас btrfs


Как вы уже поняли, раздел данных на вашем NAS-е должен иметь файловую систему Btrfs, а не EXT4.

Docker - ключ к duperemove

Начиная с версии DSM 6.x, компания Synology значительно усложнила написание и подготовку стороннего софта для запуска из-под своей ОС, мотивируя так: "хотите ставить софт - используйте Docker или виртуализацию" (см. нашу статью про гипервизор Synology). В принципе, это правильный шаг, гарантирующий целостность операционки. Гипервизор Synology Virtual Machine Manager не даст нам прямого доступа к файловой системе, а вот контейнерная виртуализация - даст. Поэтому мы будем использовать пакет Docker, внутри которого создадим контейнер и загрузим туда программу duperemove. 

Установка Docker и образа Debian

Убедившись, что у вас на NAS-е файловая система Btrfs, открываем "Пуск - центр пакетов", листаем вниз и инсталлируем Docker.

Запускаем Docker и во вкладке "Реестр" выбираем образ debian:latest. Мы будем использовать именно этот образ, хотя точно так же должно работать и в Ubuntu и в Centos.

Переходим на вкладку "Образ", жмем "Запустить" - наш контейнер запущен. Останавливаем его, кликая на выключатель справа.

Выделив контейнер Debian1, жмем кнопку "Настройки". Нам надо предоставить контейнеру полный доступ к DSM, поэтому выбираем эту галочку, после чего настраиваем ограничение ресурсов. По умолчанию duperemove использует все ядра процессоров и может скушать всю память, доступную в системе. Сам процесс дедупликации очень ресурсоемкий и долгий, поэтому лучше ограничить ресурсы контейнеру, выделив не более половины ядер CPU и около половины используемого объема ОЗУ. Когда дедупликация закончится, все лишние данные из памяти будут удалены. Это вам не ZFS, тут хранить таблицы экстентов в памяти не нужно.



По умолчанию наш контейнер не видит файлы и директории, которые хранятся на NAS-е, и надо "пробросить" физические каталоги в его виртуальную среду. Жмем кнопку "дополнительные настройки", переходим в закладку "Том" и жмем кнопку "Добавить папку". Выбираем нужную нам папку, это может быть как корневая, так и любая вложенная, жмем "OK" и вводим путь внутри контейнера, куда будет смонтирована папка NAS-а, пусть это будет /tmp/hwp_vmware. Если нужно добавить несколько папок NAS-а, повторяем этот шаг несколько раз.

Вообще, как я говорил, дедупликация в Btrfs- очень тяжелый для системы процесс, поэтому имеет смысл проводить её выборочно, например только для папки с образами виртуальных машин или другими дублирующимися данными. Причем, лучше сделать несколько копий контейнера для разных папок и запускать, например, каждый из них отдельно по расписанию (как настроить запуск контейнеров по расписанию - ищите в гугле), а мы идем дальше.

Запускаем наш контейнер, нажав на выключатель справа. Нажимаем кнопку "Сведения", открывается новое окно. Нажимаем "Терминал", и чуть подождав, попадаем в интерфейс командной строки. У нас совершенно "голый" debian, в котором нет даже доступа по SSH, поэтому лучше и быстрее один раз ввести длинный URL с клавиатуры, чем пробрасывать порты внутрь контейнера и заходить из терминальной программы.

Заходим в папку, /tmp

cd /tmp

Включаем права root и устанавливаем wget 

su

apt-get update

apt-get install wget nano

Update: программа Duperemove была включена в тестовый репозиторий buster, поэтому подключаем его.

nano /etc/apt/sources.list

добавляем в конец

deb http://deb.debian.org/debian buster main

apt-get update

apt-get install duperemove

Все, теперь все что нужно - у нас есть, пришло время запустить дедупликацию!

duperemove -rdh --hashfile=hwp_hash /hwp_vmware

, где

  • -r - ходить по каталогам внутри (рекурсивно)
  • -d - произвести дедупликацию
  • -h - вывести отчет на человеческом языке
  • --hashfile=hwp_hash - файл в котором будут храниться хэши на время дедупликации. Если его не указать, все хэши будут храниться в ОЗУ и это может привести к переполнению памяти и ошибке программы. По окончанию процесса, этот файл автоматически будет удален. На время процедуры он лежит в папке /tmp
  • ./hwp_vmware - путь к смонтированному каталогу внутри контейнера, который ведет в каталог на NAS-е

Процесс дедупликации очень долгий - на процессорах серии Celeron он может занимать несколько дней или даже недель для папки объемом в 1 Тб. Сначала программа создаст набор хэшей для экстентов каждого файла внутри смонтированного каталога, а потом начнет удалять их из самих файлов. Если процесс прервать, придется начинать с самого начала. В случае если во время дедупликции сервер будет выключен (пропадет электричество или все повиснет) - после перезагрузки ничего не должно сломаться. Мы проверяли это 3 раза во время тестирования - данные были целы.

Файловая дедупликация

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

Устанавливаем программу fdupes, которая составляет список дублирующихся файлов

apt-get install fdupes

Теперь запускаем поиск и дедупликацию в нашей папке, как в примере выше

fdupes -r -S ./hwp_vmware | duperemove --fdupes

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

Ну что, давайте протестируем как оно работает?

Результаты тестирования

Мы записали в тестовую папку 397 Гб образов виртуальных машин, создав 6 копий одинаковых данных и положили туда же обычную папку с инсталляционными файлами различных программ и игр. До начала дедупликации на томе было 1.69 Гб свободных данных и 397 Гб тестовых образов (на скриншоте ниже видно, что файлы занимают 381 Гб, так как используется сжатие на уровне файловой системы Btrfs). 

Файловая дедупликация обрадовала своей скоростью - уже через 5 часов на диске было 1.9 Тб свободного места, а занятое пространство сократилось до 175 Гб.

Файловая дедупликация

Блочную дедупликацию на том же объеме провести не удалось - за сутки работы программы из 785 000 экстентов обработаны было всего 1200, расчеты на коленках показали, что тест на таком объеме будет идти два года, и возможно более быстрый процессор решил бы нашу задачу. На тестовом объеме в 1 Гб, удалось добиться той же точной дедупликации, что и в файловом методе. Естественно, в реальной жизни эффективность может быть другой, как выше, так и ниже. Что неприятно, так это невозможность прервать работу Duperemove; какие-то экстенты она отрабатывает за считанные секунды, а на какие-то тратит часы. И пока программа обрабатывает экстент, остановить или перезапустить контейнер не получится. В нашей тестовой машине использовался 2-ядерный процессор Celeron J3355, и возможно на топовых NAS-ах Synology с Xeon-ами, блочная дедупликация больших объемов данных будет проходить за считанные дни или часы.

Заключение

Если вы знакомы с контейнерами, то сможете настроить автоматический запуск дедупликации по расписанию, не дожидаясь, пока Synology введет поддержку этой функции в DSM. Как уже было сказано выше, имеет смысл сделать отдельные контейнеры для отдельных папок и запускать их по очереди. Я тестировал работу блочной дедупликации на чистом Linux-е без контейнеров, и там этот процесс занимал на точно таком же процессоре всего несколько часов. Видимо, Docker является слишком толстой прослойкой, поглощающей ресурсы CPU.

Дедупликация не работает на зашифрованных папках.

Да, конечно Btrfs - это не ZFS, где дедупликация происходит на лету во время записи данных на диск. Но если достичь в DSM той же производительности, что на Debian 9, то можно проводить этот процесс еженедельно или по ночам, получая тот же эффект экономии, который дает ZFS.

Михаил Дегтярёв (aka LIKE OFF) 
14/06.2018


Похожие статьи:

Обзор Synology FlashStation FS6400 - тестируем скорость в 1С и знакомимся с брендированными SSD Synology

Новый флагман корпоративного сегмента от Synology, модель на двух процессорах Xeon Silver с 24 отсеками для SSD и встроенной виртуализацией. Мы протестируем, как на ней работает 1С Предприятие, и познакомимся с новыми брендированными SSD от Synolo

Хранение и резервирование виртуальных машин на QNAP NAS

В небольших компаниях NAS способен существенно снизить затраты на инфраструктуру. Те, кто вчера списывал серверы, перемещая ресурсы в NAS, сегодня отменяют подписку на софт, чьи функции QNAP выполняет, что называется, "из коро

Тестируем функцию распознавания лиц в видеонаблюдении на Synology DVA3219

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

Обзор Synology SA3200D: двухконтроллерный NAS со всеми сервисами, виртуализацией и docker

Эта модель - единственный в своём роде NAS, в котором отказоустойчивость в режиме Active-Passive достигается не только для файловых протоколов, но и для встроенных программ, в том числе видеонаблюдения, сервера виртуализации, резер


Copyrights © 1998-2021