“备份一时爽,恢复火葬场”这句话在Linux圈子里传了很多年,可惜大多数人都是等到系统真的崩了才明白它的含义。尤其是Ubuntu用户,装完系统、配好环境、跑通开发栈,往往要耗掉好几个周末,结果一次升级事故、一次误删、一块硬盘寿命到头,所有配置瞬间归零。所以我一直建议身边的朋友:无论你是开发机、服务器还是家里的媒体主机,Ubuntu装好后的第一件事,就是做一份全盘备份。
这篇文章我会把Ubuntu全盘备份与恢复这件事拆开来讲,重点对比tar、Timeshift、systemback这三条路线。tar是Linux自带的打包工具,底层、通用、灵活,适合有一定命令行基础的人;Timeshift是专门做系统快照的工具,更像Windows的还原点,适合追求省心、日常自动备份的用户;systemback则是能把当前系统做成一个完整可启动ISO的利器,适合需要迁移到另一台机器或者准备应急恢复盘的人。三者的原理、适用场景、操作细节差别很大,我会把每一步命令、参数逻辑和踩坑点都写清楚,你可以根据自己的情况直接抄作业。
1. 全盘备份的核心思路与规划
1.1 备份的本质与目录挂载点规划
很多人第一次接触Linux全盘备份时会有一个误解:以为全盘备份就是把整个磁盘做成一个镜像文件,类似Windows下的Ghost。但Linux的哲学是“一切皆文件”,系统里的所有内容——内核、驱动、配置、软件、用户数据——最终都落在根文件系统“/”下面。所以Linux的全盘备份,本质上是在做一层目录树的完整复制,把根目录下所有需要保留的文件打包或快照下来,将来恢复时再原样放回去。
理解了这一点,目录挂载点的规划就变得特别重要。建议在装系统时就考虑清楚,通常是把“/”和“/home”分成两个独立分区,如果条件允许,再单独规划一个“/boot/efi”分区用于UEFI引导。这样做的理由很直接:系统崩了,只需要重装或恢复根分区,用户的家目录数据不受影响;备份的时候也可以只备份“/”,把数据量大的“/home”排除在外,或者单独备份。没有这种规划的用户也不用慌,tar备份时可以通过排除目录的方式实现同样的效果,后面我会详细说明。
还有一个关键点是备份存放位置。备份文件绝对不能放在被备份的同一块硬盘上,这是备份的铁律。很多人图省事把备份放在“/home/用户名/backup”下,结果硬盘整体损坏的时候备份跟着一起没了。合理做法是备份到移动硬盘、另一块独立硬盘、NAS,或者至少是另一个分区。如果备份文件比较大,建议在备份完成后做一次校验,确认压缩包没有损坏再清理源头数据。
1.2 三款工具定位与选型建议
tar、Timeshift、systemback虽然都能做备份,但设计目标和适用场景完全不同。
tar是GNU/Linux系统自带的归档工具,它的本质是把一组文件和目录打包成一个独立文件,配合gzip、xz等压缩算法还能显著减小体积。tar的优势是极度通用,几乎所有Linux发行版都有,不依赖任何附加服务,没有版本兼容性问题,恢复时也不需要安装额外工具。它适合做一次性完整备份、日常手动全量备份,也适合把系统迁移到另一台机器。缺点是全量备份耗时长、占空间大,没有内置的增量备份机制,完全靠命令行操作,对新手来说有一定门槛。
Timeshift是专门为桌面Linux设计的快照工具,在Ubuntu用户群里口碑很好。它有两种工作模式:默认的rsync模式利用硬链接做增量快照,首次快照之后,后续的快照只保存发生变化的那部分文件,空间占用非常节省;BTRFS模式则依赖Btrfs文件系统自身的快照能力,秒级生成,性能开销极低。Timeshift的使用体验非常接近普通桌面软件,图形界面直观,定时快照、自动清理这些功能都是内置好的,适合追求省心、希望每天自动留一份还原点的用户。但它也有明显局限:官方定位是“系统恢复”,默认排除“/home”,所以它保护的是系统和已安装软件,不负责用户数据目录。
systemback是另一个老牌系统备份工具,它在Ubuntu 16.04时代非常流行,核心卖点是能把当前系统“原样”制作成一个可启动的ISO镜像文件(后缀sblive或sbs),这个镜像既能用于恢复本机系统,也能烧录到U盘变成Live系统,还能在另一台硬件相近的机器上装机。Systemback的思路和tar、Timeshift完全不同,它更像是“系统整机克隆”。需要注意的是,这个项目已经停止维护很多年了,在较新版本的Ubuntu上安装时会出现依赖问题,需要一定的动手能力去解决,这一点我在后面的章节里会讲到。
1.3 备份前必做的准备事项
不管选择哪一种工具,有几项准备工作是共通的。首先是清理系统,把缓存、临时文件、旧的软件包清理干净,备份出来的体积会更小。可以使用sudo apt clean清理软件包缓存,sudo journalctl --vacuum-time=7d清理过期系统日志,再手动清一下~/.cache目录里面不需要的东西。
其次是检查磁盘空间。备份文件的体积大致是已用空间的0.5到1倍,取决于数据内容。如果是压缩备份,文本、代码这类内容压缩率高,体积能小很多;如果是视频、图片这类已经压缩过的文件,压缩基本无效。确认目标磁盘剩余空间足够,并且文件系统格式能被Linux正常读写,推荐ext4、exFAT或NTFS,注意exFAT和NTFS不支持Linux文件权限属性,恢复时可能丢权限,建议备份盘用ext4。
最后是准备好一个Ubuntu Live USB启动盘。这一步很多人会忽略,但几乎所有的恢复流程都需要从Live环境启动,否则系统本身都起不来了,拿什么去恢复?Ubuntu官方镜像自带“试用Ubuntu”模式,制作启动盘可以用自带工具“启动盘创建器”或者写镜像工具balenaEtcher,建议提前做一只,并实际验证一遍能进Live环境。
2. tar全盘备份:最底层也最灵活
2.1 tar备份完整命令与参数取舍
tar备份的核心思路就是把根目录下所有需要的文件打成一个压缩包,同时排除那些不需要或不应该备份的内容。这里给出一份我实测过多次的完整备份命令:
sudo tar -cvpzf /media/backup/ubuntu_full_$(date +%Y%m%d).tar.gz \ --exclude=/proc \ --exclude=/sys \ --exclude=/dev \ --exclude=/run \ --exclude=/tmp \ --exclude=/media \ --exclude=/mnt \ --exclude=/lost+found \ --exclude=/home/*/.cache \ /拆开来看,核心参数有五个。-c表示创建归档,-v表示显示正在处理的文件名,-p表示保留文件权限和所有权属性,-z表示用gzip压缩,-f指定输出的归档文件名。这里最容易踩的坑有两个:一个是漏掉-p参数,导致恢复出来的关键系统文件权限整个乱掉,root用户无法登入、setuid程序失效;另一个是用绝对路径指定要打包的根目录“/”,tar会警告“ Removing leading / from member names”,这是正常现象,tar默认会把绝对路径转成相对路径再归档,这样恢复时才能安全地解压到目标位置,不建议用-P参数强制保留绝对路径。
再来看排除目录,这是tar全盘备份的精髓。/proc、/sys、/dev、/run、/tmp这五个目录是运行时生成的虚拟文件系统或临时目录,分别映射内核进程信息、内核数据结构、设备文件、运行时文件(如socket)和临时文件,这些内容每次开机都会重新生成,根本不应该进入备份包,如果不排除会导致备份过程卡死或者备份包体积异常膨胀。/media、/mnt是外部设备挂载点,/lost+found是ext文件系统错误恢复时用的目录,这些也都不需要备份。/home/*/.cache是用户缓存目录,不排除的话几百MB的浏览器缓存和缩略图也会被塞进包里,白白浪费空间和时间。
我之所以建议把备份文件放在/media/backup/而不是/home/用户名/backup/,除了备份文件不能放在被备份盘上的考虑之外,还有一个原因:如果你指定--exclude=/media,那么挂在/media下的所有外部硬盘和数据盘都不会进入备份内容。这样一来,备份过程就不会无限遍历外部硬盘,你也不用担心外部硬盘的敏感数据被卷进系统备份里。
2.2 恢复流程与关键细节
恢复tar备份的前提是先准备好一个可用的Linux环境。最稳妥的方式是从Ubuntu Live USB启动,然后执行下面这组命令:
# 查看分区布局,找到目标系统分区 sudo fdisk -l # 挂载目标系统分区,例如/dev/sda5是根分区 sudo mount /dev/sda5 /mnt # 如果有单独的/boot分区,也一并挂载 # sudo mount /dev/sda1 /mnt/boot/efi # 解压备份包到目标分区 sudo tar -xvpzf /media/backup/ubuntu_full_20250201.tar.gz -C /mnt # 重新生成必要的运行时目录 sudo mkdir -p /mnt/proc /mnt/sys /mnt/dev /mnt/run /mnt/tmp sudo chmod 1777 /mnt/tmp解压完成后,还有一个很多人不知道的关键步骤:重新生成系统引导。如果你的计算机是UEFI模式启动,需要挂载EFI系统分区,然后用chroot进入恢复后的系统重新安装GRUB:
# 绑定必要的运行时目录 sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo mount --bind /run /mnt/run # 进入恢复后的系统环境 sudo chroot /mnt # 在chroot环境中重装GRUB grub-mkconfig -o /boot/grub/grub.cfg grub-install /dev/sda # 退出chroot并卸载分区 exit sudo umount -R /mnt恢复时最容易栽跟头的地方就在这里:很多人解压完就重启,结果卡在GRUB界面或者直接进入initramfs的busybox命令行,根本原因是EFI引导信息没有重新生成,或者fstab里面写的磁盘UUID与当前实际分区不匹配。用chroot方式重新执行一遍grub-mkconfig和grub-install,能够把GRUB配置和系统当前状态重新关联起来,绝大多数启动问题都能解决。
此外,如果你原来的系统里有一些软件依赖于固定主机名或者网络配置,恢复后可能需要重新检查/etc/hostname和/etc/netplan/下的网络配置。tar备份是全量覆盖恢复,会还原当时的完整状态,如果硬件环境有变化(比如换了一台机器),网卡名称可能从ens33变成enp2s0,这些配置建议提前了解一下怎么调整。
2.3 tar方案的优势与局限
tar方案最大的优势是通用性和可控性,它不依赖任何备份软件,也不受图形界面限制,备份包就是一个普通的压缩文件,可以用任何Linux发行版解压。相比之下,Timeshift恢复必须依赖Timeshift本身,systemback制作的镜像也需要专门工具处理,而tar包只需要一个tar命令,哪怕系统彻底瘫痪也可以从Live环境恢复,甚至能手动取出包里的单个文件进行救援。
tar方案的局限也很明显:全量备份每次都是整个根目录的复制,第一次备份要消耗很长时间,后面每次备份也是全量,无法像Timeshift那样自动做增量。补救的办法是自己写脚本,利用tar的增量备份特性--listed-incremental参数记录差异文件,但配置复杂度会上升,不太适合普通用户。如果你是新手,又希望系统能定期自动留还原点,我更推荐下面要讲的Timeshift。
3. Timeshift:日常快照与增量备份的首选
3.1 Timeshift的工作原理:rsync模式与BTRFS模式
Timeshift之所以在Ubuntu用户中口碑很好,核心原因是它的快照机制设计得聪明。安装Timeshift时会让你选择快照模式,默认是rsync模式。这种模式下,第一次快照会把系统里所有需要保护的文件完整复制到备份目录,之后每次再创建快照,Timeshift会用rsync算法只复制发生变化的那一部分文件,没有变化的文件则用硬链接指向上一次快照里已经存在的副本。硬链接不是复制,它只是同一个文件在文件系统里的多个入口,不额外占用磁盘空间。所以10次快照的总体积可能只比第一次快照多占用少量空间,这对日常自动备份来说非常友好。
另一种BTRFS模式就不多说了,因为需要“/”分区使用Btrfs文件系统,而Ubuntu默认安装使用的是ext4,除非你装系统时手动选了Btrfs,否则基本用不上。Btrfs模式的快照速度极快,几乎瞬间完成,但前提是文件系统本身支持快照,普通ext4用户不需要纠结这一点。
还有一点要澄清:Timeshift默认只备份系统文件和配置,不包含“/home”目录里的用户数据。它官方给出的理由是“家庭目录通常会被邮件、浏览器缓存和其他用户特定的临时文件填满”,如果连“/home”一起快照,快照体积和创建时间都会大幅上升。所以Timeshift定位是系统快速还原,不是数据备份工具。用户数据还是要单独用Deja Dup、rsync或者网盘去保护。
3.2 Timeshift的安装、配置与定时快照
在Ubuntu 20.04及更新的版本上,Timeshift已经收入官方软件源,安装只需要一条命令:
sudo apt update && sudo apt install timeshift安装完成后,可以从应用菜单里启动Timeshift,但第一次启动它会要求管理员权限,并弹出设置向导。向导要你选择快照类型(rsync或BTRFS)、快照存储位置,以及需要排除的目录。如果你在装系统时就已经把“/”和“/home”分开了,建议把快照存储位置指向“/home”所在的分区,这样即使根分区损坏,快照仍在另一个分区上存着,你的恢复能力不会一起瘫痪。
定时快照是Timeshift的杀手级功能,设置路径是“设置 > 计划”,勾选“启用定时快照”后可以按天、周、月来调度。我个人的经验是:每周做一次快照保留两份,加上每天做一次“每日快照”保留一天,基本能覆盖“昨天晚上装了个软件把系统搞坏了”这类高频事故场景,又不会在备份目录里堆太多快照。Timeshift还内置了自动清理策略,可以限制保留快照的数量或总占用空间,比如设定“保留两个每周快照、两个月度快照”,避免存储空间被历史快照吃满。
如果你是命令行爱好者,Timeshift也提供了完整的命令行接口。最常用的三个命令是:
# 立即手动创建快照 sudo timeshift --create --comments "before system upgrade" --tags D # 列出已有快照 sudo timeshift --list # 恢复指定快照 sudo timeshift --restore一键式快照的创建标签,--tags可以指定快照类型,H(hourly)、D(daily)、W(weekly)、M(monthly)等,方便按类型区分。
3.3 从快照恢复系统:图形界面与Live环境两种方式
Timeshift的恢复操作本身做得很人性化。系统还能正常启动时,打开Timeshift界面,选中一个快照,点击“恢复”,它会自动分析当前系统和目标快照之间的差异,然后给出一个恢复计划:哪些文件会被覆盖,哪些新增文件会被删除,GRUB是否需要重新安装。确认之后,Timeshift会在一个独立会话里执行恢复,过程不可中断,恢复完成后自动重启。
如果系统已经无法启动了,恢复就复杂一些。你需要从Ubuntu Live USB启动,然后手动安装并运行Timeshift。具体做法是:进入Live环境,打开终端,先挂载上存放快照的那个分区,然后安装Timeshift(如果Live系统里没有的话),以管理员权限运行。
sudo add-apt-repository -y ppa:teejee2008/timeshift sudo apt update && sudo apt install timeshift sudo timeshift --restoreTimeshift会自动找到挂载分区上的快照列表,选中你想恢复的那个,然后按照GUI提示完成恢复。恢复完成后它会提示重新安装GRUB,这一步一定要勾选并完成,否则大概率启动不了。实测下来,从Live环境用Timeshift恢复的可靠性其实比在正常系统里恢复更高,因为Live环境不会干扰目标系统的分区使用状态,文件写入更干净。
3.4 Timeshift的常见问题与使用技巧
我在使用Timeshift过程中遇到过几个值得说的问题。第一个是快照存储空间不够:曾经给根分区分配了30GB,每周快照做了两个月,备份目录空间告急。后来检查发现,快照里包含了大量系统日志和软件包缓存,把“/var/log”和“/var/cache/apt/archives”排除之后,快照体积立刻小了不少。排除的方法是在设置里的“过滤器”选项卡中添加路径。
第二个问题是恢复后系统虽然能启动,但桌面环境出现奇怪的问题,比如GNOME设置丢失、扩展失效。这种情况通常是家目录内的配置文件被覆盖或者权限变了,Timeshift在恢复时可以选择“保留家目录”,恢复速度更快,也不会触碰用户配置。我的建议是:如果是纯系统层面的问题,恢复时勾选保留家目录;如果是怀疑环境变量或某个隐藏配置导致的问题,那还是全量恢复更彻底。
还有一个实用技巧:给快照加注释。手动创建快照的时候顺手在“注释”栏写一句这次快照前的操作(比如“更新NVIDIA驱动前”),三天后系统出问题,你能一眼看到该回退到哪个快照点,不用靠时间去猜。
4. Systemback:制作完整系统ISO与Live恢复
4.1 Systemback的安装与兼容性处理
Systemback是Ubuntu备份工具里一个很特别的存在,它的核心功能不是简单地打包文件,而是把整个系统制作成一个可启动的系统镜像文件,类似于给系统拍了张完整的“定妆照”,这个镜像可以直接烧录成U盘,变成一张Live系统盘,也能用于系统迁移。
坏消息是Systemback已经停止维护,官方源在较新的Ubuntu版本上无法直接安装,需要对软件源和依赖做一些处理。网上流传最广的方法是添加PPA源:
sudo add-apt-repository --remove ppa:nemh/systemback sudo sh -c 'echo "deb http://ppa.launchpad.net/nemh/systemback/ubuntu xenial main" > /etc/apt/sources.list.d/systemback.list' sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 382003C2C8B7B4AB813E915B14E4942973C62A1B sudo apt update sudo apt install systemback这段命令的原理是:从Ubuntu 16.04(xenial)的PPA源安装Systemback,因为新版Ubuntu已经看不到这个PPA了,需要手动指定老版本的源地址。在我的测试中,Ubuntu 20.04和22.04上这套方法可以成功安装,但Ubuntu 24.04上libqt5版本不兼容,运行时会出现界面打不开的问题,所以如果你是24.04用户,我更推荐直接用tar方案或Timeshift,没必要在这里折腾。
4.2 用Systemback制作系统镜像并烧录U盘
安装完成后,在应用菜单启动Systemback,界面是英文的,但布局很直观。左侧是一排功能按钮,我们做备份主要用到两个:“System Back”和“Live System”。
点击“System Back”,它会扫描当前系统分区,默认选中根分区作为需要备份的源,你可以勾选是否包含“/home”目录。系统备份的产物是一个.sblive后缀的文件,体积通常跟你系统已用空间差不多大。生成之后,你还需要把它转换成标准ISO镜像:“Live System”功能允许创建包含live环境的可启动系统,如果你想做一张别人也能用它装机或从U盘启动的应急盘,可以选择创建Live系统,Systemback会把当前软件环境打包进去,最后生成一个.iso文件。
拿到ISO文件之后,用balenaEtcher或者启动盘创建器把它写入U盘。需要注意:这张U盘就成了一个应急恢复盘,从它启动后,你可以选择把系统“原样”安装回本机、安装到其他机器,也可以直接进入Live桌面进行任意救援操作。Systemback生成镜像包含的是制作时的系统快照状态,如果你在这之后又更新了系统、装了新软件,这些变化不会自动进入镜像,需要重新制作。
4.3 Systemback的局限性、解决思路与适用场景
Systemback最大的问题除了没有官方维护之外,还有兼容性和灵活性不足。它制作的Live系统镜像默认携带的是它自己的安装器,安装过程是整盘克隆式的,对目标磁盘的分区结构有要求,不像tar那样可以灵活地选择恢复哪个分区。另外,在UEFI环境下历史版本曾经出现过启动引导问题,如果你的电脑是UEFI启动,制作完成的镜像建议先在一个不重要的机器或虚拟机上测试一遍能不能正常引导。
这并不代表Systemback没有价值。在一些特定场景下,它反而是最好的选择。比如要给多台硬件配置完全相同的电脑批量部署系统,只要在一台机器上装好所有软件和配置,用Systemback制作一个ISO,然后再用这个ISO在其余机器上安装,效率远高于一台台手工配置。又比如你有一台机器暂时不方便拆硬盘,但需要把整套系统带走或者备份到一个离线位置,Systemback的ISO可以直接刻录成光盘或写入U盘,携带和保管都比一个几十GB的tar包方便。
我个人在Ubuntu 18.04时代用过一段时间的Systemback,后来系统升级后依赖问题越来越麻烦,就渐渐放弃了。如果你愿意尝试,建议只在虚拟机或低版本Ubuntu上玩,重要生产环境还是老实走tar或Timeshift路线。
5. 三种方案对比与选型指南
5.1 功能与场景对比
光看单个工具容易“只见树木不见森林”,把三者放在同一张表里对比,各自的取舍就一目了然了。
| 对比维度 | tar | Timeshift | Systemback |
|---|---|---|---|
| 备份方式 | 全量打包目录树 | 增量快照(rsync硬链接) | 整机系统镜像 |
| 能否备份用户数据 | 可以,包含/或不包含均可 | 默认不包含/home | 可选包含/home |
| 增量备份 | 不支持(需脚本配合) | 内置支持 | 不支持 |
| 定时备份 | 需cron配合 | 内置计划任务 | 不支持 |
| 恢复方式 | 手动解压+重装GRUB | 图形界面/Live恢复 | 挂载ISO或Live安装 |
| 制作应急启动盘 | 不支持 | 不支持 | 支持 |
| 上手难度 | 中高,命令行为主 | 低,图形界面友好 | 中,安装麻烦 |
| 维护状态 | 系统自带工具,永不过时 | 活跃维护 | 已停止维护 |
| 适合用户 | 命令行老手、服务器 | 桌面用户、日常快照 | 批量装机、迁移场景 |
补充一个很多人关心的点:备份文件的体积。tar全量备份每次都是完整系统的压缩包,体积最大;Timeshift因为增量硬链接机制,多份快照占用额外空间极少;Systemback产出的ISO大小接近系统已用空间,但胜在一体化,一个文件就是一整套系统。
5.2 我的组合备份策略
经常有人问我“到底用哪一个最好”,我的回答始终是:组合使用,各取所长。
以我自己的一台主力开发机为例,系统盘是500GB SSD,装了Ubuntu 22.04,根分区用了200GB。“/”独立分区80GB,“/home”独立分区120GB。备份策略是三层:第一层用Timeshift每周自动快照根分区,保留两周的量,用来应对日常软件更新、配置修改导致的系统异常,恢复速度快,几分钟就能回到昨天;第二层每个月用tar手动做一次全盘完整备份,包含“/”和“/home”全部内容,保存到移动硬盘,用于应对灾难性场景——比如SSD主控损坏、系统被勒索软件加密、需要迁移到新机器;第三层是重要的“/home”里的代码和数据,依赖Git仓库和云同步服务,这部分单独走数据备份,不依赖系统备份工具。
这套方案里,Timeshift负责日常“后悔药”,tar负责兜底和迁移,Systemback我平时不用,只在需要给多台机器批量部署同套环境时才拿出来做ISO。如果你觉得两套工具太麻烦,只选一个的话,桌面用户我推荐Timeshift,服务器用户我推荐tar,理由在前面已经说得很透了。
6. 常见问题与排查技巧实录
6.1 恢复后无法启动:GRUB与UUID问题
这是备份恢复里出现概率最高的问题,症状各不相同:有的开机直接黑屏,有的停在GRUB命令行,有的进入insmod错误,有的卡在“BusyBox v1.30.1”提示符。根因无非两类:引导器没有正确恢复,或者内核挂载根分区时找不到设备。
GRUB问题在前面tar恢复那节已经提过,用Live USB启动后chroot进系统,重新grub-mkconfig和grub-install就能解决。但如果是UUID不匹配的问题,处理起来要更细心。Linux系统启动时依赖/etc/fstab文件里的UUID标识来挂载根分区,当你tar恢复时,如果目标分区的UUID跟备份时不一样(比如原来系统分区是sda5,恢复到了sdb2),系统就会因为找不到分区而进入initramfs的busybox。
排查方法:在busybox里输入blkid查看当前分区的实际UUID,再对比恢复出来的“/etc/fstab”里的UUID,如果对不上,有两条路。一是修改fstab把UUID改成实际的,二是用tune2fs /dev/sda5 -U <原UUID>命令把分区的UUID改回备份时的值。两条路都行,但更推荐后者,因为有些软件(比如/swap分区)也可能记录了原UUID,改回去能避免连环问题。
Timeshift恢复时也有类似情况,但它的GUI会提示你是否重新安装GRUB,只要勾选并填入正确的系统盘,一般不会出问题。Systemback则是整盘写回,分区UUID本身就是原样写入的,不会有这个烦恼。
6.2 tar备份文件损坏与校验
tar备份文件动辄几十GB,传输、存储过程中任何一个扇区出错都可能导致整个备份包无法解压。我见过太多人备份完就把源文件删了,等到恢复时才发现压缩包损坏,那种绝望感比系统崩溃本身还要强烈。
预防办法是在备份完成后立刻计算校验值,并把这个校验值单独存一份:
sudo sha256sum /media/backup/ubuntu_full_20250201.tar.gz > /media/backup/ubuntu_full_20250201.tar.gz.sha256恢复环境里解压前,先校验一遍:
sudo sha256sum -c /media/backup/ubuntu_full_20250201.tar.gz.sha256如果提示“FAILED”,说明备份文件已经损坏,就别浪费时间尝试解压了。这里有一个实操心得:tar因为自身的流式写入特性,在备份过程中如果源磁盘有坏道,tar可能会直接报错退出,而不会默默产出损坏文件。所以只要备份过程没有报错,压缩包的完整性还是比较有保证的。真正容易出问题的环节是备份文件存放在老旧的机械硬盘或劣质U盘上,时间一长扇区变质。所以备份文件存放盘的健康状态和校验值同等重要。
6.3 Timeshift快照空间越积越大与定时任务失效
Timeshift虽然用硬链接做增量,但硬链接有一个前提:快照必须放在同一个文件系统上。如果把快照存储位置放到一个独立挂载的NTFS分区或者通过网络挂载的NFS目录,硬链接机制就会失效,Timeshift会自动退化为“完整复制”,每份快照都是全量体积,磁盘空间很快就会被写满。
所以请检查你的快照存储位置,确保它和源系统在同一个ext4分区下的不同目录,或者至少是单独的一个ext4分区。跨文件系统存放快照虽然技术上可行,但空间占用会呈线性增长。
至于定时任务失效,最常见原因是Timeshift服务没有随系统启动,可以用systemctl检查一下相关服务的状态,如果被禁用了,用sudo systemctl enable --now timeshift重新启用。如果一切正常但快照依然不出现,检查“设置 > 计划”里的时间规则是否勾选正确,以及系统时间是否准确,时间不对也会导致调度错乱。
6.4 其他容易忽略的坑
备份目录的权限问题值得单独提一句。tar备份文件在创建的时候是以root权限运行的,恢复的时候也要用root权限解压,否则大量文件的属主和权限信息无法写入提取,恢复出来的系统会千疮百孔。如果你在普通用户模式下解压,会看到大量“Cannot utime: Operation not permitted”的报错,这时候别心存侥幸,重来,用sudo。
Systemback的ISO制作过程也是个坑。它生成Live系统的过程中会把当前内存里的临时文件也写进镜像,所以制作前最好重启一次系统,让环境干净一些,并关闭所有不必要的应用。镜像生成过程中如果出现“only less than 3GB space available”的提示,是因为Systemback在“/home”下创建临时文件空间不足,用具有足够空间的目录作为临时目录可以缓解。
还有一个我踩过几次的坑:备份过程中千万别去动源分区里的文件。tar备份时如果你还在正常使用电脑,文件可能在你备份过程中发生变化,可能出现备份里的文件和后端不一致,恢复后出现各种莫名其妙的错误。所以做全盘备份尽量在系统空闲时执行,或者直接从Live环境启动后挂载磁盘再备份,那个状态下磁盘是静止的,备份出来的包一致性才有保证。
写在最后
备份这件事,本质上买的是一份安心。我自己经历过最惨痛的教训是一次系统升级后显卡驱动崩溃,图形界面完全无法进入,当时手头没有Live USB,也没有任何备份,最后只能全盘重装,花了整整两天才把开发环境搭回来。在那之后,我养成的习惯是:所有工作环境的重要节点一定留快照,系统大版本升级前必做全盘备份,Live USB和备份盘永远放在随手能拿到的地方。
这几年做下来,我最大的体会是:备份方案没有最好,只有最适合。tar、Timeshift、systemback三者的选择,取决于你想在“省心”“灵活”“安全”这三个维度上如何取舍。如果你还在犹豫从哪里开始,我的建议是先装一个Timeshift,开好定时快照,再顺手用tar手动做一份完整备份放到移动硬盘里。花掉的时间不会超过一顿午饭,但下次系统出问题的时候,你会感谢现在的自己。