Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Duplicity. Дата последней синхронизации: 6 июля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Программы синхронизации и резервного копирования

Duplicity — это программа сетевого резервного копирования.

Она может сохранять снимки каталогов и файлов в удаленный зашифрованный GnuPG tar-файл, который выступает в качестве хранилища резервных копий. Соединение с удаленным хранилищем резервных копий может осуществляться по любому из следующих протоколов: rsync, ftp, HSI, WebDAV, Tahoe-LAFS или Amazon S3.

Резервные копии являются гранулярно инкрементными, то есть сохраняются только изменения в файлах (с момента последнего снимка).

## Установка

Установите пакет duplicity.

### Фронтенды

- Duply — Маленький фронтенд для Duplicity. Она управляет настройками заданий резервного копирования в профилях и позволяет пакетно выполнять команды.

  https://duply.net/Main_Page || duplyAUR

- Deja Dup — Простой инструмент резервного копирования, который скрывает сложность резервного копирования правильным способом и использует duplicity в качестве бэкенда.

  https://wiki.gnome.org/Apps/DejaDup || deja-dup

## Базовое использование

### Выполнение резервного копирования

Для создания резервной копии локальной папки /home/me в удаленном месте /usr/backup на хосте other.host по протоколу scp/ssh используйте:

    $ duplicity /home/me scp://uid@other.host//usr/backup

При первом выполнении этой команды создается полная резервная копия. Повторное выполнение той же команды вызывает инкрементное резервное копирование в существующее хранилище резервных копий.

Дополнительные параметры командной строки позволяют:

- включать или исключать определенные файлы и каталоги из резервного копирования (с помощью шаблонов оболочки или регулярных выражений)
- точно настраивать шифрование и подпись резервных копий

### Восстановление файлов из резервной копии

Чтобы восстановить локальную папку /home/me до состояния последнего снимка, сохраненного в удаленном хранилище /usr/backup на хосте other.host, выполните следующие действия:

    $ duplicity scp://uid@other.host//usr/backup /home/me

Обратите внимание на обратный порядок аргументов по сравнению с приведенной выше командой backup. Аргумент URL всегда рассматривается как хранилище резервных копий, а аргумент local path - как каталог для синхронизации с резервной копией. (Локальное хранилище резервных копий должно быть явно указано с помощью префикса протокола file://!)

Существуют дополнительные опции командной строки, позволяющие:

- восстанавливать конкретный файл вместо всего хранилища.
- восстановить файл(ы) до состояния, в котором они находились на определенную дату, а не до самого последнего доступного снимка

### Проверка и обслуживание хранилища

Существуют некоторые дополнительные опции командной строки для сравнения состояния хранилища с состоянием локальных файлов, а также для удаления старых снимков, чтобы хранить только фиксированное количество снимков или только те, которые новее заданной даты.

Подробности см. на странице man.

### Пример скрипта резервного копирования

    #!/bin/sh
    ## Remote backup script. Requires duplicity and gpg-agent with the keys and passphrases loaded as root.
    ## Uses separate encryption and signing keys
    ## Usage:  'backup_remote.sh'

    enc_key=44D79E41
    sign_key=F5C978E3
    src="/mnt/backup/"
    dest="scp://destination.com//backups/homeserver"

    # Keychain is used to source the ssh-agent keys when running from a cron job
    type -P keychain &>/dev/null || { echo "I require keychain but it's not installed.  Aborting." >&2; exit 1; }
    eval `keychain --eval web_rsa` || exit 1
    ## Note: can't use keychain for gpg-agent because it doesn't currently (2.7.1) read in all the keys correctly.
    ## Gpg will ask for a passphrase twice for each key...once for encryption/decryption and once for signing.
    ## This makes unattended backups impossible, especially when trying to resume an interrupted backup.
    if [ -f "${HOME}/.gnupg/gpg-agent-info" ]; then
          . "${HOME}/.gnupg/gpg-agent-info"
          export GPG_AGENT_INFO
    fi

    duplicity --use-agent \
             --verbosity notice \
             --encrypt-key "$enc_key" \
             --sign-key "$sign_key" \
             --full-if-older-than 60D \
             --num-retries 3 \
             --asynchronous-upload \
             --volsize 100 \
             --archive-dir /root/.cache/duplicity \
             --log-file /var/log/duplicity.log \
             --exclude /mnt/backup/fsarchiver \
             --exclude '**rdiff-backup-data' \
             "$src" "$dest"

Примечание: В текущей версии pinentry (0.8.1-3) существует проблема, которая не позволяет вводить парольную фразу для gpg-агента root при входе в систему от имени root с помощью su - или sudo. Если вы обращаетесь к удаленному серверу, где прямой вход по ssh с правами root запрещен (или нежелателен), то вам нужно либо пропатчить pinentry, либо выполнить `chown root `tty`` перед запуском pinentry. Это не является проблемой при запуске gpg-agent от имени пользователя, не являющегося root.
Примечание: Если вы хотите запускать gpg-agent при входе в root и затем кэшировать парольные фразы для gpg-agent по своему усмотрению, вы можете добавить эти функции в /root/.bashrc:

    function gpg_start {
           gnupginf="${HOME}/.gnupg/gpg-agent-info"
           if pgrep -u "${USER}" gpg-agent >/dev/null 2>&1; then
               eval "$(cat $gnupginf)"
               eval "$(cut -d= -f1 < $gnupginf | xargs echo export)"
           else
               eval "$(gpg-agent -s --daemon --write-env-file $gnupginf)"
           fi
    }
    function keys {
           touch test-gpg.txt
           touch test-gpg.txt1
           gpg -r 'Duplicity Encryption Key' -e test-gpg.txt
           gpg -r 'Duplicity Signature Key' -e test-gpg.txt1
           gpg -u <signing key> --detach-sign test-gpg.txt
           gpg -u <encryption key> --detach-sign test-gpg.txt1
           gpg -d test-gpg.txt.gpg
           gpg -d test-gpg.txt1.gpg
           rm test-gpg.txt*
    }
    gpg_start

## Решение проблем

Если вы получаете ошибки gpg про "inappropriate ioctl for device", это, скорее всего, связано с изменениями в поведении агента gpg с версии gpg 2.1 и выше. Смотрите эту тему для получения дополнительной информации. Вообще говоря, необходимо явно разрешить программам предоставлять парольную фразу агенту gpg вместо того, чтобы запрашивать ее у пользователя.

Шаги по устранению этой проблемы описаны в GnuPG (Русский)#Unattended passphrase.

## Смотрите также

- Домашняя страница Duplicity
- Wikipedia:Duplicity (software)
- Домашняя страница Déjà Dup

Category:

- Backup (Русский)