1.1 新硬盘空间大于旧硬盘空间
1.1.1 dd命令转移方式
- 插上新硬盘后,执行如下命令,示例中
/dev/sdb
为新硬盘
# 显示当前系统挂载的硬盘
$ fdisk -l
# 删除备份硬盘的分区
$ gdisk /dev/sdb
# 从旧硬盘/dev/sda中拷贝所有数据到/dev/sdb
$ dd if=/dev/sda of=/dev/sdb bs=4M
- dd命令会完整复制之前系统的所有东西(分区UUID跟原来一致),将该硬盘拆下来后,放至其他电脑上都能正常启动。
- 而由于分区UUID跟原来一致,如果两个硬盘在同一个设备上,则可能会读取任一硬盘上的EFI启动(根据BIOS上顺序),然后用任一 data区域作为根目录。
1.2 新硬盘空间小于旧硬盘空间,实际占用空间小于新硬盘空间
1.2.1 cp命令转移方式
新硬盘空间小于旧硬盘空间,不能直接使用dd命令,但可以使用cp -ax进行拷贝
# 先对/dev/sdb创建两个分区,一个存放efi,一个存放数据
# 先用d将分区删除,再用n添加分区
$ gdisk /dev/sdb
# EFI 分区 格式为 EFI system 编号:ef00
$ mkfs.vfat /dev/sdb1
# Linux分区 编号:8300
$ mkfs.ext4 /dev/sdb2
# 分别挂载新分区
$ mount /dev/sdb1 /tmp/new_efi
$ mount /dev/sdb2 /tmp/new_data
# 挂在旧分区
$ mount /dev/sda1 /tmp/old_efi
$ mount /dev/sda2 /tmp/old_data
# cp 拷贝数据
$ cp -ax /tmp/old_efi/ /tmp/new_efi
$ cp -ax /tmp/old_data /tmp/new_data
由于重新分区,分区会生成新的UUID,此时,需要更新新硬盘的/etc/fstab
和EFI
中的UUID为新的UUID。
# 需要在sudo权限下执行,才能看到全部设备。
$ blkid
# 根据blkid 返回值,修改EFI中grub配置,将下述uuid改为新root目录(/dev/sdb2)的uuid。
# search.fs_uuid 5e1acac3-f1de-4a90-96af-a1c327bbf3c6 root hd0,gpt3
$ vim /tmp/new_efi/EFI/ubuntu/grub.cfg
# 更换根目录到新硬盘
$ chroot /tmp/new_data
# 编辑/etc/fstab,并修改efi分区和主分区的UUID
$ vim /etc/fstab