Шпаргалка: Duplicacy

Задача: создать [шифрованный] дедуплицированный бэкап и уметь им управлять.

Решение: использовать Duplicacy.

Скачивание

wget -O /usr/local/bin/duplicacy https://github.com/gilbertchen/duplicacy/releases/download/v3.1.0/duplicacy_linux_x64_3.1.0
chmod +x /usr/local/bin/duplicacy

Инициализация репозитория

duplicacy init [command options] <snapshot id> <storage url>

Я сравниваю это с git:

  • storage — git-учётка со своими реквизитами для входа по типу key, password (me@remote)
  • repository (snapshot id) — очевидно, репозиторий (linux-laptop)
  • storage-name — название ветки репо (default)

Создать бэкап локальной папки /home/ с удалённым размещением по SSH:

duplicacy init \                    # инициализировать репозиторий
    -e \                            # зашифровать бэкапы
    -key /home/me/.ssh/id_rsa \     # RSA-ключ для шифрования
    -pref-dir /home/me/.duplicacy \ # хранить папку .duplicacy не в репо
    -storage-name default \         # ~= название ветки репозитория
    -repository /home/ \            # ~= код репозитория
    -erasure-coding 5:2 \           # включается, если хранилище может посыпаться
    linux-laptop \                  # ~= название самого репозитория
    sftp://me@remote/backups/home/  # URL-адрес хранилища

Инициализировать репо для просмотра файлов на локальной копии, используя хак (Windows-only):

cd C:\BAKAps\                        # здесь расположены бэкапы
md repository                        # создаём отдельную папку-репо
cd repository
duplicacy init \
    -pref-dir ..\.duplicacy \
    -e laptop samba://../            # используем хак для относительных путей

Исключения

Указываются в файле .duplicacy/filters.

Исключения для Linux относительно /:

-swapfile
-boot/
-dev/
-proc/
-run/
-sys/

e:var/spool/.*$
e:.*\.sock$
e:.*/\.cache/.*$
e:.*/cache/.*$
e:.*/\.npm/.*$
e:.*/node_modules/.*$
e:.*/\.opam/.*$

Исключения для Windows относительно корня диска:

hiberfil.sys
pagefile.sys
swapfile.sys
e:.*\.tmp$
e:.*/cache/.*$
e:.*/shader-cache/.*$
e:.*/temp/.*$
e:.*/datareporting/.*$
e:.*/crashes/.*$
e:.*/minidumps/.*$
e:.*/gmp\-[a-z0-9]+/.*$

Реквизиты для доступа

Можно указать SSH-ключ, если не был задан при инициализации:

duplicacy set -key ssh_key_file -value ~/.ssh/id_rsa

Если хранилище зашифровано, можно указать пароль (хранится в открытом виде в папке .duplicacy/preferences!!1):

duplicacy set -key password -value <password>

Точно уверен, что готов вводить пароль в терминал в открытом виде? А вот китаец готов.

Так что редактируй файл вместо команды выше. А ещё лучше — используй переменные окружения! (подробнее описано у китайца)

Восстановление данных

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

duplicacy restore -r <revision number> -overwrite -delete

Просто восстановить отдельные файлы по шаблону:

duplicacy restore -r <revision number> -- "*.sqlite"