Skip to content

Update root partition 修改根分区所在硬盘或者分区

只适用于EFI系统

一般来说root分区一旦敲定就不需要改了,需要这个蛋疼操作的时候并不多,只 有一开始硬盘分区没有规划好,或者买了新硬盘需要这么做。所以搜了很久才拼 接出解决方案,我没有找到一篇能直接采用的,所以记录一下。

我之所以需要重新挂载,是因为要把linux分区整个搬家:当初跟着教程走没过 脑子,让linux分区跟其它分区间隔了一个EFI OS,导致无法扩展(不连续不可 捣),大概是这样的:

windows 450G | shared 400G | EFI OS | linux 100G

要扩展arch linux的空间,只能干脆跟共享分区掉个个儿。此处可以用gparted live CD来处理,把linux全盘复制到shared的位置。新电脑shared里没东西所以 不用备份。有一个隐患是,gparted会把旧分区的UUID复制成新分区的,得改掉。 我选择给旧分区新生成一个UUID。

空间整理好,下一步是让启动程序认得新的分区。这个需要用arch linux live CD。重新搞一下usb,换ISO文件。

用arch linux live启动后,先做一些查看工作

# 列出所有分区,记下各自是什么盘
fdisk -l

# 列出分区的一些号,记得UUID和PARTUUID是不同的东西,分别要用
blkid

然后把新分区和EFI OS都挂载。旧分区随意,我没有用上就忽略了

# 新root
mkdir /mnt/new_root
mount /dev/<新分区路径> /mnt/new_root

# 挂载启动盘
mkdir /mnt/new_root/boot/efi
mount /dev/<EFI OS路径> /mnt/new_root/boot/efi

进入新的分区并假装它是系统盘

arch-chroot /mnt/new_root

按需修改fstab,把/对应的UUID修改成新分区的。这是为了进操作系统时能正确挂载。

nano /etc/fstab

但这一步不够,因为EFI OS还是会从旧的分区去启动系统,不认识新分区。此处 我找到的教程都建议重新装个bootloader比如grub, systemd-boot。但是EFI OS 本身就足够作为bootloader,本着精简的arch(btw)原则,我决定直接改EFI OS 设置,结果意外的容易。启动界面列出来的选项全都在 /boot/efi/loader/entries/,前提是进行过上面的步骤挂载了EFI盘。在里面 找出包含arch linux的文件(名字可能不明显,得看内容),把之前抄下来的 PARTUUID替换过来就完成了。

重启,记得把USB拔掉。登陆进去检查一下硬盘,确认成功。

总结,回头看来其实很简单,就俩关键文件,/etc/fstab/efi/loader/entries/*。我感觉这个方案应该比较能广泛应用,没有牵扯到 太多arch linux特色。更多是针对EFI系统启动管理方案。