Короткий ответ сразу: btrfs‑дедупликация на Asustor делается не «включением в ADM», а сторонними утилитами (duperemove / bees / пр.). Практически самый надёжный и удобный путь — запустить dedupe‑утилиту в Docker‑контейнере (или собрать её через Entware/апк на самой системе), смонтировать нужный btrfs‑том в контейнер и дать контейнеру соответствующие привилегии (CAP_SYS_ADMIN или --privileged). Ниже — подробный план, рекомендации и примеры команд.
1) Важные замечания перед началом
- Сделайте резервную копию критичных данных и протестируйте на небольшой тестовой папке. Дедупликация влияет на размещение данных на диске — ошибка/сбой в процессе может быть неприятен.
- Дедупликация работает только для файлов, находящихся на одном и том же btrfs‑файловом системе (но может работать и между субволюмами на той же FS).
- Технические требования: операции dedupe используют btrfs ioctl (BTRFS_IOC_DUP_RANGE и т.п.). Для выполнения из контейнера нужен root и CAP_SYS_ADMIN (или --privileged).
- Учтите снапшоты: если у вас есть снапшоты, дедупликация может или уменьшать занимаемый объём (общие экстенты) либо эффекта будет меньше — всё зависит от того, какие данные и где хранятся. Всегда проверяйте размер до/после.
- Dedupe CPU/IO‑тяжёлое: запускайте в непиковое время, пользуйтесь nice/ionice.
2) Какую утилиту выбрать
- Рекомендую duperemove — активнее поддерживается, прост в использовании и предназначен для btrfs block‑level dedupe.
- Bees — тоже встречается, но часто менее поддерживается; можно использовать, но чаще практикуют duperemove.
- Альтернативы (hardlinking, fdupes + hardlink) меняют inode (могут ломать приложения, права отслеживания и т.п.) — не всегда желательный вариант.
3) Вариант A — запуск в Docker (рекомендованный, безопасный)
Плюсы: не лезете в системные пакеты ADM, легко удалить контейнер, используете стандартные дистрибутивы.
Пример Dockerfile (для сборки образа с duperemove):
(пример для x86_64 — AS6804T это Intel, поэтому OK)
Dockerfile:
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y duperemove btrfs-progs git build-essential \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
WORKDIR /data
ENTRYPOINT ["/bin/bash"]
Сборка:
docker build -t duperemove:latest .
Запуск контейнера — примеры:
- Простой запуск интерактивно, с доступом к папке на NAS:
docker run --rm -it \
--cap-add SYS_ADMIN \
-v /volume1/YourShare:/data:rw \
duperemove:latest /bin/bash
Если вы не уверены, можно использовать --privileged вместо --cap-add SYS_ADMIN (но это более «широко»):
docker run --rm -it --privileged -v /volume1/YourShare:/data:rw duperemove:latest /bin/bash
Почему так: duperemove вызывает btrfs ioctl на файловых дескрипторах. Если путь /volume1/YourShare — это точка монтирования бtrfs на хосте, привязка её в контейнер даст утилите возможность выполнить ioctl, но для этого контейнеру нужны права CAP_SYS_ADMIN.
Примеры команд внутри контейнера
- Сканирование (без применения изменений) — сначала протестируйте:
duperemove -rnh /data
Объяснение флагов (duperemove):
- -r — рекурсивно
- -n — только поиск (no‑dedupe) — не вносит изменений, выводит результаты
- -h — человекочитаемый вывод
- Выполнение дедупликации:
duperemove -drh /data
- Можно использовать --hashfile чтобы сохранять и возобновлять расчёт хэшей:
duperemove -drh --hashfile /tmp/dupes.hash /data
- Рекомендуется запускать с nice/ionice и логированием:
nice -n 10 ionice -c2 -n7 duperemove -drh --hashfile /tmp/dupes.hash /data 2>&1 | tee /tmp/duperemove.log
4) Вариант B — установка прямо в ADM (apkg / Entware)
- Теоретически можно установить Entware (opkg) или собрать пакет под ADM, и установить duperemove/bees нативно. Это сложнее: нужно подходящий toolchain/пакет для архитектуры и часто править зависимости.
- Плюс нативной установки — не нужен Docker и привилегии контейнера. Минус — вмешательство в систему ADM, возможные ограничения доступа, сложность сборки и поддержки.
- Если хотите идти этим путём — ищите готовые пакеты в сообществе Asustor / Entware. Если не уверены, лучше Docker.
5) Остальные практические советы и типичные проблемы
- Проверьте, что путь, который вы монтируете в контейнер, находится на btrfs: на хосте:
mount | grep /volume1/YourShare
или
df -T /volume1/YourShare
- До и после проверяйте занятое место/статистику btrfs:
btrfs filesystem df -h /volume1
btrfs filesystem du -s /volume1/YourShare
- Маленький тест: скопируйте пару одинаковых файлов в тестовую папку и запустите dedupe, убедитесь, что space уменьшился как ожидается.
- Совместимость с компрессией: если на FS включена компрессия, это может влиять на поведение; обычно dedupe работает на уровне необработанных экстентов, но проверяйте на тесте.
- Где могут быть подводные камни:
- если файл открыт/используется активно, поведение может быть непредсказуемым;
- если у вас много снапшотов, часть данных может «сопротивляться» освобождению пространства;
- дублирующиеся данные, но в разных FS — не будут объединены.
6) Небольшая памятка команд для проверки и отладки (на хосте через SSH)
- узнать FS и тип:
df -Th /volume1/YourShare
- статус btrfs:
sudo btrfs filesystem show
sudo btrfs filesystem df -h /volume1
- посмотреть размеры дерикторий:
du -sh /volume1/YourShare/*
7) Про bees
- bees тоже осуществляет дедупликацию, но часто требует установки Python 2/старых зависимостей и может быть менее прост в сборке. Если хотите — можно попытаться собрать bees в контейнере аналогичным образом, но рекомендую начать с duperemove.
8) Резюме / план действий
- Включите SSH и сделайте бэкап.
- Запустите Docker‑контейнер с Ubuntu (или готовым образом) и duperemove, с привилегиями (--cap-add SYS_ADMIN или --privileged).
- Смонтируйте нужную папку внутрь контейнера (-v /volumeX/Share:/data).
- Сначала выполните сканирование (dry‑run), проверьте отчёт.
- Если результаты устраивают — запустите реальную дедупликацию (duperemove -drh ...). Используйте nice/ionice.
- Проверьте btrfs filesystem df/du до/после.
Если хотите, могу:
- Подготовить готовый Dockerfile + образ (уже настроенный) и прислать конкретные команды сборки/запуска для вашего пути (/volume1/…).
- Подсказать команды для теста на небольшой директории и объяснить формат вывода duperemove.
- Помочь с инструкцией по установке Entware/пакета на конкретную версию ADM, если хотите ставить нативно.