SOS:如果我在 Centos 中删除 /boot 签名,如何恢复我的操作系统?

SOS:如果我在 Centos 中删除 /boot 签名,如何恢复我的操作系统?

今天我想扩展我/boot的 centos 服务器中的目录。

在我这样做之前,我有三个部分:

操作系统已打开/dev/nvme1,分区为:

/boot镶嵌在/dev/nvme1p1

/boot/efi镶嵌在/dev/nvme1p2

/home镶嵌在/dev/nvme1p3

我备份了 /boot 目录,然后删除了nvme1p1nvme1p2.然后添加一个新分区“ 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,因此您必须使用blkidlsblk -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 ...初始化它,你应该再次使用blkidlsblk -o +uuid找到它的新UUID并编辑以用它/etc/fstab替换旧的UUID 。/boot/efi那么简单的mount /boot/efi安装就足够了。

下一步是将 GRUB 引导加载程序重新安装到磁盘上。如果您有权访问 CentOS 软件包存储库或碰巧 GRUB .rpm 文件仍在yum的缓存中,yum reinstall grub2-efi这可能是最简单的方法。如果这不可能,您也可以使用grub-install.

通常grub-installgrub2-install需要包含 ESP 的全磁盘设备的名称作为参数;它将依赖于安装了正确的分区的事实/boot/efi,并将引导加载程序文件写入其中。它还会将引导加载程序注册到固件设置。

如果您的系统使用安全启动,则还需要执行一个步骤:重新安装shimx64.efi安全启动引导加载程序。该yum reinstall shim命令应该处理这个问题。或者,您可以在 BIOS 设置中禁用安全启动,至少在您可以重新安装安全启动垫片之前。

您可能需要检查新 ESP 的 PARTUUID(使用 或blkidlsblk -o +partuuid,并使用该efibootmgr -v命令查看当前 UEFI 固件引导设置:包含正确 PARTUUID 的行应该是您的活动引导条目。

如果 CentOS 的另一个条目具有不同的 PARTUUID,它可能指的是您删除的旧 ESP(现在无用),您可能需要使用适当的efibootmgr选项来删除它,以避免将来出现混淆。

相关内容