当前位置:首页 > 站长知识 > 正文内容

Debian备份和恢复方法详解

2024-08-27站长知识33

在计算机使用过程中,我们经常面临着硬件故障、软件错误或人为操作失误等潜在风险,这些都可能导致系统崩溃或数据丢失。因此,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-commonV:9, I:102119Bacula: 网络数据备份,恢复和核查-常见的支持文件
bacula-clientV:0, I:2154Bacula: 网络数据备份,恢复和核查-客户端元软件包
bacula-consoleV:0, I:3104Bacula: 网络数据备份,恢复和核查-文本终端
bacula-serverI:0154Bacula: 网络数据备份,恢复和核查-服务器端元软件包
amanda-commonV:0, I:29897Amanda: 马里兰大学开发的高级自动化网络磁盘归档器(库)
amanda-clientV:0, I:21092Amanda: 马里兰大学开发的高级自动化网络磁盘归档器(客户端)
amanda-serverV:0, I:01077Amanda: 马里兰大学开发的高级自动化网络磁盘归档器(服务器端)
backuppcV:2, I:23178BackupPC 是用于备份 PC 机数据(基于磁盘)的高性能的企业级工具
duplicityV:28, I:481973(远程) 增量备份
deja-dupV:26, I:414992duplicity 的 GUI(图形用户界面)前端
borgbackupV:11, I:203301(远程) 去重备份
borgmaticV:2, I:3509borgbackup 备份软件的辅助软件
rdiff-backupV:4, I:101203(远程) 增量备份
resticV:2, I:621373(远程) 增量备份
backupninjaV:2, I:3360轻量的可扩展的 meta-backup 系统
flexbackupV:0, I:0243(远程) 增量备份
slbackupV:0, I:0151(远程) 增量备份
backup-managerV:0, I:1566命令行备份工具
backup2lV:0, I:0115用于可挂载媒介 (基于磁盘的) 的低维护的备份/恢复工具

备份工具有各自的专用的用途。

  • 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 方式,能够提供更精致的细粒度控制。