Full system backup with tar (简体中文)
篇介绍如 tar 进行全系统备份。
使用 tar 进行备份具有压优点,有助于节省磁盘空间,且使用简单。此过程只需要以下几个步骤:
- 从 LiveCD 启动
- Change root 到 Linux 系统安装位置
- 装载其他(如有的话)分区/驱动器
- 添加排除对象
- 使用备份脚本进行备份
为最大限度减少停机时间,如果所有文件系统均驻留在 LVM 卷中,则可以使用LVM 快照在正在运行的系统上进行备份。
从 LiveCD 启动
许多 Linux 可启动 CD、U盘等能够 change root 到系统安装位置。虽然不是必须 change root 才能执行备份,但这提供了运行脚本的功能,而无需将其传输到临时驱动器或必须在文件系统中找到它。Live 媒体必须与已安装的 Linux 系统的架构相同(即 i686 或 x86_64)。
Change root
首先,应该在当前的 Linux 安装系统中设置一个脚本环境。如果您不知道这是什么,这表示您可以执行拥有的任意脚本,它们是常规程序一样。如果您的系统未设置好,请参阅这文档 了解如何操作。接下来要做的是 change root,要了解有关 change root 的更多信息,请参阅 此文档。Change root 时,不需要装载任何临时文件系统(/proc
、/sys
和 /dev
)。临时文件系统在系统启动时填充,实际上不需要备份它们,因为它们会干扰正常(和必要的)填充过程,该过程会在任何升级时更改。要 change root,需要装载当前的 Linux 安装的 root 分区。示例:
# mkdir /mnt/arch # mount /dev/your-partition-or-drive
使用 fdisk -l
查询分区和驱动器。然后 chroot:
# cd /mnt/arch # chroot . /bin/bash
arch-chroot
来 chroot 到目标系统 - 备份过程将会失败,因为这将尝试备份临时文件系统、所有系统内存和其他所有东西。请使用普通的 chroot
。此示例明显使用 bash,但也可以使用其他可用的 shell。现在,您应处于脚本环境中(前提是您在输入时有获取 ~/.bashrc
):
~/.bash_profile
# 如果使用 bash,获取本地 .bashrc source ~/.bashrc
装载其他分区
要使用的其他分区(如果有的话)需要装载到适当的位置(例如,如果有单独的 /home
分区)。
排除文件
tar 能够忽略指定的文件和目录。语法是每行一个定义。tar 还可以理解正则表达式(regexp)。示例:
# 排除旧的备份 /opt/backup/arch-full* # 排除临时文件 /tmp/* # 排除 pacman 的缓存 /var/cache/pacman/pkg/ ...
备份脚本
使用 tar 备份是一个直接过程。以下是一个进行备份的基本脚本,并提供了几项检查。需要修改此脚本以定义备份位置,并排除文件(如果有的话),然后在 chroot
和装载所有分区之后运行此脚本。
#!/bin/bash # 全系统备份 # 备份目标位置 backdest=/opt/backup # 备份名称标签 #PC=${HOSTNAME} pc=pavilion distro=arch type=full date=$(date "+%F") backupfile="$backdest/$distro-$type-$date.tar.gz" # 排除文件位置 prog=${0##*/} # 文件名中的程序名称 excdir="/home/<user>/.bin/root/backup" exclude_file="$excdir/$prog-exc.txt" # 检查 chroot 提示 echo -n "来自 LiveCD 的第一个 chroot。确定开始备份? (y/n):" read executeback # 检查排除文件是否存在 if [ ! -f $exclude_file ]; then echo -n "没有排除文件,是否继续? (y/n):" read continue if [ $continue == "n" ]; then exit; fi fi if [ $executeback = "y" ]; then # -p、--acls 和 --xattrs 存储所有权限、ACL 和扩展属性。如果没有这些属性,许多程序会停止工作! # 可以安全地移除详细信息标志(-v)。如果使用的终端速度较慢,这可以加快备份过程。 tar --exclude-from=$exclude_file --acls --xattrs -cpvf $backupfile / fi
恢复
要恢复以前的备份,需要装载所有相关分区更改当前工作目录为 root,然后执行
$ tar --acls --xattrs -xpf backupfile
backupfile 替换为备份存档文件。必须手动删除备份以来添加的所有文件。最简单的方法是重新创建文件系统。
并行压缩备份
要使用并行压缩(SMP),可以使用 pbzip2(Parallel bzip2):
# tar -cvf /path/to/chosen/directory/etc-backup.tar.bz2 -I pbzip2 /etc
将 etc-backup.tar.bz2
文件存储到一个或多个脱机媒体上,如U盘、外置硬盘或光盘。有时,需要通过比较原始文件和目录与其备份文件来验证备份的完整性。可以维护备份文件的 hash 列表,以使比较过程更快速。
可以通过在临时工作目录中提取 etc-backup.tar.bz2
文件,并根据需要复制单个文件和目录来恢复损坏的 /etc
文件。要恢复整个 /etc
目录及其所有内容,可以以 root 身份执行以下命令:
# tar -xvf etc-backup.tar.bz2 -C /