Ubuntu备份与恢复封面

引言:从 Windows 到 Linux 的思维转变

在使用 Ubuntu 之前,相信很多人和我一样,都有过漫长的 Windows 使用经历。如果你曾经备份过 Windows 系统,那么那段记忆可能让你至今难忘:首先需要找到一个备份工具(通常都是闭源的商业软件),然后重启电脑,进入一个专门的备份环境,在 DOS 般的界面中等待漫长的备份过程。Norton Ghost 是那个年代备份 Windows 系统时最常用的工具,而每次备份都像是一场赌博 —— 你永远不知道备份完成后能不能成功恢复。

在备份 Windows 系统的时候,你可能也曾想过:我能不能直接把整个 C 盘打包成一个 ZIP 文件呢?在 Windows 下,这几乎是不可能的。因为 Windows 中有大量文件在运行时是被系统锁定的,不允许拷贝或覆盖。因此你需要专门的备份工具,以特殊的方式处理这些文件。

然而,当你踏入 Linux 的世界后,一切变得不同了。Linux 以其开放和透明的文件系统设计,让系统备份变得出奇的简单和直接。这篇笔记记录了我在 Ubuntu 上使用 TAR 命令进行系统备份和恢复的完整过程,以及在这个过程中获得的一些深刻体会。


为什么 Linux 备份比 Windows 简单?

Windows 的困境

Windows 的文件系统(NTFS)在运行时会对大量系统文件施加独占锁,阻止其他进程访问。这意味着你无法在系统运行时直接复制这些文件。Ghost 等备份工具通过在底层直接读取磁盘扇区来绕过文件系统的限制,但这需要专门的软件支持,且不同版本对文件系统的支持程度参差不齐。

Linux 的优势

Linux 的文件系统(如 Ext3、Ext4)在设计上就没有这种限制。Linux 不会限制 root 用户对任何文件的访问权限 —— 只要你有 root 权限,你可以读取、复制、压缩分区上的任何文件。这意味着我们可以使用最基础的 TAR 命令来完成整个系统的备份,无需任何第三方工具。

事实上,Ghost 这类备份工具对于 Linux 文件系统的支持很糟糕。一些 Ghost 版本只能完善地支持 Ext2 文件系统,如果你用它来备份 Ext3 或 Ext4 文件系统,很可能会丢失一些重要的数据(如扩展属性和日志信息)。

Windows与Linux备份方式对比


第一部分:备份系统

基本思路

备份 Ubuntu 系统的核心思路非常朴素:就像你备份或压缩其他东西一样,使用 TAR 命令。 把整个文件系统打包成一个压缩文件,就这么简单。

完整备份命令

首先切换到 root 用户:

1
sudo su

然后进入文件系统的根目录:

1
cd /

下面是完整的备份命令:

1
2
3
4
5
6
7
tar cvpzf backup.tgz \
--exclude=/proc \
--exclude=/lost+found \
--exclude=/backup.tgz \
--exclude=/mnt \
--exclude=/sys \
/

命令详细解读

让我们逐段拆解这个命令的含义:

参数 含义
tar 备份所使用的程序,Tape ARchive 的缩写
c Create:创建新的归档文件
v Verbose:显示详细的处理过程
p Preserve:保持权限,保留所有文件和目录的原始权限
z 使用 gZip 压缩来减小文件体积
f File:指定归档文件名
backup.tgz 生成的归档文件名
/ 要备份的目录,这里代表整个文件系统

为什么需要排除这些目录?

在归档文件名 backup.tgz 和要备份的目录 / 之间,我们使用 --exclude 参数排除了以下目录:

排除的目录 原因
/proc 虚拟文件系统,包含运行时进程信息,不需要也不应该被备份
/lost+found 文件系统修复时使用的目录,通常为空
/backup.tgz 备份文件本身必须排除,否则会陷入无限递归
/mnt 挂载点目录,排除它可避免备份挂载的外部设备
/sys 虚拟文件系统,包含内核和硬件信息,不需要备份

额外注意事项

关于 /dev 目录:有人可能建议你也把 /dev 目录排除在外。但我不建议这样做。/dev 包含了一些重要的设备节点信息,排除它可能会导致恢复后某些设备无法正常工作。

关于 /media 目录:在执行备份命令之前,请确认 /media 上没有挂载任何东西(如光盘、移动硬盘)。如果有挂载的外部设备,必须把 /media 也加入排除列表,否则会将外部设备的内容也一并备份。

1
2
# 检查是否有挂载的外部设备
mount | grep /media

关于压缩方式的选择:上面的命令使用 gzip 压缩(z 参数)。你也可以使用 Bzip2 压缩(j 参数),它的压缩率更高,但速度会慢一些:

1
2
3
4
5
6
7
tar cvpjf backup.tar.bz2 \
--exclude=/proc \
--exclude=/lost+found \
--exclude=/backup.tar.bz2 \
--exclude=/mnt \
--exclude=/sys \
/
压缩方式 优点 缺点 适用场景
gzip (.tgz) 速度快 压缩率一般 时间敏感的场景
bzip2 (.tar.bz2) 压缩率高 速度慢 存储空间敏感的场景

执行备份

