linux · 2021年 6月 7日 0

Linux系统备份迁移

问题需求

适用于将整个linux系统迁移到一块新的硬盘新电脑上。

原 linux(ubunt20.04)安装在 128G 备用盘上,新硬盘 512G固态硬盘

原硬盘分区情况

/50G
/home78G
Disk /dev/sda:119.25 GiB,128035676160 字节,250069680 个扇区
Disk model: Lenovo SPEED UP-
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xdde609a1

设备       启动     起点      末尾      扇区  大小 Id 类型
/dev/sda1  *        2048  97726463  97724416 46.6G 83 Linux
/dev/sda2       97726464 250068991 152342528 72.7G 83 Linux

新硬盘分区情况:

/107G
/home405G
Disk /dev/nvme0n1:476.96 GiB,512110190592 字节,1000215216 个扇区
Disk model: THNSF5512GPUK TOSHIBA                   
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:ECCB0DE6-01D8-4C75-9BB9-4FA0441F14D1

设备                起点       末尾      扇区  大小 类型
/dev/nvme0n1p1      2048  209717247 209715200  100G Linux 文件系统
/dev/nvme0n1p2 209717248 1000215182 790497935  377G Linux 文件系统

tar方法

对新盘分区

sudo fdisk -l
sudo fdisk /dev/nvme0n1
sudo mkfs.ext4 /dev/nvme0n1p1 
sudo mkfs.ext4 /dev/nvme0n1p2 
img
img
img
img
img
img
img
img

选择磁盘,删除原有分区,新建分区,格式化

备份系统

/ 分区备份

sudo mount /dev/nvme0n1p1 /media/liupei/

推荐使用 pigz多线程提高迁移速度

sudo apt install pigz

sudo tar --use-compress-program=pigz -cvpf /media/liupei/u20.tgz --exclude=/cdrom --exclude=/home --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/proc --exclude=/run --exclude=/tmp / 

/ 分区迁移

将系统解压到目标磁盘

sudo tar --use-compress-program=pigz -xvpf u20.tgz -C /media/liupei/

重建exclude的目录

sudo mkdir cdrom home lost+found media mnt proc run tmp

/home 分区备份与迁移

mkdir tmp
sudo mount /dev/nvme0n1p2 tmp ceshi/
sudo tar --use-compress-program=pigz -cvpf ceshi/h.tgz --exclude=/home/ceshi /home/liupei/
sudo tar --use-compress-program=pigz -xvpf ceshi/h.tgz -C ceshi/

配置文件修改

系统启动文件配置

把新硬盘的/boot/grub/grup.cfg里面的uuid替换掉

如果没有把boot单独分区,那么只要将里面的uuid全部改成新硬盘的uuid,(考虑启动过程没有其他挂载的情况)。如果是单独分区的话,注意这个文件下还有boot的uuid的值(我的硬盘没有boot单独分区)。

uuid查询方法:1. sudo blkid ; 2. ls -l /dev/disk/by-uuid

sudo vim /boot/grub/grub.cfg

%s /uuid_old/uuid_new/g 

分区挂载配置

修改 /etc/fstab 文件,把要启动自动挂载的分区都写上

sudo vim /etc/fstab

%s /uuid_root_old/uuid_root_new/g
%s /uuid_home_old/uuid_home_new/g

# or
genfstab -U /sda1 >> /mnt/etc/fstab
genfstab -U /sda2 >> /mnt/etc/fstab

grub安装与更新

Ubuntu使用BIOS启动时, GPT分区表下安装grub2报错:

iupei@T470:~$ sudo grub-install /dev/nvme0n1
[sudo] liupei 的密码: 
正在为 i386-pc 平台进行安装。
grub-install:警告: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install:警告: 无法嵌入。在此次安装中 GRUB 只能通过使用块列表安装。但是块列表是不可信赖的,不推荐使用。.
grub-install:错误: 停止进行块列表安装.

解决方法0:(仅对于arch)

arch-chroot /mnt 
grub-install /dev/nvme0n1
grub-mkconfig -o boot/grub/grub.cfg
reboot

解决方法1:

liupei@T470:~sudo parted /dev/nvme0n1 set 1 bios_grub on
信息: 你可能需要 /etc/fstab


