Debian教程

Debian备份和恢复

在计算机使用过程中,我们经常面临着硬件故障、软件错误或人为操作失误等潜在风险,这些都可能导致系统崩溃或数据丢失。因此,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 方式,能够提供更精致的细粒度控制。

广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录