ubuntu系统迁移与备份

Ubuntu系统迁移

环境

Machine OS
Origin Machine1 ubuntu1
Target Machine2 ubuntu2

迁移方向:Origin --> Target

引导方式:UEFI + GPT

前话

  1. 因为ubuntu一切皆文件, 故迁移系统就是将ubuntu2的系统文件(/目录下所有文件)完全替换成ubuntu1。
  2. 系统迁移和备份是同一个原理——都是拷贝复制OS文件, 但两者的环境略有不同。
    • 系统备份:它是在本电脑上恢复OS文件,硬盘分区和引导位置都未改变;
    • 系统迁移:既然是迁移,那么就是不同电脑之间的操作,硬件环境一定发生了变化,只讲OS文件替换进去是不行的,还要配置环境。

UEFI + GPT 系统引导程序那些事儿

  1. ubuntu系统就是/目录下的所有文件,它存放于硬盘GPT分区的某个位置上。电脑开机的时候,不会智能到自动找到该OS文件并执行的地步,需要引导程序告诉计算机在什么位置寻找OS,故引导程序实际就是一道桥梁的作用。

  2. 对于一个在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必要的,里面应该存放了引导程序。

  3. 系统备份与迁移

    • 系统备份:因为备份恢复前后,电脑的分区不会改变,而且备份恢复改变的只是OS所在分区,不会影响到/dev/sda2的EFI System。所以就算换了OS文件,系统还是能正常引导修复。因此,系统备份没有系统迁移复杂,只需要复制拷贝OS文件即可。

    • 系统迁移:因为是将系统从一台电脑移动到另外一台电脑,硬盘分区会变,EFI文件也会改变。所以对于系统迁移,建议:

      在machine2上先重装系统,新系统中EFI System、fstab启动文件以及grub.cfg分区文件都是匹配的。即,新系统下一切正常,只需要删除ubuntu2然后移入ubuntu1即可,其他不变。

系统迁移正文

事先准备一个ubuntu启动盘

系统备份In Machine1

  1. Machine1 ---> U盘启动 ---> Try Ubuntu进入livecd模式: 开终端,进入管理员权限。

  2. 挂载ubuntu1所在分区和移动硬盘

    • mkdir data:在/目录下,创建data。
    • mount /dev/sda1 /mnt:假设ubuntu1在Machine1的sda1上,将其挂载到mnt上
    • mount /dev/sdb1 /data:假设移动硬盘在Machine1的sdb1上,将其挂载到data上
  3. 备份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:让系统保存下数据

  4. 解除绑定:

    umont /data

    umount /mnt

系统恢复 In Machine2

  1. 使用启动u盘在Machine2上以EFI模式安装ubuntu2系统,本文分区如下:
  • sda1 --> ubuntu
  • sda2 --> EFI System
  1. 安装新系统之后,依然从U盘启动,Try Ubuntu进入livecd模式: 开终端,进入管理员权限。

  2. 挂载:

    • mkdir data:在/目录下,创建data用以挂载移动硬盘
    • mount /dev/sda1 /mnt:将ubuntu2挂载到mnt
    • mount /dev/sdc1 /data:将移动硬盘挂载到/data
  3. 保留原ubuntu2的启动文件和分区文件:(如果是本地系统备份的话,可略此步)

    因为这两个文件记录了machine2上ubuntu2上的启动信息和分区信息,而系统备份中的文件是machine1的,放在新环境下,配置一定出错,所以要用本土的配置文件,只需换个系统文件即可。

    • cp /mnt/etc/fstab(若有fstab.d,就一并复制) /data:保留原启动文件
    • cp /mnt/boot/grub/grub.cfg /data:保留原分区文件
  4. 系统恢复

    • 方法一: tar

      rm -rf /mnt/*:将挂载到/mnt上的原系统彻底删除(可能此命令有误,可用其他命令)

      tar -xvpzf /data/ubuntu.backup /mnt:将备份系统恢复到挂载到/mnt上的ubuntu

      cp /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添加失败,来者需要特别注意。

  5. 引导修复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
        
      • 重启

  6. 引导修复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进行修复。

参考文献

  1. https://blog.csdn.net/sunny0660/article/details/79274642
  2. https://blog.csdn.net/mbytes/article/details/100165856
  3. https://blog.csdn.net/qq_35523593/article/details/78545530

你可能感兴趣的:(ubuntu系统迁移与备份)