liupei@T470:~ sudo parted /dev/nvme0n1 print
型号:THNSF5512GPUK TOSHIBA (nvme)
磁盘 /dev/nvme0n1: 512GB
扇区大小 (逻辑/物理):512B/512B
分区表:gpt
磁盘标志:
编号  起始点  结束点  大小   文件系统  名称  标志
 1    1049kB  107GB   107GB  ext4            bios_grub
 2    107GB   512GB   405GB  ext4


liupei@T470:~$ sudo grub-install /dev/nvme0n1
正在为 i386-pc 平台进行安装。
安装完成。没有报告错误。

解决方法2

grub-install –force /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

此处参考来源(aapiiz)。重启,选择新盘作为启动盘,感觉不到是换了新盘,但是确实是换了盘

img系迁移后磁盘情况

liupei@T470:~$ lsblk 
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 119.2G  0 disk 
├─sda1        8:1    0  46.6G  0 part 
└─sda2        8:2    0  72.7G  0 part 
nvme0n1     259:0    0   477G  0 disk 
├─nvme0n1p1 259:1    0   100G  0 part /
└─nvme0n1p2 259:2    0   377G  0 part /home

该方法非常灵活,推荐使用。参考文献:CSDN_544

增量备份

# 原有文件
a  b  c  d  test

# 首次备份
liupei@T470:~tar -cvzf zip test/
test/

# 增加文件 a, 第 1 次增量备份
liupei@T470:~ mv a test/
liupei@T470:~tar -g note -cvzf zipa test/
tar: test:目录是新的
test/
test/a

# 增加文件 b, 第 2 次增量备份
liupei@T470:~ mv b test/
liupei@T470:~tar -g note -cvzf zipb test/
test/
test/b

# 增加文件 c, 第 3 次增量备份
liupei@T470:~ mv c test/
liupei@T470:~tar -g note -cvzf zipc test/
test/
test/c

# 增加文件 d, 第 4 次增量备份
liupei@T470:~ mv d test/
liupei@T470:~tar -g note -cvzf zipd test/
test/
test/d

# 依次查看各增量压缩包中的内容
liupei@T470:~ tar tvf zip
drwxrwxr-x liupei/liupei     0 2021-08-30 19:35 test/

liupei@T470:~tar tvf zipa
drwxrwxr-x liupei/liupei     4 2021-08-30 19:36 test/
-rw-rw-r-- liupei/liupei   380 2021-08-30 18:30 test/a

liupei@T470:~ tar tvf zipb
drwxrwxr-x liupei/liupei     7 2021-08-30 19:36 test/
-rwxrwxr-x liupei/liupei 39128 2021-08-30 18:30 test/b

liupei@T470:~tar tvf zipc
drwxrwxr-x liupei/liupei    10 2021-08-30 19:36 test/
-rw-rw-r-- liupei/liupei    66 2021-08-30 18:36 test/c

liupei@T470:~ tar tvf zipd
drwxrwxr-x liupei/liupei    13 2021-08-30 19:37 test/
-rwxrwxr-x liupei/liupei 16696 2021-08-30 18:40 test/d

liupei@T470:~ls test/
a  b  c  d
liupei@T470:~ rm -rf test/
liupei@T470:~ls
note  zip  zipa  zipb  zipc  zipd

# 解压各压缩包还原文件夹
liupei@T470:~ tar xzf zipa
liupei@T470:~tar xzf zipb
liupei@T470:~ tar xzf zipc
liupei@T470:~tar xzf zipd
liupei@T470:~ ls
note  test  zip  zipa  zipb  zipc  zipd
liupei@T470:~$ ls test/
a  b  c  d

dd方法

直接在 root 模式下执行迁移:

# dd if=/dev/sda1 of=/dev/sdb1
root@lablinux:/# dd if=/dev/sda1 of=/dev/nvme0n1p1

这里要注意的是拷贝的源和目标分别是 /dev/sda1 和 /dev/sdb1 这两个分区,而不是 /dev/sda 和 /dev/sdb 这两个硬盘名称。

最后更新一下硬盘信息(不然显示的大小信息等还是旧硬盘的信息):

# umount /dev/sdb1         // 记得在操作之前先卸载所有挂载
# e2fsck -f /dev/sdb1
# resize2fs /dev/sdb1

参考文献:这里,该方法试过一次没成功。

ubuntu deja-dup

sudo apt purge deja-dup

手动备份可参考以下链接

  1. 参考文献
  2. 参考文献
  3. 参考文献
TOC