Read Write Compute

用 duplicity 备份本地数据

六月 29, 2026

软件安装

duplicity 官网:https://duplicity.gitlab.io/

Fedora:

sudo dnf install -y duplicity # 直接确认安装

验证既有备份

挂载备份位置:

sudo sudo mount -t cifs //<backup-server-ip>/NetBackup /mnt/backup -o user=<username>,pass=<password>,domain=WORKGROUP,ro

验证 write 目录的备份状况:

duplicity verify file:///mnt/backup/<hostname>/write ~/write

duplicity 会需要你输入用来给备份加密的 GPG key 的 passphrase。

建立和更新备份

~/.local/bin/backup.sh

#!/usr/bin/env bash
# Exit immediately if a command exits with a non-zero status
set -e
echo "Starting Duplicity Backup Script..."
export BACKUP_SRC="$HOME/.config/emacs/todo $HOME/pim $HOME/dev $HOME/write"
export BACKUP_DEST="rsync://sanxi@192.168.31.163//volume1/NetBackup/TB14P"
export PASSPHRASE="your_GnuPG_passphrase"
export BACKUP_OPTIONS="--full-if-older-than 1M \
  --allow-source-mismatch \
  --use-agent \
  --encrypt-key E25F623A"

for s in $BACKUP_SRC; do
# you may need to create dirs $BACKUP_DEST/$(basename $s) first
    echo "Backing up $s"
    duplicity backup $BACKUP_OPTIONS "$s" $BACKUP_DEST/$(basename "$s")
done
duplicity --use-agent remove-older-than 12M "$BACKUP_DEST"

然后用 crontab -e 设置定时运行:

10 * * * * /home/user/.local/bin/backup.sh

当上一次输入 GnuPG 口令的时间超过预设值(默认10分钟),就需要重新输入。在上面配置的条件下,就是每次备份都要输入一次口令,比较麻烦。我修改了 gpg-agent.conf 中的 default-cache-ttl 这个设置,将其设为 86400,这样每天只需要输入一次口令。

Caveat

duplicity 默认用 gpg key 加密,所以对应的 gpg 私钥还得另外备份好,不然就没法查看和恢复备份了。