Archlinux Root根目录硬盘迁移

Posted on
linux partition root

原来安装双系统的时候,将Archlinux安装到了普通机械硬盘上。最近感觉实在太慢受不了,就买了一块500GB的SSD,准备把当前系统迁移过来。

电脑的主板上只有一个m.2接口,目前已经插了一块256G的,上面装了Windows。NVME协议的一般都在1000MB/s以上,有的甚至能到3000MB/s(三星的那款,好贵),而SATA协议的SSD读写速度最高也就只到500MB/s左右,觉得没有多大意义。上网一搜,发现有NVME转PCIE的转接卡,立马下单。

新盘安装好,但是不想重装Archlinux系统,就只有想办法把根目录迁移过来吧。原来系统中硬盘分区和挂载情况是这样的:

设备 挂载点 大小
/dev/nvme0n1p1 /efi 500M
/dev/sdb5 / 120G
/dev/sdb3 /home 250G
/dev/sdb4 swap 16G

新盘的方案为:

设备 挂载点 大小
/dev/nvme0n1p1 /efi 500M
/dev/nvme1n1p3 / 剩余大小
/dev/nvme1n1p1 /home 300G
/dev/nvme1n1p2 swap 16G

确定方案后,接下来就开始正式的迁移步骤,用archlinux的安装USB Stick启动系统,进入安装模式:

  1. 首先将原来的系统盘全部挂载到目录/oldRoot/中:
mkdir -p /oldRoot
mount /dev/sdb5/ /oldRoot
mount /dev/sdb3 /oldRoot/home
  1. cfdisk为新盘分区,选择gpt分区表。分区完后格式化,并且挂载到/mnt上:
mount /dev/nvme1n1p3/ /mnt
# 这里一定要注意挂载顺序
mkdir -p /mnt/home
mount /dev/nvme1n1p1/ /mnt/home
# 激活swap分区
swapon /dev/nvme1n1p2
  1. 新旧系统盘挂载后,下面要开始迁移了,注意路径别弄反了,我们需要从/oldRoot迁移到/mnt中去:
# -a 选项表明复制所有内容,包含子文件夹,链接等
# -f 默认强制覆盖已存在文件
# -v 显示复制文件,如果不想查看满屏刷文件,可以不加
# 一定要注意末尾的*号,没这*号,新盘中就是一个文件夹……
cp -afv /oldRoot/* /mnt

好的,现在你可以稍微休息下。喝一杯咖啡,等待复制完成。接下来需要做一些小小的设置,主要是更改原系统中的硬盘挂载点和启动设置。

  1. 挂载efi分区和其他分区(如果还有其他数据盘的话)到新系统中,一会儿安装启动器时需要使用:
# 这里不用新建efi文件夹了,因为原来根目录中我们没有挂载EFI分区,
# 所以复制时不会有文件写入到此文件夹中,这时我们再把efi分区挂载过来,
# 其他数据盘同理
mount /dev/nvme0n1p1 /mnt/efi
  1. 更改原系统中的挂载点
genfstab -U /mnt > /mnt/etc/fstab
  1. chroot进入新系统中安装启动器和更新启动器设置
# 已经chroot进新系统中
arch-chroot /mnt

# 重新安装Grub,这一步可能不需要,但是保险起见,再安装一次
# bootloader-id与安装时保持一致,如果忘记了,可以到/efi/EFI/文件夹中查看
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=ARCH

# 生成新的grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg

#退出chroot
exit
  1. 卸载已经所有挂载的分区

至此,系统已经迁移完毕,可以重启系统进入新系统中试试看有没有其他错误。原先的系统还保存在原来的硬盘中, 而且在grub启动菜单中也能找到老系统入口Archlinux(Rolling) (on /dev/sdb5)。如果新系统出现错误,也能进入老系统中备份数据,再做打算。 等到新系统成功启动,确认没有问题后,再删除原先系统的分区,然后重新生成grub.cfg即可(步骤6的第2步)。

现在可以享受SSD带来的快感了!速度提升可以感觉到是非常非常明显的(特别是KDE5 桌面环境,秒进)!同志们,现在SSD已经很便宜了,是时候淘汰机械硬盘了!