在执行备份命令之前,请再次确认你输入的命令是否正确。备份过程可能需要一段不短的时间,具体取决于文件系统的大小和磁盘 I/O 性能。

1
2
# 执行备份
tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

备份完成后,在文件系统的根目录将生成一个名为 backup.tgz 的文件,它的体积可能非常大。建议将它拷贝到外部存储设备上,比如 DVD、移动硬盘或网络存储。

常见提示信息

在备份命令结束时,你可能会看到以下提示:

1
tar: Error exit delayed from previous errors

在大多数情况下,这个提示是因为 TAR 在备份过程中遇到了一些无法访问的虚拟文件(如 /proc 下的某些动态文件),可以安全地忽略它。

Ubuntu系统备份执行过程


第二部分:恢复系统

警告:请务必小心!

在进行系统恢复操作时一定要小心!如果你不清楚自己在做什么,有可能会丢失重要数据。请务必谨慎操作,建议在恢复之前先备份重要个人文件。

恢复步骤

切换到 root 用户,并把备份文件 backup.tgz 拷贝到分区的根目录下:

1
2
3
sudo su
cp /path/to/backup.tgz /
cd /

Linux 的一个美妙之处:你可以在一个正在运行的系统中恢复系统,而不需要用启动光盘来专门引导。当然,如果你的系统已经崩溃无法启动了,你可以用 Live CD 来启动,效果是完全一样的。

执行恢复命令

如果备份文件使用的是 gzip 压缩:

1
tar xvpfz backup.tgz -C /

如果备份文件使用的是 bzip2 压缩:

1
tar xvpfj backup.tar.bz2 -C /

恢复命令解读

参数 含义
x eXtract:从归档文件中提取文件
v Verbose:显示详细过程
p Preserve permissions:恢复原始权限
f File:指定归档文件名
z 使用 gZip 解压
j 使用 Bzip2 解压
-C / 指定解压到根目录

重要:上面的命令会用备份文件中的内容覆盖分区上的所有现有文件。这是一个破坏性操作,请务必确认你已经做好了必要的准备。

恢复后的收尾工作

恢复命令结束后,你的工作还没有完成!必须重新创建那些在备份时被排除在外的目录:

1
2
3
4
5
mkdir /proc
mkdir /lost+found
mkdir /mnt
mkdir /sys
# 以及其他被排除的目录

如果不创建这些目录,系统在重启后可能会出现各种异常。因为这些目录是 Linux 系统正常运行所必需的挂载点和接口。

重启验证

当你重启电脑后,你会发现一切东西都恢复到你创建备份时的样子了!所有的配置文件、已安装的软件、用户数据,全部回到了备份时的状态。


实战建议与最佳实践

1. 定期备份

建议养成定期备份的习惯。可以根据系统变更的频率来制定备份策略:

  • 重大变更后备份:如升级系统内核、安装重要软件后
  • 定期备份:如每周或每月一次
  • 关键数据单独备份:个人文档、数据库数据等建议单独备份

2. 增量备份

对于频繁变更的系统,可以考虑使用 TAR 的增量备份功能:

1
2
3
4
5
# 完整备份
tar cvpzf backup-full.tgz --exclude=/proc --exclude=/sys /

# 增量备份(只备份自上次完整备份后变更的文件)
tar cvpzf backup-incremental.tgz --newer-mtime="2023-01-01" --exclude=/proc --exclude=/sys /

3. 备份验证

定期验证备份文件的完整性:

1
2
3
4
5
6
# 查看备份文件内容(不解压)
tar tzf backup.tgz | head -20

# 测试备份文件的完整性
tar tzf backup.tgz > /dev/null
echo $? # 返回 0 表示正常

4. 异地存储

不要把所有鸡蛋放在一个篮子里。将备份文件存储在多个位置:

  • 本地移动硬盘
  • 网络存储(NAS)
  • 云端存储

备份文件存储策略


与现代备份工具的比较

虽然 TAR 备份简单直接,但在现代 Linux 环境中,也有更多专业化的备份工具可供选择:

工具 特点 适用场景
tar 简单直接,无需安装 快速全量备份
rsync 增量备份,效率高 定期同步备份
Timeshift 系统快照,图形界面 桌面用户
Borg Backup 去重加密,高效 企业级备份
Clonezilla 磁盘级克隆 完整系统迁移

TAR 的优势在于它的普遍性和简单性 —— 任何 Linux 系统都预装了 TAR,不需要额外安装任何软件。但如果你需要更高级的功能(如增量备份、加密、去重),建议考虑使用专门的备份工具。


写在最后:备份是一种态度

这篇笔记记录于 2013 年 11 月,是我对 Linux 系统备份的一次系统性学习。从 Windows 到 Linux 的转变,不仅仅是操作系统的切换,更是思维方式的升级。Linux 教会我的最重要的一课是:理解系统的底层原理,远比记住操作步骤更有价值。

在 IT 的世界里,数据就是生命。无论你使用的是 Windows、Linux 还是 macOS,养成定期备份的习惯都是对自己最负责任的做法。而 Linux 用 TAR 命令就能完成的系统备份,更是让我深刻体会到了开源系统的优雅和力量。

记住一句话:没有备份的系统,就是在裸奔。