UBUNTU server系统迁移

tag: linux, ubuntu

家里的NAS系统盘已经工作了19000+多个小时了,很担心它有一天会突然罢工。趁SSD便宜,入了一块。但原来的NAS上设置了很多东西:seafile, aria2,amule,还有一些备份脚本,如果重装系统,重新部署这么多软件也着实麻烦。所以想着还是把系统整体迁移吧。

硬盘分区

原系统分区情况,设备为sdb:

/dev/sdb1   EFI 启动分区
/dev/sdb2   / 根分区
/dev/sdb3   /var 分区
/dev/sdb4  /home 分区
/dev/sdb5  swap分区

新硬盘的分区情况,设备为sda:

新硬盘为sda

/dev/sda1     0-512M:  EFI分区  格式化为vfat
/dev/sda2     512M-4G  SWAP分区 格式化为swap
/dev/sda3     4G-END   / 根分区

新的硬盘是120G的,全部用来安装新系统。所以需要将原来的/var和/home分区中的东西全部拷到现在的/var和/home目录下。分区和格式化的过程略了。这里要注意的一点是,新的EFI分区,我们需要用disk工具将分区标记为0xef00。

用fdisk也可以修改,在fdisk命令中,输入t

If you want to change the type, press l to get a list of partition types and then press t to change the type.

数据恢复

我将之前的系统数据使用tar全部打包在sysbackup.tar.gz中。下面是将sda设备在/mnt恢复。

cd /mnt
mkdir sda3
mount /dev/sda3 /mnt/sda3

将所有的数据放到sda3上

解压数据到sda3

把原本var 分区的数据放到/mnt/sda3/var, 把原本home分区的数据放到/mnt/sda3/home/

挂载/dev/sda1 到/mnt/sda3/boot/efi

然后把原本EFI分区的数据放到/mnt/sda3/boot/efi,这部分数据实际是放在了/dev/sda1上。

最后的数据是这样的:

编辑/mnt/sda3/etc/fstab,修改UUID,可以使用blkid来得到分区的UUID

修改后只有3个分区,所以只要保留三个分区的信息就行。

安装GRUB

这一步是花费我时间最多的一个步骤。由于对grub的工作原理理解不到位,对UEFI也不太熟悉,期间走了很多弯路。建议各位如果有这方面的疑问,可以看看ARCH上的wiki

1,首先需要挂载三个目录,

mount -o bind /dev /mnt/sda3/dev
mount -o bind /proc /mnt/sda3/proc
moutn -o bind /sys /mnt/sda3/sys

2 ,切换根目录到/mnt/sda3

chroot /mnt/sda3   下面几步的操作都是在chroot下完成的。

3 , 安装grub到设备/dev/sda

grub-install --target=x86_64-efi --efi-directory=/boot/efi /dev/sda  (这里注意要把/dev/sda1 mount到/boot/efi, 这里的/boot/efi就是/mnt/sda3/efi)。

4, 最后更新一下grub

update-grub

更新grub。

注意点

U盘启动要从UEFI启动,否则在grub-install时可能会报错:

EFI variables are not supported on this system

20190301