今天我想扩展我/boot
的 centos 服务器中的目录。
在我这样做之前,我有三个部分:
操作系统已打开/dev/nvme1
,分区为:
/boot
镶嵌在/dev/nvme1p1
/boot/efi
镶嵌在/dev/nvme1p2
/home
镶嵌在/dev/nvme1p3
我备份了 /boot 目录,然后删除了nvme1p1
和nvme1p2
.然后添加一个新分区“ nvme1p1
”(它合并“ nvme1p1
”和“ nvme1p2
”的空间)
当我删除这两个旧分区时,它警告我Do you want to remove the signature? [Y]es/[N]o:
然后我输入yes
然后写入磁盘。之后,我将新的安装nvmep1
到/boot
,然后将备份的文件复制到这个新的/boot
之后,我重新启动,但可以找到操作系统。
你能帮忙吗?我可以恢复它吗?
答案1
“签名”与引导过程没有直接关系:它只是允许其他软件识别该分区包含现有文件系统,因此它可能不应该被覆盖(除非管理员强制它)。如果您重新mkfs
创建/dev/nvme1p1
(或使用了为您完成此操作的分区工具),则无论如何您已经创建了一个新签名。
/boot/efi
从过去存在的事实来看,您的系统显然以 UEFI 风格启动。您将需要一个同样能够以 UEFI 方式启动的外部可启动媒体;如果您的救援启动介质以旧版 BIOS 方式启动,则会在启动加载程序重新安装步骤中导致一些复杂情况。
首先,您需要从外部介质启动系统,挂载损坏操作系统的根文件系统(顺便问一下,它是在同一个磁盘上还是其他地方?),然后 chroot 到其中。 CentOS 安装介质的“救援模式”可能会自动执行此操作;如果您使用其他 Linux live CD/DVD/USB,过程将与此类似:
mount /dev/something /mnt # mount the root filesystem to /mnt
mount -o rbind /dev /mnt/dev # then supply it with /dev, /proc and /sys
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
chroot /mnt /bin/bash # finally switch to it
从此时起,此 shell 会话中的所有命令都将看到损坏的 CentOS 安装的根文件系统(而不是实时启动介质的真实根文件系统)/
。
然后,由于您已重新mkfs
分区/boot
,因此您必须使用blkid
或lsblk -o +uuid
查找其新的文件系统 UUID,并将其更新为/etc/fstab
.然后您就可以通过简单的操作将其安装在适当的位置mount /boot
。
接下来,您必须重新创建原始 .efi 系统分区/dev/nvme1p2
。它可以是一个全新的分区,并且不必位于磁盘的开头,但它必须存在于系统固件知道如何访问的某个位置。该分区的类型需要设置为“EFI System Partition”或简称ESP。
(从技术上讲,如果使用 GPT 分区,ESP 需要有一个分区类型 GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B
,但没有人愿意处理那串数字,因此分区程序使用各种用户友好的方法来设置分区类型。如果使用 MBR 分区,ESP 的分区类型应为 0xef。)
ESP 需要初始化为 FAT32 文件系统并安装到/boot/efi
.一旦你使用mkfs.vfat -F 32 ...
初始化它,你应该再次使用blkid
或lsblk -o +uuid
找到它的新UUID并编辑以用它/etc/fstab
替换旧的UUID 。/boot/efi
那么简单的mount /boot/efi
安装就足够了。
下一步是将 GRUB 引导加载程序重新安装到磁盘上。如果您有权访问 CentOS 软件包存储库或碰巧 GRUB .rpm 文件仍在yum
的缓存中,yum reinstall grub2-efi
这可能是最简单的方法。如果这不可能,您也可以使用grub-install
.
通常grub-install
只grub2-install
需要包含 ESP 的全磁盘设备的名称作为参数;它将依赖于安装了正确的分区的事实/boot/efi
,并将引导加载程序文件写入其中。它还会将引导加载程序注册到固件设置。
如果您的系统使用安全启动,则还需要执行一个步骤:重新安装shimx64.efi
安全启动引导加载程序。该yum reinstall shim
命令应该处理这个问题。或者,您可以在 BIOS 设置中禁用安全启动,至少在您可以重新安装安全启动垫片之前。
您可能需要检查新 ESP 的 PARTUUID(使用 或blkid
)lsblk -o +partuuid
,并使用该efibootmgr -v
命令查看当前 UEFI 固件引导设置:包含正确 PARTUUID 的行应该是您的活动引导条目。
如果 CentOS 的另一个条目具有不同的 PARTUUID,它可能指的是您删除的旧 ESP(现在无用),您可能需要使用适当的efibootmgr
选项来删除它,以避免将来出现混淆。