Duplicity (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Duplicity
. Дата последней синхронизации: 11 марта 2026. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Программы синхронизации и резервного копирования
GnuPG (Русский)
OpenPGP (Русский)
Duplicity
— это программа сетевого резервного копирования.
Она может сохранять снимки каталогов и файлов в удалённый зашифрованный
OpenPGP
tar-файл, который выступает в качестве хранилища резервных копий.
Соединение с удалённым хранилищем резервных копий может осуществляться по любому из следующих протоколов: rsync, ftp, HSI, WebDAV, Tahoe-LAFS или Amazon S3.
Резервные копии являются гранулярно инкрементными, то есть сохраняются только изменения в файлах (с момента последнего снимка).
Установка
Установите
пакет
duplicity
.
Фронтенды
Duply
— Маленький фронтенд для Duplicity. Она управляет настройками заданий резервного копирования в профилях и позволяет пакетно выполнять команды.
https://duply.net/Main_Page
||
duply
AUR
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://
!)
Существуют дополнительные опции командной строки, позволяющие:
восстанавливать конкретный файл вместо всего хранилища
восстановить файл(ы) до состояния, в котором они находились на определённую дату, а не до самого последнего доступного снимка
Проверка и обслуживание хранилища
Существуют некоторые дополнительные опции командной строки для сравнения состояния хранилища с состоянием локальных файлов, а также для удаления старых снимков, чтобы хранить только фиксированное количество снимков или только те, которые новее заданной даты.
Смотрите
duplicity(1)
для более подробной информации.
Пример скрипта резервного копирования
#!/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 (Русский)#Автоматический ввод пароля
.
Смотрите также
Домашняя страница Duplicity
Wikipedia:Duplicity (software)
Домашняя страница Déjà Dup