在计算机使用过程中,我们经常面临着硬件故障、软件错误或人为操作失误等潜在风险,这些都可能导致系统崩溃或数据丢失。因此,Debian备份和恢复功能可以让我们在遇到不测时,迅速恢复系统运行和重要数据,最小化潜在的损失。
保持备份系统简洁并且经常备份系统,有备份数据比采用的备份方法的技术先进要重要的多。
一、备份和恢复策略
有3个关键的因素决定实际的备份和恢复策略:
1、知道要备份和恢复什么
- 自己创建的数据文件:在 “~/” 下的数据;
- 使用的应用程序创建的数据文件:在 “/var/” 下的数据(除了 “/var/cache/”,”/var/run/” 和 “/var/tmp/”);
- 系统配置文件:在 “/etc/” 下的数据;
- 本地程序:在 “/usr/local/” 或 “/opt/” 下的数据;
- 系统安装信息:关键步骤 (分区,…) 的纯文本备忘录;
- 验证数据结果:通过实验性的恢复操作来预先验证;
- 用户进程的 Cron 工作,文件在 “/var/spool/cron/crontabs” 目录,并且重启 cron(8);
- 用户进程的 Systemd 计时器工作:文件在 “~/.config/systemd/user” 目录;
- 用户进程的自动启动工作:文件在 “~/.config/autostart” 目录。
2、知道怎样去备份和恢复
- 安全的数据存储:保护其免于覆盖和系统故障;
- 经常备份:有计划的备份;
- 冗余备份:数据镜像;
- 傻瓜式操作:单个简单命令备份。
3、评估涉及的风险和成本
- 数据丢失的风险;
- 数据至少是应该在不同的磁盘分区上,最好是在不同的磁盘和机器上,来承受文件系统发生的损坏。重要数据最好存储在一个只读文件系统上;
- 数据非法访问的风险;
敏感的身份数据,比如 “/etc/ssh/ssh_host_*_key”, “~/.gnupg/*”, “~/.ssh/*”, “~/.local/share/keyrings/*”, “/etc/passwd”, “/etc/shadow”, “popularity-contest.conf”, “/etc/ppp/pap-secrets”, and “/etc/exim4/passwd.client” 应当使用加密备份。即使在信任的系统上,也不能够硬编码系统登录密码或者加密密码到任何脚本里面。
- 数据丢失的方式及其可能性;
- 硬件(特别是硬盘)将会损坏;
- 文件系统可能会损坏,里面的数据可能被丢失;
- 对违规安全访问而言,远程存储系统不能够被信任;
- 弱的密码保护能够被轻松的破解;
- 文件权限系统可以被破解;
- 备份所需的资源:人力,硬件,软件,…
- 使用 cron 任务或者 systemd 计时器任务来自动化调度备份工作。
注意:
- 能够用 “debconf-set-selections debconf-selections” 命令恢复 debconf 配置数据,可以用 “dpkg –set-selection <dpkg-selections.list” 命令恢复 dpkg 筛选数据;
- 除非知道自己做的是什么,否则不要备份 /proc, /sys, /tmp, 和 /run 目录下的伪文件系统;
- 当备份数据的时候,可能希望停止一些应用程序的守护进程例如 MTA。
二、实用备份套件
以下是 Debian 系统上值得注意的实用备份程序套件的列表。
实用备份程序套件列表:
软件包 | 流行度 | 大小 | 说明 |
bacula-common | V:9, I:10 | 2119 | Bacula: 网络数据备份,恢复和核查-常见的支持文件 |
bacula-client | V:0, I:2 | 154 | Bacula: 网络数据备份,恢复和核查-客户端元软件包 |
bacula-console | V:0, I:3 | 104 | Bacula: 网络数据备份,恢复和核查-文本终端 |
bacula-server | I:0 | 154 | Bacula: 网络数据备份,恢复和核查-服务器端元软件包 |
amanda-common | V:0, I:2 | 9897 | Amanda: 马里兰大学开发的高级自动化网络磁盘归档器(库) |
amanda-client | V:0, I:2 | 1092 | Amanda: 马里兰大学开发的高级自动化网络磁盘归档器(客户端) |
amanda-server | V:0, I:0 | 1077 | Amanda: 马里兰大学开发的高级自动化网络磁盘归档器(服务器端) |
backuppc | V:2, I:2 | 3178 | BackupPC 是用于备份 PC 机数据(基于磁盘)的高性能的企业级工具 |
duplicity | V:28, I:48 | 1973 | (远程) 增量备份 |
deja-dup | V:26, I:41 | 4992 | duplicity 的 GUI(图形用户界面)前端 |
borgbackup | V:11, I:20 | 3301 | (远程) 去重备份 |
borgmatic | V:2, I:3 | 509 | borgbackup 备份软件的辅助软件 |
rdiff-backup | V:4, I:10 | 1203 | (远程) 增量备份 |
restic | V:2, I:6 | 21373 | (远程) 增量备份 |
backupninja | V:2, I:3 | 360 | 轻量的可扩展的 meta-backup 系统 |
flexbackup | V:0, I:0 | 243 | (远程) 增量备份 |
slbackup | V:0, I:0 | 151 | (远程) 增量备份 |
backup-manager | V:0, I:1 | 566 | 命令行备份工具 |
backup2l | V:0, I:0 | 115 | 用于可挂载媒介 (基于磁盘的) 的低维护的备份/恢复工具 |
备份工具有各自的专用的用途。
- Mondo Rescue 是一个备份系统,它能够方便的从备份 CD/DVD 等设备中快速恢复整个系统,而不需要经过常规的系统安装过程;
- Bacula,Amanda 和 BackupPC 是全功能的备份实用套件,主要用于联网的定期备份;
- Duplicity 和 Borg 是简单的备份工具用于典型的工作站。
三、备份技巧
对于一个个人工作站,为服务器环境设计的全功能备份套件工具也行不是最合适的。与此同时,已有的用于工作站的备份工具有一些不足。
这里有一些技巧让备份更加容易,只需用户做最小的工作。这些技巧可以同任意备份工具一起使用。
出于演示的目的,让我们假设基本用户和组名为 penguin,创建一个备份和快照脚本例子”/usr/local/bin/bkss.sh”:
#!/bin/sh -e SRC="$1" # source data path DSTFS="$2" # backup destination filesystem path DSTSV="$3" # backup destination subvolume name DSTSS="${DSTFS}/${DSTSV}-snapshot" # snapshot destination path if [ "$(stat -f -c %T "$DSTFS")" != "btrfs" ]; then echo "E: $DESTFS needs to be formatted to btrfs" >&2 ; exit 1 fi MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...") if [ ! -d "$DSTFS/$DSTSV" ]; then btrfs subvolume create "$DSTFS/$DSTSV" mkdir -p "$DSTSS" fi rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}" btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min) notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!" 这里,只使用基本工具 rsync(1)来帮助备份,存储空间使用 Btrfs 来高效利用。
1、GUI(图形用户界面)备份
这里是一个创建单击 GUI(图形用户界面)图标备份的例子。
(1)准备一个 USB 存储设备用来备份。
- 格式化 USB 存储设备为一个分区,使用 btrfs 文件系统,卷标名为”BKUP”;
- 把这个插入系统。桌面系统将自动挂载它到 “/media/penguin/BKUP”;
- 执行”sudo chown penguin:penguin /media/penguin/BKUP”,让它可以由用户写。
(2)创建如下的”~/.local/share/applications/BKUP.desktop”文件:
[Desktop Entry] Name=bkss Comment=Backup and snapshot of ~/Documents Exec=/usr/local/bin/bkss.sh /home/penguin/Documents /media/penguin/BKUP Documents Type=Application
对于每一次图标单击,数据从”~/Documents”备份到 USB 存储设备,并创建了一个只读快照。
2、挂载事件触发的备份
这里是一个由挂载事件触发的自动备份例子。
创建一个如下的 systemd 服务单元文件”~/.config/systemd/user/back-BKUP.service”:
[Unit] Description=USB Disk backup Requires=media-%u-BKUP.mount After=media-%u-BKUP.mount [Service] ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents StandardOutput=append:%h/.cache/systemd-snap.log StandardError=append:%h/.cache/systemd-snap.log [Install] WantedBy=media-%u-BKUP.mount
用下面的方式启用这个 systemd 单元配置:
$ systemctl --user enable bkup-BKUP.service
对于每一次挂载事件,数据从”~/Documents”备份到 USB 存储设备,并创建了一个只读快照。
这里,当前 systemd 在内存中的 systemd 挂载单元的名字,用户使用 “systemctl –user list-units –type=mount” 来调用服务管理器来查询。
3、时间事件触发的备份
这里是一个由时间事件触发的自动备份例子。
创建一个如下的 systemd 时间单元文件”~/.config/systemd/user/snap-Documents.timer”:
[Unit] Description=Run btrfs subvolume snapshot on timer Documentation=man:btrfs(1) [Timer] OnStartupSec=30 OnUnitInactiveSec=900 [Install] WantedBy=timers.target
创建一个如下的 systemd 服务单元文件”~/.config/systemd/user/snap-Documents.service”:
[Unit] Description=Run btrfs subvolume snapshot Documentation=man:btrfs(1) [Service] Type=oneshot Nice=15 ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents IOSchedulingClass=idle CPUSchedulingPolicy=idle StandardOutput=append:%h/.cache/systemd-snap.log StandardError=append:%h/.cache/systemd-snap.log
用下面的方式启用这个 systemd 单元配置:
$ systemctl --user enable snap-Documents.timer
对于每一次时间事件,数据从”~/Documents”备份到 USB 存储设备,并创建了一个只读快照。
这里,当前 systemd 在内存中的 systemd 用户时间单元的名字,使用 “systemctl –user list-units –type=timer” 来调用服务管理器来查询。
对于现在的桌面系统,这个 systemd 方案,比起传统的 Unix at(1)、cron(8) 或 anacron 方式,能够提供更精致的细粒度控制。