从 /boot/efi 更改为 non boot/efi

从 /boot/efi 更改为 non boot/efi

我有一个带有给定分区的 Debian 服务器 Alsblk和带有根分区的 Debian 服务器 B。

我想将服务器 A 转换为与服务器 B 相同的转换。基本上我不希望服务器 A 有/boot/efi分区。一些专家可以指导如何实现它,因为这是生产服务器和裸机。

服务器A

sda 8:0 0 931.5G 0 disk
sdb 8:16 0 931.5G 0 disk
├─sdb1 8:17 0 512M 0 part /boot/efi
├─sdb2 8:18 0 9.3G 0 part /
├─sdb3 8:19 0 7.5G 0 part [SWAP]
├─sdb4 8:20 0 18.6G 0 part /home
└─sdb5 8:21 0 55.9G 0 part /var

服务器B

sda 8:0 0 931.5G 0 disk
sdb 8:16 0 931.5G 0 disk
|-sdb1 8:17 0 9.3G 0 part /
│-sdb2 8:18 0 7.5G 0 part [SWAP]
│-sdb3 8:19 0 1K 0 part
|-sdb5 8:21 0 18.6G 0 part /home
│-sdb6 8:22 0 57.9G 0 part /var

到目前为止还没有尝试过任何方法

答案1

服务器A显然使用UEFI本机引导方法和GPT分区,这是两台服务器中更经得起未来考验的。在服务器A上,如果需要,您可以轻松使用大于2TiB的系统盘。

缺少/boot/efi(或等效分区)且存在 1K 大小sdb3(很可能是 MBR 扩展分区)表明服务器 B 使用旧版 BIOS 引导方法和 MBR 分区。在 MBR 上,分区的最大大小限制为 2 TiB,其起点最多可以是从磁盘开头算起的 (2 TiB - 512 字节)(假设经典的 512 字节块大小)。

UEFI 的支持已经超过 10 年了,在 COVID-19 之前,英特尔曾计划从 2020 年起取消旧版 BIOS 兼容性支持,但显然已经推迟了这些计划。

如果 Intel 或其他一些芯片组制造商发布未来的 x86 芯片组,该芯片组不再提供在前 1 MiB 物理地址空间内启动所必需的接口,那么经典的 16 位 BIOS 代码可能很难或不可能为其实现,从而使得芯片组基本上仅限 UEFI。

市场上已经出现了仅 UEFI 的服务器型号,并且随着时间的推移,越来越多的服务器型号将变为仅 UEFI。因此,仅为了统一而将服务器 A 转换为旧式可能会导致在下一次硬件更新时必须将它们都转换为 UEFI,而不是只转换一个。我认为这不是一个好主意。


但如果你真的想这样做,肯定需要停机:

  • 备份所有用户数据和配置,只是为了安全
  • 重新启动系统,进入固件设置(BIOS 设置)
  • 禁用安全启动,启用旧版兼容性支持模块 (CSM);如果可能,将系统配置为引导仅传统模式以防止错误
  • 从一些实时 Linux 介质启动,并使用它来记录每个分区的确切开始/结束/长度块值。
  • 使用gdisk专家命令zap (即xthen z)将 GPT 分区表及其备份清零,然后创建一个新的 MBR 分区表,使用之前记录的信息准确复制您要保留的分区。您可能需要稍微减小交换分区的大小,以便为扩展分区记录创建空间。
  • 验证内核已接受新的分区表,例如通过检查/proc/partitions;如有必要,请使用partprobe以刷新内核的分区概念
  • chroot 到您要转换的系统磁盘中,并确保所有分区都可以作为 MBR 分区安装且没有错误。更新/etc/fstab。如果您必须减少交换分区,请记住重新mkswap调整交换 UUID/etc/fstab并更新 initramfs。
  • chroot 后,删除所有efibootmgr软件包grub-efi-*并安装软件包grub-pcand grub-pc-bin: 运行grub-install --target=i386-pc /dev/sdb以显式安装 BIOS 版本的 GRUB
  • 重新启动并进入 BIOS 设置,验证启动顺序;必要时进行调整
  • 完毕

如果您有任何类型的脚本化安装过程,完全重新安装可能会更快并且更不容易出错。

从实时媒体 Chroot 到转换中的系统磁盘将如下所示:

mount /dev/sdb1 /mnt   # the root filesystem under conversion
mount --rbind /dev /mnt/dev
mount --rbind /sys /mnt/sys
mount -t proc /mnt/proc
chroot /mnt /bin/bash
mount /var
mount /home

此时,您可以运行命令,就像已经启动到正在转换的系统一样。

相关内容