admin管理员组

文章数量:1530021

由于linux的核心思想是“一切皆文件”,所以我们通过拷贝所有系统文件的方式来备份及恢复系统。
已在ubuntu16.04和ubuntu20.04上操作成功。
引言
最近买了台新电脑,如果重装ubuntu 系统,那么很多的软件和环境都要重新安装,这是一个很复杂的工程,那么就想,能不能把旧系统上的环境原封不动地迁移过来,那么就不需要重新配置环境了,使用systemback又不可靠,容易出BUG,导致失败。
然后就想到了使用tar的方式进行迁移,网上有很多的方式,但是基本上过程都不清楚,也没有讲清楚为什么要这样做,流程也不一定对,在折腾了很久后,总算成功了,现在将其方法整理出来,希望能帮到需要的人,下面以ubuntu16.04为例。
一、准备工作
1.U盘(4G以上)一个,请提前备份好文件。
2.软件:UltraISO(软碟通),用于烧录系统
3.ubuntu16.04镜像
4. 移动硬盘(如果系统备份文件过大需要移动硬盘存储备份文件)

二、在windows下通过UltraISO(软碟通)制作live usb(即ubuntu启动盘)
1.点击图中按钮,选择镜像
2.启动->写入硬盘映像->便捷启动->写入新的驱动器引导扇区->Syslinux,成功后点击写入,等待完成。至此live usb制作完成(如果是使用光盘制作启动盘,那么点击工具->刻录光盘映像->刻录。

三、备份系统

将上面图片computer里面的系统文件进行压缩打包,实际上,整个Ubuntu系统就是由这些文件组成,要复制系统那么就要将里面这些文件拷贝到新系统盘下,那么要先备份,打包方式如下:

#开终端,
cd / #进入到根目录。
#切换到root用户:
sudo su  #输入密码。
tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys --exclude=/media /

#这里排除了不需要备份的proc、lost+found、mnt、sys、media等目录。备份完成后会有提示:从上次错误的#地方…(记不清了),不管它。打包完成后在根目录下会出现backup.tgz文件。此文件会比较大,将此文件备份到#移动硬盘或U盘中,但FAT32格式的u盘不支持4G以上大文件。
四、开始迁移
1.换到新电脑(或新硬盘),插入u盘,开机通过F2设置uefi启动方式、u盘启动或F12选择U盘启动(不通品牌电脑按键不同),进入后选择安装ubuntu系统,等待新系统安装完成,这一步必须有,先安装双系统。
2. 重启,依旧选择u盘启动,进入后选择 try ubuntu without install,进入U盘中的ubuntu系统。
3. 查看u盘和装ubuntu系统的磁盘所在目录:可以在左侧docker栏看到磁盘标志,不需要手动挂载,点一下图标即可自动挂载u盘和系统硬盘。然后cd /media ls查看u盘和硬盘挂载的目录,比如我的u盘挂载点是/media/cdrom ,ubuntu系统盘挂载点是/media/ubuntu/46eb-38jk-fadf-hjfh-adjf。
4. 接下来备份安装好的系统里面的两个重要的文件到u盘里,打开安装的新ubuntu系统所在盘,可以看到boot/grub下面有个grub.cfg文件,etc下面有个fstab文件。

这两个文件非常重要,fstab文件是启动系统时用来加载磁盘的,grub.cfg文件是系统开机的引导项,系统启动的时候就是需要从这个文件里面读取配置,然后才能顺利进入系统,windows10系统的启动也需要依赖这个文件,所以这两个文件是系统能否迁移成功的关键
5. 进入系统盘路径:

cd /media/ubuntu/46eb-38jk-fadf-hjfh-adjf && ls

发现这里是新装的ubuntu系统的完整文件。
执行

sudo rm -rf ./*

删除所有目录。
插上移动硬盘将备份文件backup.tgz拷到此目录下。

#比如我的是:
sudo cp media/Toshiba/backup.tgz .
#然后解压文件:
sudo tar xvpfz backup.tgz

经过漫长等待,文件解压完毕。然后重建没有备份的文件,这个操作不能少,否则也会启动不起来,这一步也很重要

sudo mkdir proc lost+found mnt sys media

6.还原与引导有关的两个文件(etc/fstab文件和boot/grub/grub.cfg),这一步非常重要:
打开两个文件看到里面的内容如下:
fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/nvme0n1p10 during installation
UUID=69edb9cd-1fbf-4a7f-8dbc-bec56e70843f /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=880E-62B7  /boot/efi       vfat    umask=0077      0       1
# swap was on /dev/nvme0n1p9 during installation
UUID=6e32e74c-1b88-40e5-bfe8-92cb34a62133 none            swap    sw              0       0

这个文件是系统启动时自动去加载磁盘的,这个文件如果不正确直接会报错,导致进不了系统,那么先把这个文件进行替换,将刚刚备份好的新系统中的fstab文件替换掉迁移过来系统中的etc/fstab文件
接着,需要修改迁移过来系统的boot/grub/grub.cfg文件,这个文件不要直接替代,否则启动系统会报错,类似下面这样。

重新使用U盘进入系统,检查/boot文件下,发现下面找不到vmlinuz-4.15.0-45-generic文件,仔细查看旧系统里面的grub.cfg文件,可以看到如下语句,现在的boot下面是有vmlinuz-4.15.0-140-generic这些文件的,那说明是grub.cfg文件写的不对。

那么应该修改迁移过来的系统的grub.cfg文件,打开备份好的grub.cfg文件,ctrl+F键,查找UUID,后面就是一连窜的号码,这就是ubuntu系统的磁盘号,类似于

search --no-floppy --fs-uuid --set=root 69edb9cd-1fbf-4a7f-8dbc-bec56e70843f

69edb9cd-1fbf-4a7f-8dbc-bec56e70843f 就是磁盘号。
然后打开迁移系统的grub.cfg文件:

sudo gedit /boot/grub/grub.cfg

使用同样的方法找到里面的UUID号
ctrl+H
把里面所有的UUID号,替换为备份grub.cfg里面的UUID号。
到了这一步,ubuntu系统应该可以正常启动了,但是如果你安装的是windows加ubuntu的双系统,那么只改这个进入windows还是会报错,如下图,

这是因为双系统模式下windows也是通过grub.cfg这个文件来进行启动的,那么grub.cfg文件里面启动windows部分的代码也需要修改,打开grub.cfg文件,找到含有报错的880E-62B7的代码。

那么同样只需要修改880E-62B7即可,这明显是个磁盘号,那么怎么找到这个磁盘号,
一种是打开备份的grub.cfg文件,查找到这个磁盘号。
如果已经把备份的grub.cfg文件删除掉了,那么打开etc/fstab文件,可以查找到磁盘号,如图

类似于这个,把这个磁盘号替换掉即可正常启动ubuntu和windows,ubuntu系统和原有的系统一模一样.
7.拔掉u盘硬盘,reboot重启
从上述中可以得出u一个结论,ubuntu系统就是由一堆文件组成,迁移系统需要的就是更改磁盘号,其中最重要的就是/etc/fstab和/boot/grub/grub.cfg文件,如果自己可以编写这个文件的话,甚至都可以不需要安装新系统就进行系统复制。

本文标签: 双系统系统Ubuntutarubunu