1. 备份这件事,为什么越早做越省心
先说个最实在的结论:Ubuntu系统备份、恢复与迁移,不是给服务器管理员准备的专属技能,而是每个把Ubuntu当主力系统用的人都该掌握的基本功。我见过太多人栽在同一个坑里——系统用了大半年,桌面美化、开发环境、各种配置文件全都折腾到位了,结果一次升级失败或者硬盘出问题,所有东西一夜归零,那种感觉比丢了钱包还难受。
这一篇是“跟韩工学Ubuntu第9课”的第三篇,核心就围绕三件事:备份、恢复、迁移。听起来是三件事,实际操作中它们经常纠缠在一起,比如你换了新电脑要把旧系统整个搬过去,这就是“备份+迁移”的组合场景;比如某次更新内核后系统进不去了,这就是“恢复”的战场。所以我不打算把这三个词拆成三个孤立的章节来讲,而是按照真实使用场景来组织内容,让你遇到问题时能直接对着操作。
这篇内容适合谁?如果你是Ubuntu新手,刚装好系统没多久,那这篇能帮你“亡羊补牢”,趁损失还没发生先把备份机制搭起来;如果你已经用了几个月甚至更久,但从来没认真想过备份这回事,那这篇就是给你提个醒,顺便给你一套能立刻上手的方案;如果你正面临换电脑、换硬盘、迁移开发环境的实际需求,那这篇的第三部分就是你的“搬家手册”。无论哪种情况,你需要的不是一份写了“可以用dd命令备份”的说明书,而是一套经过实际检验、能应对各种意外状况的操作流程。
我在实际工作中被问得最多的一句话是:“备份用什么工具好?”每次听到这个问题,我都想反问一句:你备份的目的是什么?是为了防止系统挂了能快速恢复,还是为了把整个环境原封不动搬到另一台机器?这两种目的对应的方案完全不同。前者讲究速度快、恢复简单,后者讲究完整性、兼容性。所以这篇文章里我会把工具选型的逻辑讲透,而不是直接甩给你一个“史上最全备份命令合集”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 备份方案的选型思路:先想清楚你要防什么
2.1 备份的三种层级,对应三种不同的防丢需求
在动手之前,先建立一套分层思维。我用一个很生活化的类比来解释,你就能秒懂。
把备份分成三层,就像给自己的家做防盗措施。第一层是门锁,对应的是“文件级备份”,你手动或者用工具把重要的文档、代码、配置文件复制到别处,丢了哪个文件就从备份里拿回来;第二层是监控摄像头,对应的是“系统状态快照”,它能记录下系统某一时刻的完整状态,比如安装了哪些包、改了哪些配置,系统崩了之后能恢复到那个时间点;第三层是保险柜,对应的是“整盘镜像”,直接把整个硬盘克隆成一份镜像文件,硬盘坏了也能从镜像里把一切还原回来。
这三层不是互斥的,而是按需组合的。如果你是普通桌面用户,主要担心的是“重要文件误删”和“系统升级搞挂”,那一层门锁加一层摄像头基本就够用;如果你是开发者,担心的是“开发环境配置太花时间,重装太痛苦”,那系统状态快照和整盘镜像的价值就体现出来了;如果你是拿Ubuntu做服务器或者跑NAS,那保险柜级别的整盘镜像几乎就是标配,因为服务器上任何一个微小的配置错误都可能让整个服务瘫痪。
这套分层思维贯穿整篇文章,后面所有的工具选择和操作步骤,其实都是在回答一个问题:你现在需要哪一层保护?
2.2 常用备份工具速览:各自的定位与边界
Ubuntu生态里的备份工具非常多,我先挑几个最主流的给大家做个横向对比,看它们各自擅长什么、不擅长什么,然后你再结合自己的需求去选。
第一个是rsync,它是文件同步的瑞士军刀,也是最基础、最值得花时间学会的工具。它的核心能力是增量同步,第一次全量复制,之后只复制变化的部分,效率和灵活性都非常高。它的短板是只管文件层面的同步,不管系统状态,也就是说你用它把整个根目录同步到另一块硬盘,目标盘也不能直接启动。它可以用来做文件级备份,也可以配合其他工具完成系统迁移的数据搬运环节。
第二个是Timeshift,这个工具相当于给系统拍“快照”。它有两种工作模式,一种是使用rsync做硬链接实现增量快照,另一种是利用Btrfs文件系统的快照功能。它的定位非常清晰:保护系统文件、配置和已安装的软件包,让你在系统搞坏之后能一键回滚。但注意,它默认不备份/home下的用户数据,因为设计者认为个人文件应该有另外的备份方案,这个设计取舍需要你心里有数。
第三个是dd,这是最“底层”的工具,直接逐字节复制整个磁盘或分区,生成的镜像文件是完整无缺的“克隆体”。它的优点是绝对完整,缺点是效率低、镜像文件大,而且恢复时要求目标盘容量不小于原盘,实际操作中通常用于整机替换或者彻底性的灾难恢复。
第四个是Clonezilla,它在dd的基础上做了大量优化,支持分区到镜像、磁盘到磁盘、增量备份等多种模式,而且是开源的。它是“整盘镜像”方案里最值得推荐的工具,有图形界面也有命令行模式,适合批量部署和完整迁移场景。
我把它们的对比整理成一个表格,方便你快速定位:
| 工具 | 备份层级 | 核心优势 | 主要限制 | 推荐使用场景 |
|---|---|---|---|---|
| rsync | 文件级 | 增量同步、跨设备灵活 | 不含系统状态、目标盘不能直接启动 | 日常文件备份、数据搬运 |
| Timeshift | 系统状态 | 快照式回滚、操作简单 | 默认不含用户目录数据 | 系统更新/配置变更前的保护 |
| dd | 整盘级 | 逐字节完整克隆 | 速度慢、镜像体积大 | 换硬盘前的全盘兜底 |
| Clonezilla | 整盘级 | 高效压缩镜像、支持网络备份 | 需要单独启动环境 | 整机迁移、批量部署 |
2.3 我的选择:rsync + Timeshift 组合,再加一块移动硬盘
在讲了这么多工具之后,我直接晒一下我自己在用的方案,大家可以直接抄作业。我的桌面主力机跑的是Ubuntu 22.04 LTS,日常用途包括写代码、处理文档、偶尔做点轻度图像处理。我的备份策略就是一个“双保险”组合:
- 用
Timeshift做系统快照,每周一次,保留最近5个快照,解决“系统搞坏能回滚”的问题。 - 用
rsync做数据同步,每天一次,把/home目录里的关键文件夹(主要是Documents、Pictures、Projects)同步到一块外接移动硬盘,解决“文件误删或硬盘损坏”的问题。 - 每半年用
Clonezilla做一次整盘镜像,刻到另一块硬盘上,解决“彻底灾难”的问题。
这个组合的思路是:不同级别的风险用不同级别的方案去防,投入的成本(包括时间和硬盘空间)是可控的,但每一层风险都有人兜底。如果你觉得每半年做一次整盘镜像太麻烦,至少前两层一定要有,这是底线。
3. 实操:用Timeshift给系统做好“后悔药”
3.1 安装与初始配置
Timeshift在Ubuntu软件源里就有,安装非常简单:
bash复制sudo apt update
sudo apt install timeshift
装好之后,可以从应用菜单里启动它,也可以直接在终端输入sudo timeshift-launcher。第一次启动会有一个设置向导,它会扫描你的磁盘,询问你的快照类型和存储位置。如果你的根分区是Btrfs格式,它会推荐使用Btrfs快照模式;如果是ext4格式,它会使用rsync模式。绝大多数Ubuntu默认安装用的是ext4,所以你会看到rsync模式界面。
选存储位置时有一个容易被忽略的坑:快照应该存到另一块硬盘或分区上,而不是和系统放在同一个盘里。为什么?因为如果你的系统盘本身坏了,同盘上的快照也一起没了,那快照还有什么意义?我建议准备一块容量足够的外接硬盘或者一个独立分区,专门用来放Timeshift快照。设置完成后,向导会提示你创建第一个快照,这个操作可能会花几分钟时间,耐心等它跑完。
3.2 手动创建快照与定时快照
创建完初始快照后,在Timeshift主界面上可以看到“Create”按钮,点击即可手动创建一个新快照。它的工作方式是基于硬链接的增量快照:第一次全量复制,后续的快照只保存相对于上次快照有变化的文件。所以快照之间虽然看起来每个都是完整目录树,实际上重复数据只占一份磁盘空间,这就是Timeshift高效的地方。
定时快照也建议设置上。在主界面的“Schedule”标签页里,可以选择快照频率和保留数量。我个人的设置是“每周一次,保留5个快照”,这个频率对普通桌面用户来说足够了。如果你最近在频繁修改系统配置、装各种软件,可以在做这些“危险操作”之前手动创建一个快照,这就相当于打游戏存档,出了任何问题直接读档。
3.3 恢复过程实测:系统起不来也能救
Timeshift的恢复功能是我最看重的,因为它的核心价值就体现在“系统崩了怎么回来”。两种恢复路径都要会。
第一种,系统还能进入图形界面或命令行。直接启动Timeshift,选择一个之前创建的快照,然后点击“Restore”,它会自动处理快照中的系统文件、引导配置等,最后提示你重启。
第二种,系统已经完全起不来了。这种场景下你需要一个Ubuntu Live USB,用U盘启动进入一个临时系统,然后在Live环境里安装并运行Timeshift,选择快照进行恢复。注意,这种情况下恢复的目标磁盘要选原来的系统盘,不要选错。恢复完之后拔掉U盘重启,系统就回到快照时刻的状态了。
有一个细节经验:如果系统只是内核更新后起不来,先别急着整个恢复快照,可以试试在GRUB引导菜单里选择“Advanced options for Ubuntu”,进入旧版内核启动。很多时候问题就是新内核和某个驱动冲突,用旧内核启动后把新内核卸掉就行,根本不用动快照。我把这个方法叫“轻量级恢复”,能不动刀子就不动刀子。
4. 实操:用rsync把数据文件稳妥搬走
4.1 rsync核心语法与常用参数
如果说Timeshift是给系统上保险,那rsync就是给文件上保险。它的核心命令很简单:
bash复制rsync -avzh --progress /home/username/Documents /media/username/backup/
这里解释一下关键参数:
-a:归档模式,保留文件权限、时间戳、软链接等属性,这是同步的关键,少了它同步过去的文件属性会变。-v:显示详细信息,方便观察同步过程。-z:传输时压缩,对网络传输到远端主机时效果明显,本地拷贝时优势不大。-h:人类可读的输出格式。--progress:显示同步进度。
第一次全量同步完成后,后续再执行同样的命令,它只会传输发生变化的文件和新增的文件,速度极快。这就是我每天都能很轻松做数据备份的原因,因为我只同步增量,几秒钟就完成了。
4.2 目录结构规划与排除规则
用rsync做日常备份时,目录规划非常关键。我最怕看到的情况是有人把/home/username整个目录一股脑同步到移动硬盘,里面包含了大量缓存、下载文件、浏览器临时文件,备份盘又臃肿又混乱。
我的做法是:在移动硬盘上建立一个backup目录,内部按照/home下的结构创建对应的子目录,同步的时候有选择地同步。比如只在备份里同步Documents、Pictures、Projects、.ssh(SSH密钥)和.config(应用配置)这些核心数据目录。用--exclude参数可以精确排除不需要的内容:
bash复制rsync -avzh --progress --exclude 'Cache' --exclude 'tmp' --exclude 'Downloads' /home/username /media/username/backup/
这里的--exclude可以重复使用多次,也可以从文件里读取排除规则。一个容易忽略的点是:如果你在源路径末尾加了/,比如/home/username/Documents/,rsync会把目录内容直接同步到目标目录下;如果不加/,它会创建一个名为Documents的子目录存放内容。这个细节决定了目标目录的结构是否干净,建议提前测试确认。
4.3 定时自动备份:用cron让备份“无人值守”
手动执行rsync太考验自觉性,坚持不了几次就忘了,所以一定要交给定时任务。Ubuntu自带cron,配置方法很简单。在终端输入crontab -e,然后添加一行计划任务:
bash复制30 22 * * * rsync -avzh --exclude 'Cache' /home/username/Documents /media/username/backup/
这行的意思是:每天晚上10点30分执行一次rsync命令。时间格式是“分 时 日 月 周”,*代表任意值。我建议把日志输出加上,方便排查问题:
bash复制30 22 * * * rsync -avzh --delete /home/username/Documents /media/username/backup/ >> /home/username/backup_rsync.log 2>&1
注意我加了一个--delete参数,它的作用是让目标目录和源目录完全一致,源目录里删掉的文件,备份里也自动删掉。这对于保持备份的准确性很重要,但也意味着如果源目录误删了文件,备份里的对应文件也会被删掉,所以用这个参数要谨慎。如果你担心误删,可以不用--delete,保留全量历史文件,代价是备份盘会越来越大。
5. 实操:系统迁移的完整流程
5.1 方案设计:迁移分“数据迁移”和“系统迁移”两条路
系统迁移,说白了就是换电脑或换硬盘时怎么把旧系统的环境和数据搬过去。我把它分成两条路线,大家根据自己情况选。
第一条路是“数据迁移”。新电脑安装好全新的Ubuntu,然后把旧系统的数据文件搬过去,环境重新搭一遍。这条路的优点是干净、稳定,不会有源系统遗留的驱动和配置污染;缺点是需要花时间重装软件、重新配置环境。适合那些对系统干净度要求高、软件环境不复杂的人。
第二条路是“系统迁移”。把旧系统做成一个整体镜像,或者直接克隆硬盘到新硬盘,新电脑开机就进入一个和旧电脑一模一样的系统。这条路的优点是省事,所有软件、配置、用户数据全部原封不动;缺点是可能存在硬件兼容性问题,比如显卡驱动、无线网卡驱动等在新硬件上可能需要重新配置。适合那些开发环境非常复杂、重装成本极高的人。
5.2 使用Clonezilla完成整盘镜像与恢复
我重点讲一下系统迁移里最硬核的Clonezilla方案,因为它是“整盘镜像”的标杆工具。
第一步,准备一个Clonezilla启动U盘。去Clonezilla官网下载ISO镜像,用balenaEtcher或Rufus(Windows下)写入U盘。
第二步,从U盘启动进入Clonezilla界面,选择“device-image”模式,这里的意思是把磁盘备份成一个镜像文件。接着指定镜像文件的存放位置,注意这个位置不能是你要备份的那块盘本身,通常是外接存储。
第三步,选择“savedisk”保存整块磁盘,或者“saveparts”只保存某个分区。一般建议选择savedisk保存整块磁盘,因为这样引导分区、EFI分区这些系统关键分区也都在。选择后输入一个镜像名称,比如ubuntu_desktop_20250112,然后一路回车确认。
第四步,默认的压缩选项建议保留,它会把镜像压缩存放,虽然备份时间会长一点,但节省的磁盘空间非常可观。
恢复时同样用Clonezilla启动,选择“device-image”模式,然后选择“restoredisk”将镜像恢复到目标磁盘。恢复操作会清空目标磁盘原有内容,这个操作不可逆,任何数据都不会被保留,所以执行前务必确认目标盘上没有需要的数据。
我用Clonezilla迁移过一台老笔记本到新SSD,整个过程差不多40分钟,包含的系统和数据无缝接了过去,开机后连桌面壁纸都一模一样,效率和体验都非常好。
5.3 迁移后必做的几件事:改主机名、重建引导、更新驱动
Clonezilla迁移完成后,系统虽然能开机,但有几个“尾巴”要处理干净,否则后续会有麻烦。
第一件事是修改主机名。克隆过来的系统会保留旧机器的主机名,在新网络上可能造成冲突。查看当前主机名用hostnamectl,修改用sudo hostnamectl set-hostname new-hostname。
第二件事是重建引导配置。虽然Clonezilla通常会把GRUB引导一起恢复,但为了保险起见,还是在目标机器上执行一次引导更新,特别是当你换了不同品牌的硬盘时。命令如下:
bash复制sudo update-grub
sudo grub-install /dev/sda
注意这里的/dev/sda要替换成你新硬盘的设备名,别照抄。
第三件事是驱动适配。旧系统里的显卡驱动可能是为旧显卡编译的,迁移到新机器后如果出现花屏、无法调节分辨率等问题,最简单的办法是先把旧的第三方驱动彻底卸载,然后重新安装新驱动。NVIDIA驱动的卸载和重装命令如下:
bash复制sudo apt purge nvidia-*
sudo ubuntu-drivers autoinstall
这个方法我用过多次,能解决绝大多数迁移后的驱动冲突。
5.4 开发环境迁移:Python虚拟环境和Docker容器的特殊处理
如果你和我一样,日常开发依赖一堆Python环境和Docker容器,那系统迁移时这两块要单独处理,不能简单复制。
Python虚拟环境的迁移有个经典思路:不要直接拷贝.venv目录到新系统,因为虚拟环境里很多路径是写死的,迁移后经常出现venv/bin/python指向不存在的旧路径。正确做法是导出依赖清单,然后在目标机器上重建:
bash复制pip freeze > requirements.txt
新机器上用pip install -r requirements.txt重建环境。如果你用的是conda,可以用conda env export > environment.yml导出环境配置,到新机器上用conda env create -f environment.yml重建。
Docker方面,容器本身不需要迁移,数据卷和镜像才是关键。镜像可以用docker save导出为tar文件,到新机器上docker load导入;数据卷则直接打包目录拷贝,因为Docker的数据卷本质上是宿主机上的文件夹。实际操作我习惯先盘点自己有哪些镜像和数据卷,再决定哪种方式最省事。
6. 数据恢复实战:从“手滑”和“硬件故障”中抢救数据
6.1 误删文件的抢救:先从备份袋里找,再谈其他
误删文件后第一反应不是下载数据恢复软件,而是冷静想一想:这个文件有没有备份?如果你按照前面搭建的方案做过备份,直接去备份目录里找一下就好,这是成本最低、成功率最高的方式。
如果确实没有备份,再考虑使用extundelete或testdisk这类数据恢复工具。它们在文件被删除后、且该磁盘区域尚未被新数据覆盖的情况下,有机会找回文件。但请记住,这类工具不是万能的,成功率受文件系统活动的影响很大。最理想的情况是:一旦发现误删,立刻停止对那块分区的一切写操作,然后挂载只读方式尝试恢复。
我把这个操作流程写出来給大家参考:
bash复制sudo fdisk -l
sudo umount /dev/sda2
sudo extundelete /dev/sda2 --restore-file /home/username/important.pdf
这里面关键是先卸载分区,避免系统继续写入覆盖被删数据。
6.2 恢复已损坏的数据库或版本库:软件自身的“后悔药”
如果你是开发人员,数据库或Git仓库损坏往往比误删文件更让人崩溃。好消息是,这些软件通常自带“后悔药”。
MySQL/MariaDB有二进制日志(binlog),可以基于时间点做增量恢复。如果数据文件损坏但日志完整,可以用mysqlbinlog工具把日志里的操作重放到故障前一刻。PostgreSQL则使用WAL日志,配合pg_basebackup可以做时间点恢复。
Git仓库的恢复相对简单一些。如果误操作导致工作区文件丢失,但提交历史还在,用git reset --hard HEAD就能回到最近一次提交的状态;如果连提交历史都丢了,git reflog还能找到所有分支和HEAD的变动记录,用它找到丢失前的版本号,再git reset --hard回去。我处理过好几次团队成员的代码“消失”,基本都是靠git reflog救回来的,所以想提醒大家一点:Git的提交历史是你最值得信任的备份,多提交、勤推送是成本最低的安全策略。
6.3 硬盘挂载失败的排查思路
还有一种“数据恢复”场景是硬盘突然挂载不上,通常是异常关机或长期未正常卸载导致的。遇到这种情况先别急着重启,按下面的思路排查。
第一步查看硬盘是否被识别,用lsblk或sudo fdisk -l确认设备存在。第二步尝试手动挂载,sudo mount /dev/sdb1 /mnt,如果报错提示“wrong fs type”或者“bad superblock”,那就需要做进一步检查。第三步对ext4文件系统检查修复,执行sudo fsck /dev/sdb1,注意一定要先卸载分区再执行,否则可能造成二次损坏。fsck经常会停在交互式提问界面,比如“Fix? yes/no”,自动修复可以直接用sudo fsck -y /dev/sdb1。
绝大多数异常关机导致的挂载失败,用fsck都能修复。如果fsck都救不回来,就要考虑使用photorec做底层数据恢复,但此时已经不是系统层面的问题了,属于专业数据恢复范畴。
7. 跨平台与跨架构迁移:走出Ubuntu的舒适区
7.1 WSL迁移:Windows上也能保留Ubuntu工作环境
很多人现在用WSL在Windows下跑Ubuntu,这套环境同样有备份和迁移的需求,而且实现思路和原生Ubuntu略有不同。
WSL下的备份其实很简单:整个WSL实例对应一个文件系统镜像,可以用wsl --export把整个发行版导出为一个tar文件,再通过wsl --import在新机器上导回。命令如下:
bash复制wsl --export Ubuntu ubuntu_backup.tar
wsl --import Ubuntu-new ubuntu_new_dir ubuntu_backup.tar
这里有个细节,导出的tar文件可能非常大,最好放在磁盘空间充裕的位置。另外,wsl --import导入时指定的目录是WSL发行版的安装位置,要确保目标盘有足够剩余空间。
我在Windows的开发机上就用这种方式把WSL环境完整搬过几次,连里面装好的Python包和Node版本都一模一样,几乎不需要重新配置。
7.2 从x86到ARM(如鲲鹏、飞腾)的迁移要点
这个话题直接关系到国产化替代项目,现在很多团队把应用从x86平台迁到ARM架构的机器上,Ubuntu本身是跨架构的,所以问题集中在应用层。我这里说几条实际迁移中不得不注意的点,帮大家少踩坑。
首先是.so动态库。很多第三方厂商只提供x86版本编译好的.so文件,迁移到ARM后无法加载,这部分需要在源码可用的情况下重新编译,或者找厂商要ARM版本。其次是Python/C++等语言依赖的预编译包,很多PyPI包会提供manylinux系列轮子,但不同架构对应的文件名不一样,x86_64和aarch64不能通用,迁移时建议重建虚拟环境并用pip download拉取对应架构的依赖,防止隐性问题。第三是Docker镜像,x86镜像在ARM平台不能直接运行,需要用docker buildx构建多架构镜像或者拉取ARM架构的镜像变体。
一个绕不开的通用工具是Docker buildx,它的--platform参数可以一次性构建linux/amd64和linux/arm64两套镜像,这比分开维护两个构建流程省力太多。如果你正在做国产化迁移,提前把这个能力搭起来,后面的路会顺很多。
7.3 数据库整体迁移:从ClickHouse到达梦,思路都是一样的
数据库迁移是“迁移”里技术含量最高的一环,不管是开源的ClickHouse还是商业化的达梦数据库,整个迁移逻辑都可以拆成三步:结构迁移、数据迁移、校验切换。
结构迁移是把表结构、索引、视图等数据库对象搬到目标库,这一步通常用数据库自带的迁移工具或手工执行DDL脚本。数据迁移最常用的方案是导出导入,ClickHouse可以用clickhouse-client --query "SELECT * FROM table FORMAT Native" > dump.data导出,再在目标库导入;达梦自带dmfldr工具做数据装载。校验切换是整个流程里最关键的收尾步骤,要做行数对比、关键字段抽样比对、业务场景回归测试,确认无误后才能把应用连接切换到新库。
这里给大家一个血泪教训:千万别只比对行数。行数一致不代表数据一致,字段值差异、字符集问题、精度丢失都是数据迁移的常见坑,一定要做抽样内容对比,别偷懒。
8. Ubuntu版本升级与迁移的一次实践记录
分享一个我今年初帮朋友处理的实际案例,这台机器上有重要的开发环境,但系统还是Ubuntu 20.04,由于安全支持和部分软件包版本逐渐老旧,需要升级到22.04 LTS。这个故事里的步骤和遇到的问题,正好是前面所有内容的一个综合应用。
升级之前我做了两件事:用Timeshift创建了系统快照,用rsync把/home下的Projects目录同步到了外部硬盘。然后执行了标准升级流程:
bash复制sudo apt update && sudo apt upgrade
sudo do-release-upgrade -d
do-release-upgrade会自动处理软件源切换、软件包安装和清理,整个过程会问几次问题,比如是否保留旧的配置文件、是否重启服务等,大多数情况选默认就行。整个升级过程大概40分钟,期间会断网、断图形界面,属正常现象,不要中途中断。
升级完成后重启,我发现了两个问题。第一个是第三方软件源失效,因为升级后系统版本号变了,之前添加的PPA源可能不适用,解决办法是检查/etc/apt/sources.list.d/下的*.list文件,失效的源手动注释或删除。第二个是旧版本残留软件包,用sudo apt autoremove清理后,系统干净许多。
升级一切顺利。但我要强调的是:如果没有升级前那两个备份动作,这个过程我是不会放心做的。系统升级是备份需求最强的场景之一,没有后备方案就贸然升级,等于没系安全绳就高空作业。
9. 个人经验与避坑清单
最后分享几条我在无数次备份、恢复、迁移操作中攒下来的经验。这些内容文章正文里零零散散提过一些,但我觉得值得集中列一遍,方便大家直接对照自查。
备份策略建议:
- 快照备份与数据备份要分开,不要都放在同一块硬盘上,否则硬件故障时“全军覆没”。
- 快照保留数量不是越多越好,磁盘空间有限,我一般保留5个,覆盖近一个月内的系统状态即可。
- 每一次大操作(系统升级、批量装软件、改系统配置)前,手动创建一个快照,这是成本最低的保险。
恢复操作禁忌:
- 恢复快照或镜像前,一定要确认目标盘选对了,恢复操作不可逆,选错盘等于把数据清除。
- 执行
fsck、Clonezilla恢复等操作前,务必备份或卸载相关分区,避免二次损坏。 - 如果系统还能开机,先尝试用旧内核或Live环境排查问题,不要一上来就恢复快照,很多问题其实不用“动手术”就能解决。
迁移常见坑:
rsync路径末尾的/决定目录结构,细节处最容易出错。- WSL导出导入时注意目标盘空间,tar文件和解压后的文件体积可能差好几倍。
- 跨架构迁移时,提前确认所有依赖包和动态库是否有对应架构版本,越想当然,后面的坑越深。
- 数据库迁移后老老实实做抽样比对,行数一致只是最低标准,不是验收标准。
我自己的使用场景中,次数最多的是“升级前建快照、出问题回滚”,这套流程几乎每个月都会走一次,每次都稳。我强烈建议大家把备份当成习惯,而不是当成应急方案。种一棵树最好的时间是十年前,其次是现在;做一个备份最好的时间是装好系统那天,其次就是今天。
