Anything-sync-daemon (Русский)
anything-sync-daemon (asd) — небольшой псевдо-демон, предназначенный для переноса указанных пользователем каталогов (которые здесь и далее называются целями синхронизации) в tmpfs (ОЗУ) и их периодической синхронизации с постоянным хранилищем (HDD/SSD). Это достигается с помощью bind-монтирования и использования rsync для поддержания синхронизации между копией в tmpfs и резервными копиями в постоянном хранилище. Кроме того, в asd реализованы некоторые функции восстановления после сбоев.
Цели и преимущества asd:
- Простота в использовании
- Уменьшение износа физических дисков
- Улучшение скорости работы
Цели синхронизации переносятся с помощью asd в tmpfs (ОЗУ), соответственно связанные с ними операции ввода-вывода перенаправляются в оперативную память. Таким образом, уменьшается износ физического диска, повышается отказоустойчивость и скорость работы: время доступа к оперативной памяти составляет порядка наносекунд, в то время как время доступа к обычному жёсткому диску примерно в 1,000,000 раз выше и составляет порядка миллисекунд.
Установка
Установите пакет anything-sync-daemon.
Настройка
Настройка asd выполняется через файл /etc/asd.conf
, который предоставляется пакетом.
- Как минимум, определите цели синхронизации, которыми будет управлять asd, в массиве
WHATTOSYNC
. Синтаксис приведён ниже. - Опционально раскомментируйте и укажите расположение tmpfs в переменной
VOLATILE
. - Опционально включите использование overlayfs для улучшения скорости синхронизации и уменьшения количества необходимой памяти. Обратите внимание, что эта опция требует, чтобы ваше ядро было настроено на использование модуля ядра 'overlay'. Смотрите раздел #Режим overlayfs ниже, чтобы узнать подробности.
/tmp
), должно отлично работать. При использовании bleachbit НЕ выполняйте --clean system.tmp
, так как это может удалить файлы в tmpfs и создать проблемы. Также имейте в виду, что использование /dev/shm
может привести к проблемам с systemd NAMESPACE spawning при использовании overlayfs.Пример:
WHATTOSYNC=('/var/lib/monitorix' '/srv/http' '/foo/bar')
или
WHATTOSYNC=( '/var/lib/monitorix' '/srv/http' '/foo/bar' )
Использование
Запустите/включите службу asd.service
. Также есть systemd-таймер, который запускает копирование данных из памяти на диск каждый час. Таймер запускается автоматически вместе со службой asd.service
, так что запускать его вручную не нужно.
Проверка конфигурации
Команда asd parse
покажет, что именно asd будет делать, основываясь на конфигурации в /etc/asd.conf
, а также выведет прочую полезную информацию.
Советы и рекомендации
Установка частоты синхронизации
По умолчанию таймер настроен на синхронизацию с интервалом в один час. Пользователь может легко установить другой желаемый интервал, отредактировав файл юнита. В примере ниже создаётся drop-in файл, в котором таймер установлен на синхронизацию с интервалом в 10 минут (строка с пустым значением OnUnitActiveSec
используется для удаления старого значения перед добавлением нового [1]):
/etc/systemd/system/asd-resync.timer.d/frequency.conf
[Unit] Description=Timer for Anything-sync-daemon - 10min [Timer] OnUnitActiveSec= OnUnitActiveSec=10min
Смотрите systemd.timer(5) для получения дополнительной информации о настройке таймеров.
Режим overlayfs
Overlayfs — это простая файловая система, которая доступна в ядре Linux с версии 3.18.0. Начиная с версии 5.54, asd может использовать overlayfs, чтобы уменьшить потребление памяти в tmpfs и ускорить операции синхронизации с диском. Особенность метода в том, что overlayfs записывает только изменённые данные, а не цель синхронизации целиком. Те же функции восстановления, которые использует asd в своём режиме по умолчанию, также активны при работе в режиме overlayfs. Чтобы включить режим overlayfs, раскомментируйте строку USE_OVERLAYFS="yes"
в файле /etc/asd.conf
и затем перезапустите демон.
Снимки
Если случился сбой системы — скорее всего, "последняя целая" резервная копия целей синхронизации всё ещё в сохранности в файловой системе. При перезапуске asd (например, при перезагрузке системы) он выполняет проверку своего состояния. Если есть какие-то проблемы, asd создаст снимок "последней целой" резервной копии, прежде чем вернуть её на место. Обратите внимание, что, поскольку asd пытается уменьшить использование диска, он никогда не "копирует" содержимое каталога полностью, а просто использует жёсткие ссылки на предыдущие файлы. А во время шага rsync он создаёт новые файлы так, что предыдущие жёсткие ссылки остаются нетронутыми. Поэтому попытка изменить каталог в то время, когда asd пытается выполнить резервное копирование, может оставить каталог в повреждённом состоянии.
USE_BACKUPS
в значение "no"
в /etc/asd.conf
, если нужно.Найти снимок можно в том же каталоге, что и цель синхронизации, и он будет содержать отметку даты и времени, которая соответствует времени, когда был сделан снимок. Например, для цели синхронизации /foo/bar
это будет /foo/.bar-backup_asd-crashrecovery-20141221_070112.tar.zstd
— конечно, отметка времени у вас будет своя.
Чтобы восстановить данные из снимка:
-
Остановите службу
asd.service
. - Убедитесь, что нет каталогов, которые создаёт asd. Если есть, значит asd не был завершён корректно по другим причинам.
- Переместите "плохую" копию цели синхронизации куда-нибудь (не удаляйте ничего просто так).
- Распакуйте архив снимка в нужное место.
Пример для /foo/bar
:
$ cd /foo $ mv bar bar-bad $ tar -xvf .bar-backup_asd-crashrecovery-20141221_070112.tar.zstd
Удаление всех снимков с помощью режима чистки
Команда asd clean
удалит ВСЕ резервные копии. Запускайте этот режим, только если вы уверены, что собранные резервные копии больше не понадобятся.
Поддержка
Пишите в тему на форуме (англ.) для комментариев и прочих обсуждений.