Ubuntu 系统备份/恢复/迁移
本文中 系统备份/恢复 主要指本机不更换硬件情况下的备份/恢复,迁移 这里指把系统从本机迁移到不同配置的机器上。另一种常见场景是电脑更换硬盘后想把系统迁移到新的硬盘,直接全盘克隆就行。本文主要介绍系统迁移,系统备份/恢复可以算是迁移操作的子集。
本文基本参考 ubuntu系统迁移与备份,对一些细节和错误进行添加和修正。
基本环境
本文所有操作基于以下环境,不同系统/版本等在一些文件/命令上可能会有少许差异:
系统版本:Ubuntu 20.0.4
引导方式:UEFI + GPT
PS: 源机器中
home
、boot
等目录未单独分区,如果有单独分区则分别处理不同分区
前言
前置知识
Ubuntu 中遵循一切皆文件的宗旨,所以备份和迁移都是靠文件复制粘贴实现的,主要问题在于需要哪些文件不需要哪些文件。
从文件的角度看,/
目录下的所有文件构成了 Ubuntu 系统。而从更底层一些的硬件(这里指硬盘)来看,完整的 Ubuntu 系统由 系统 和 引导程序 两部分组成。系统 存放 Ubuntu 的系统文件,即 /
目录下的内容,而 引导程序 用于启动时引导计算机在硬盘里找到 系统 所在位置。通常这俩部分分别在硬盘的两个分区里,通过 fdisk -l
命令可以查看分区信息,如图 1 所示:
图 1 Ubuntu 硬盘分区
这里系统和引导处于同一块硬盘的两个不同分区里,蓝色框里是分区名,绿色框里是分区类型。EFI 代表引导程序分区,这里为 /dev/nvme0n1p1
,而系统位于 /dev/nvme0n1p2
分区。
除了系统环境、软件等内容外,系统 中还包括:
/etc/fstab
,/etc/fstab.d
(可能没有): 启动文件/boot/grub/grub.cfg
: 分区文件
原理
-
系统备份:备份的是 系统 这个部分,即
/
目录下的内容,恢复也只需要恢复备份的/
文件夹。 -
系统迁移:涉及硬件上的改变,不能直接复制粘贴
/
下的内容。对于 系统,跟特定硬件相关的文件肯定不能直接复制到新系统。而对于 引导程序,由于硬盘变了,分区信息等也改变了,如果直接复制粘贴会导致计算机启动时找不到 系统 所在位置。所以系统迁移一般做法是先在新机器上按正常流程安装系统(使得 EFI System、fstab 启动文件以及 grub.cfg 分区文件都是匹配的),然后再把旧机器中部分文件替换到新机器中。
准备工作
假设把旧机器上的系统 A 备份恢复/迁移为新机器上的系统 B。
准备一个 Ubuntu 启动盘(推荐 Ventoy),再准备一个用来保存备份的移动硬盘(建议)。也可以把备份直接存到 U 盘,但需要注意容量以及文件系统格式(FAT32 无法保存单个 4GB 以上的文件)。
系统备份(在 A 上操作)
-
使用 Ubuntu 启动盘在旧机器上进入 live CD 模式,即 try ubuntu,使用 root 权限进行后续操作(
sudo -i
)。 -
使用
fdisk
命令查看硬盘分区,找到 A 系统 所在分区(参考图 1),我这里为/dev/nvme0n1p2
。顺便看看移动硬盘所在分区,这里为/dev/sdb2
。 -
挂载移动硬盘和 A 系统
- 进入根目录
/
mkdir data
: 创建data
文件夹用于挂载移动硬盘mount /dev/sda2 /data
: 挂载移动硬盘到data
目录mount /dev/nvme0n1p2 /mnt
: 挂载 A 系统到/mnt
目录
- 进入根目录
-
通过
tar
将需要迁移的文件备份到移动硬盘tar -cvpzf /data/ubuntu.backup --exclude=/mnt/proc --exclude=/mnt/lost+found --exclude=/mnt/tmp --exclude=/mnt/run --exclude=/mnt/media --exclude=/mnt/mnt /mnt
tar
的 exclude 参数有位置要求,需要根据tar
版本来选择合适的放置位置(不同版本要求可能是相反的,这里是 1.3,需要把 exclude 放在待压缩目录前面)参数说明:
- -c:新建一个备份文档
- -v:显示详细信息
- -p:保存权限,并应用到所有文件
- -z:用 gzip 压缩备份文档
- -f:指定备份文件的路径
- --exclude:排除指定目录
排除文件说明:
这里把 live CD 里的
/mnt
看作根目录,因为整个系统 A 都挂载在/mnt
下。/proc
:一个虚拟文件系统,系统运行的每一个进程都会自动在这个目录下面创建一个进程目录。既然是系统自动创建,也就没必要备份的必要了。/tmp
:一个临时文件夹,系统的一些临时文件会放在这里。/lost+found
:系统发生错误时(比如非法关机),可以在这里找回一些丢失文件。/media
:多媒体挂载点,像u盘、移动硬盘、windons分区等都会自动挂载到这个目录下。/mnt
:临时挂载点,你可以自己挂载一些文件系统到这里。/run
:系统从启动以来产生的一些信息文件。
-
解除移动硬盘和系统 A 的挂载
umount /data umount /mnt
系统恢复/迁移(在 B 上操作)
系统恢复
如果是在旧机器上恢复备份,直接通过 live CD 把备份解压到 /
目录中然后手动创建之前排除的几个文件夹即可,一些操作细节可参考系统迁移步骤。
系统迁移
-
使用 Ubuntu 启动盘正常安装 Ubuntu,然后同上在 live CD 中查看新机器上 系统 B 所在分区和移动硬盘分区,这里刚好也分别为
/dev/nvme0n1p2
和/dev/sda2
.PS: 新系统 EFI 分区在安装系统时已经自动配置好了,不需要我们额外修改
PPS: 虽然新机器上 系统 B 的分区名跟 A 一样,但对应的 UUID 肯定是不同的,所以还需要额外配置,使得新系统能够正常启动
-
挂载移动硬盘和 B 系统
- 进入根目录
/
mkdir data
: 创建data
文件夹用于挂载移动硬盘mount /dev/sda2 /data
: 挂载移动硬盘到data
目录mount /dev/nvme0n1p2 /mnt
: 挂载 B 系统到/mnt
目录
- 进入根目录
-
备份 B 的启动文件和分区文件
cp /mnt/etc/fstab /data # 备份启动文件。若有fstab.d,也一并复制 cp /mnt/boot/grub/grub.cfg /data # 备份分区文件
-
系统迁移
-
把旧系统 A 迁移到新系统 B 中
rm -rf /mnt/* # 删除新系统 B 的内容 tar -xvpzf /data/ubuntu.backup -C /mnt # 将旧系统 A 的备份解压到新系统 B 中,注意这里的 `/mnt` 其实就是系统 B 的 `/` 目录
-
恢复 B 的启动文件和分区文件
cp /data/fstab(fstab.d) /mnt/etc # 恢复启动文件 cp /data/grub.cfg /mnt/boot/grub # 恢复分区文件
-
-
使用
boot-repair
软件修复引导-
安装 boot-repair
sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt update sudo apt install boot-repair
-
直接在命令行中输入
boot-repair
打开软件,使用Recommended repair
一路默认选项确定就行,这里软件会自动帮你创建前面排除的那些文件夹,不需要再手动创建
-
-
解除移动硬盘和系统 B 的挂载
umount /data umount /mnt
-
重启,完事