Anything-sync-daemon (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Anything-sync-daemon. Дата последней синхронизации: 14 ноября 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

anything-sync-daemon (asd) — небольшой псевдо-демон, предназначенный для переноса указанных пользователем каталогов (которые здесь и далее называются целями синхронизации) в tmpfs (ОЗУ) и их периодической синхронизации с постоянным хранилищем (HDD/SSD). Это достигается с помощью bind-монтирования и использования rsync для поддержания синхронизации между копией в tmpfs и резервными копиями в постоянном хранилище. Кроме того, в asd реализованы некоторые функции восстановления после сбоев.

Цели и преимущества asd:

  1. Простота в использовании
  2. Уменьшение износа физических дисков
  3. Улучшение скорости работы

Цели синхронизации переносятся с помощью asd в tmpfs (ОЗУ), соответственно связанные с ними операции ввода-вывода перенаправляются в оперативную память. Таким образом, уменьшается износ физического диска, повышается отказоустойчивость и скорость работы: время доступа к оперативной памяти составляет порядка наносекунд, в то время как время доступа к обычному жёсткому диску примерно в 1,000,000 раз выше и составляет порядка миллисекунд.

Важно: Если требуется синхронизация профилей браузера, то лучше НЕ использовать asd для этой цели. Вместо этого используйте Profile-sync-daemon, который имеет встроенные проверки для уникальных ситуаций, характерных для запуска профиля браузера в tmpfs. Anything-sync-daemon не имеет таких проверок; при определённых обстоятельствах данные профиля браузера могут быть потеряны. Вас предупредили.

Установка

Установите пакет anything-sync-daemon.

Настройка

Настройка asd выполняется через файл /etc/asd.conf, который предоставляется пакетом.

  • Как минимум, определите цели синхронизации, которыми будет управлять asd, в массиве WHATTOSYNC. Синтаксис приведён ниже.
  • Опционально раскомментируйте и укажите расположение tmpfs в переменной VOLATILE.
  • Опционально включите использование overlayfs для улучшения скорости синхронизации и уменьшения количества необходимой памяти. Обратите внимание, что эта опция требует, чтобы ваше ядро было настроено на использование модуля ядра 'overlay'. Смотрите раздел #Режим overlayfs ниже, чтобы узнать подробности.
Примечание: Значение параметра VOLATILE, используемое по умолчанию (/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 в различных дистрибутивах. В версиях 22 и ниже есть модуль под названием 'overlayfs', а в более новых версиях (23 и выше) есть модуль под названием 'overlay' — обратите внимание на отсутствие 'fs' в новой версии. Asd автоматически обнаружит 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 удалит ВСЕ резервные копии. Запускайте этот режим, только если вы уверены, что собранные резервные копии больше не понадобятся.

Примечание: Если владельцем цели синхронизации является root или другой пользователь и если выполнить эту команду для очистки, то она выдаст ошибки, связанные с правами доступа к целям синхронизации. Во избежание ошибок выполняйте эту команду через sudo или от имени root.

Поддержка

Пишите в тему на форуме (англ.) для комментариев и прочих обсуждений.