Ubuntu系统迁移
环境
Machine | OS | |
---|---|---|
Origin | Machine1 | ubuntu1 |
Target | Machine2 | ubuntu2 |
迁移方向:Origin --> Target
引导方式:UEFI + GPT
前话
- 因为ubuntu一切皆文件, 故迁移系统就是将ubuntu2的系统文件(/目录下所有文件)完全替换成ubuntu1。
- 系统迁移和备份是同一个原理——都是拷贝复制OS文件, 但两者的环境略有不同。
- 系统备份:它是在本电脑上恢复OS文件,硬盘分区和引导位置都未改变;
- 系统迁移:既然是迁移,那么就是不同电脑之间的操作,硬件环境一定发生了变化,只讲OS文件替换进去是不行的,还要配置环境。
UEFI + GPT 系统引导程序那些事儿
ubuntu系统就是/目录下的所有文件,它存放于硬盘GPT分区的某个位置上。电脑开机的时候,不会智能到自动找到该OS文件并执行的地步,需要引导程序告诉计算机在什么位置寻找OS,故引导程序实际就是一道桥梁的作用。
-
对于一个在UEFI模式下安装的ubuntu系统,在安装时,某硬盘(本文是sda)一定有如下两个分区:
-
/dev/sda1--->OS System:此分区存放Ubuntu的系统文件,其中包含:
- /etc/fstab, /etc/fstab.d(可能没有):启动文件
- /boot/grub/grub.cfg:分区文件
注:在fstab启动文件中,可以看到里面根据分区的UUID绑定了/dev/sda1给/,将/dev/sda2绑定到/boot/efi中,这里也是启动的关键。如果UUID不正确,就无法找到引导程序和OS文件,系统恢复后无法正常开机。
/dev/sda2 ---> EFI System:此分区是在EFI下安装Ubuntu必要的,里面应该存放了引导程序。
-
-
系统备份与迁移
系统备份:因为备份恢复前后,电脑的分区不会改变,而且备份恢复改变的只是OS所在分区,不会影响到/dev/sda2的EFI System。所以就算换了OS文件,系统还是能正常引导修复。因此,系统备份没有系统迁移复杂,只需要复制拷贝OS文件即可。
-
系统迁移:因为是将系统从一台电脑移动到另外一台电脑,硬盘分区会变,EFI文件也会改变。所以对于系统迁移,建议:
在machine2上先重装系统,新系统中EFI System、fstab启动文件以及grub.cfg分区文件都是匹配的。即,新系统下一切正常,只需要删除ubuntu2然后移入ubuntu1即可,其他不变。
系统迁移正文
事先准备一个ubuntu启动盘
系统备份In Machine1
Machine1 ---> U盘启动 ---> Try Ubuntu进入livecd模式: 开终端,进入管理员权限。
-
挂载ubuntu1所在分区和移动硬盘
-
mkdir data
:在/目录下,创建data。 -
mount /dev/sda1 /mnt
:假设ubuntu1在Machine1的sda1上,将其挂载到mnt上 -
mount /dev/sdb1 /data
:假设移动硬盘在Machine1的sdb1上,将其挂载到data上
-
-
备份ubuntu1至移动硬盘
- 方法一: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
参数:
-c: 新建一个备份文档
-v: 显示详细信息
-p: 保存权限,并应用到所有文件
-z: 用gzip压缩备份文档,减小空间
-f: 指定备份文件的路径
–exclude: 排除指定目录,不进行备排除如下文件:
/proc:一个虚拟文件系统,系统运行的每一个进程都会自动在这个目录下面创建一个进程目录。既然是系统自动创建,也就没必要备份的必要了。
/tmp:一个临时文件夹,系统的一些临时文件会放在这里。
/lost+found:系统发生错误时(比如非法关机),可以在这里找回一些丢失文件。
/media:多媒体挂载点,像u盘、移动硬盘、windons分区等都会自动挂载到这个目录下。
/mnt:临时挂载点,你可以自己挂载一些文件系统到这里。
/run:系统从启动以来产生的一些信息文件。-
方法二,mksquashfs(如果用tar备份和恢复时出错,就用该方式)
mksquashfs /mnt/data/ubuntu.sfs
:备份系统sync
:让系统保存下数据
-
解除绑定:
umont /data
umount /mnt
系统恢复 In Machine2
- 使用启动u盘在Machine2上以EFI模式安装ubuntu2系统,本文分区如下:
- sda1 --> ubuntu
- sda2 --> EFI System
安装新系统之后,依然从U盘启动,Try Ubuntu进入livecd模式: 开终端,进入管理员权限。
-
挂载:
-
mkdir data
:在/目录下,创建data用以挂载移动硬盘 -
mount /dev/sda1 /mnt
:将ubuntu2挂载到mnt -
mount /dev/sdc1 /data
:将移动硬盘挂载到/data
-
-
保留原ubuntu2的启动文件和分区文件:(如果是本地系统备份的话,可略此步)
因为这两个文件记录了machine2上ubuntu2上的启动信息和分区信息,而系统备份中的文件是machine1的,放在新环境下,配置一定出错,所以要用本土的配置文件,只需换个系统文件即可。
-
cp /mnt/etc/fstab(若有fstab.d,就一并复制) /data
:保留原启动文件 -
cp /mnt/boot/grub/grub.cfg /data
:保留原分区文件
-
-
系统恢复
-
方法一: tar
rm -rf /mnt/*
:将挂载到/mnt上的原系统彻底删除(可能此命令有误,可用其他命令)tar -xvpzf /data/ubuntu.backup /mnt
:将备份系统恢复到挂载到/mnt上的ubuntucp /data/fstab(fstab.d) /mnt/etc
:恢复启动文件(本地备份恢复不需要此步)cp /data/grub.cfg /mnt/boot/grub
:恢复分区文件(本地备份恢复不需要此步) -
方法二:mksquashfs
mkdir /rescovery/mnt
mount -o loop /data/ubuntu.sfs /rescovery/mnt
:将备份文件恢复至/rescovery/mnt中cp -a /rescovery/mnt/* /mnt
:将备份文件完整地拷贝至ubuntu2挂载的/mnt中cp /data/fstab(fstab.d) /mnt/etc
:恢复启动文件(本地备份恢复不需要此步)cp /data/grub.cfg /mnt/boot/grub
:恢复分区文件(本地备份恢复不需要此步)
注:如果只是本地备份恢复到此即可结束(仅仅拷贝粘贴系统文件即可),如果是迁移系统,还需要有如下步骤!第6步,在系统迁移时试过了,但在系统启动时还是会出错;第7步,应该可行,但
sudo add-apt-repository ppa:yannubuntu/boot-repair
添加失败,来者需要特别注意。 -
-
引导修复1
-
从try ubuntu中为ubuntu2挂载虚拟文件系统,为引导修复做准备:
mount -o bind /dev /mnt/dev
mount -o bind /proc /mnt/proc
mount -o bind /sys /mnt/sys
chroot /mnt
:进入ubuntu2-
对比UUID
在try ubuntu中新建一个终端,输入
blkid
查看硬盘分区UUID在上面chroot /mnt过的终端中,使用
vim /etc/fstab
查看启动文件中的信息。对照/sda1(mount point为/)和/sda2(mount point为/boot/efi)绑定的两个UUID是否和/dev/sda1和/dev/sda2相吻合。(因为是拷贝的原ubuntu2系统中的文件,应该不会有错误,有错误的话,就需要修改。)grub-install /dev/sda update-grub
-
退出并卸载挂载
exit umount /mnt/dev umount /mnt/sys umount /mnt/proc umount /data umount /mnt sync
重启
-
-
引导修复2
-
从u盘启动,进入try ubuntu,安装boot-repair
sudo add-apt-repository ppa:yannubuntu/boot-repair 添加源 sudo apt-get update sudo apt-get install -y boot-repair 安装boot-repair
进入boot-repair使用Recommended repair进行修复。
-
参考文献: