Linux系统备份及迁移到新硬盘

  • Post author:
  • Post category:linux




Linux,系统备份,系统迁移




Linux系统备份及迁移到新硬盘



前言(环境说明):

最近把个人笔记本系统由win10换成ubuntu了,不再用虚拟机和win10自带的Linux子系统wsl了,记录一下系统备份方式。

linux本质是文件系统, 一切皆文件, 所以系统迁移的本质就是把原来系统中的所有文件都复制到新的硬盘中, 只不过要注意的是不仅仅单纯的把文件复制过去就能正常运行, ubuntu系统的启动还依赖于bios_grub的引导。

本流程以Ubuntu为例子,基于压缩和解压缩的方法实现系统的迁移, 不需要新硬盘上事先安装好ubuntu系统。



步骤



1. 备份系统(压缩原系统文件)

根据原来系统的分区个数来决定要打几个压缩包, 常规的分区做法是 /, /home, /boot, swap 四个分区, 所以备份系统就可以对 /, /home, /boot 分别打包, 生成三个压缩包。



1)对 /目录 进行打包

sudo tar -cvpzf ubuntu_bak.tar.gz --exclude=/proc --exclude=/tmp --exclude=/home --exclude=/boot --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/run /

这里排除了几个不需要的文件夹:

proc 存放系统的进程文件, 根据当前系统中运行的进程动态改变
tmp 存放系统缓存文件
home 因为home目录单独挂载在一个分区, 所以待会单独打包
root 因为root目录单独挂载在一个分区, 所以待会单独打包
lost+found 系统发生异常时尝试根据此文件夹中的内容进行恢复
media 插入外部存储设备如u盘时系统自动挂载的位置
mnt 提供给用户手动挂载设备的文件夹
run 系统运行时产生的日志文件



2)对 /home目录 进行打包

sudo tar -cvpzf ubuntu_home_bak.tar.gz /home



3)对 /boot目录 进行打包

sudo tar -cvpzf ubuntu_boot_bak.tar.gz /boot

打包完成, 此时得到三个压缩文件 ubuntu_bak.tar.gz, ubuntu_home_bak.tar.gz, ubuntu_boot_bak.tar.gz, 将这三个文件保存到u盘中。



2. 格式化新的目标系统硬盘,创建分区

对新硬盘进行分区:

首先使用u盘制作一个ubuntu的安装盘,制作安装盘的软件可以选择 ultraISO, rufus 之类。

将新硬盘通过硬盘盒也好, 直接装到原来的硬盘位置也好, 连接到电脑上, 然后插上启动盘。

启动电脑进入bios设置优先启动设置为 usb 设备, 然后进入安装盘系统,选择

试用ubuntu

而不安装。

进入试用后, 打开自带的GParted软件对新硬盘进行分区, 首先新建分区表, 类型可以是msmod 或者 gpt, 建议 gpt。

然后对新硬盘建立分区,这里以100G硬盘为例(大小, 类型, 挂载):

# 大小, 类型, 挂载
1M , 未格式化, 无
1G , ext4, /boot
30G , ext4, /
8G, linux_swap, 无
剩下的全部磁盘空间, ext4, /home

保存分区结果, 在第一个 1M 的分区上右键, 管理flag, 勾选bios_grub, 这一步是将这个分区设置存放 bios_grub 主引导程序的位置。



3. 系统迁移到新的目标系统硬盘

解压备份号的原系统文件到新硬盘

然后将之前打包的三个压缩包分别解压到新硬盘中对应的分区中

解压 /目录
tar -xzvpf ubuntu_backup.tar.gz -C 新硬盘中被划分为根目录的分区位置
解压 /boot目录
tar -xzvpf ubuntu_boot_backup.tar.gz -C 新硬盘中被划分为boot目录的分区位置
解压 /home目录
tar -xzvpf ubuntu_home_backup.tar.gz -C 新硬盘中被划分为home目录的分区位置

修复新硬盘中的grub引导程序

解压完成后, 新硬盘中已经有了原来的系统, 但是此时还不能正常引导启动, 可以下载 boot-repair 进行自动修复

(本质是安装grub程序到硬盘首部的bios_grub分区, 然后修改/boot/grub/grub.cfg文件中/目录和/boot目录对应的UUID)

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install boot-repair
boot-repair

启动boot-repair后, 点击高级设置, 设置/boot目录和根目录为新硬盘上对应的分区, 设置安装grub程序的位置为新硬盘。

点击执行进行修复, 修复完成后, 此时新硬盘已经具备了正确启动grub的能力, 但是还不能正确加载各个其他分区, 比如swap和home

手动设置新硬盘中对各个分区的挂载设置

使用blkid命令或者直接在GParted中查看新硬盘各个分区的 UUID, 然后打开新硬盘中 /etc/fstab 文件进行编辑, 将上面查到的各个UUID分别修改到这个文件中对应的位置, 该文件默认只读, 可通过 sudo chmod 666 /etc/fstab 修改权限

此时新硬盘已经能够正常引导系统了, 但是因为之前打包根目录时丢弃了不必要的文件夹, 所以还需要手动将这些文件夹在新硬盘的系统中重建回来 mkdir proc lost+found mnt sys tmp media run home boot

至此系统已经迁移完毕, 关闭ubuntu使用系统, 拔掉usb启动盘, 把硬盘插到硬盘位置, 启动电脑, 进入系统。



4. 解决新硬盘启动时首先会进入长时间黑屏问题

此时可能会黑屏很久然后才能进入系统, 那么就需要进入系统后

sudo apt-get install v86d hwinfo

然后编辑 /etc/default/grub 这个文件, 将GRUB_GFXPAYLOAD_LINUX=1024×768×24随便添加到哪里, 注意, 这个值需要根据自己显示器的分辨率进行修改, 不然没有效果

然后,

echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
sudo update-grub
sudo update-grub2
sudo update-initramfs -u

然后下载 grub-customizer :

sudo apt-get install grub-customizer
grub-customizer

进入软件后可调整开机时的启动顺序, 调整grub启动菜单的停留时长, 可以设置为0, 那么开机后直接进入ubuntu, 设置完毕后, reboot 查看结果.

至此, ubuntu系统迁移到新硬盘完毕。



5. 补充:

ubuntu系统引导顺序:

bios_grub程序指定/boot分区位置

加载 /boot/grub/grub.cfg 文件, 找到 /根目录 位置并加载

从根目录中找到 /etc/fstab 文件加载 ,该文件中包含了其他分区的硬件uuid, 根据这些uuid对其他分区进行加载,系统启动完成。



版权声明:本文为Acegem原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。