我正在尝试删除专用/boot
分区并将其合并到根分区/
。我发现https://askubuntu.com/questions/741672/how-do-i-merge-my-boot-partition-to-be-a-part-of-the-partition已经,但这似乎没有帮助。
什么情况:
# uname -a
Linux c02 6.1.0-12-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.52-1 (2023-09-07) x86_64 GNU/Linux
# fdisk -l /dev/sda
Disk /dev/sda: 4 TiB, 4398046511104 bytes, 8589934592 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 1673AA12-2A54-4718-AF1E-58FE670A87E3
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 2007039 2002944 978M Linux filesystem
/dev/sda3 2007040 10008575 8001536 3.8G Linux swap
/dev/sda4 10008576 8589932543 8579923968 4T Linux filesystem
以下内容有效,让我成功重新启动机器:
# copy content of boot partition to root
cp -a /boot /boot.bak
umount /boot
rm -rf /boot
mv /boot.bak /boot
# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.1.0-12-amd64
Found initrd image: /boot/initrd.img-6.1.0-12-amd64
Found linux image: /boot/vmlinuz-6.1.0-10-amd64
Found initrd image: /boot/initrd.img-6.1.0-10-amd64
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done
但是当另外删除物理启动分区时,重启失败:
# fdisk /dev/sda
Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
Command (m for help): d
Partition number (1-4, default 4): 2
Partition 2 has been deleted.
Command (m for help): w
The partition table has been altered.
Syncing disks.
这会导致 grub 错误:
error: no such partition.
grub rescue>
grub
当通过重新安装时,apt-get install --reinstall grub-pc
我收到以下 grub 错误:
error: attempt to read or write outside of disk `hd0`.
grub rescue>
这是怎么回事?
答案1
update-grub
实际上只会更新 GRUB配置文件在/boot/grub/grub.cfg
。
GRUB 核心映像(主要位于 BIOS 引导分区内)包含分区号和路径名。它们告诉 GRUB 如何查找/boot/grub
目录,以及 GRUB 配置文件和 GRUB 模块(例如normal.mod
.
卸载/boot
分区对 GRUB 没有影响,因为 GRUB 在 Linux 内核启动之前就完成了它的工作。由于您没有更新编码到 GRUB 核心映像中的信息(通过grub-install /dev/sda
在卸载旧/boot
文件系统并移动/boot.bak
到其位置后重新运行),GRUB 只是继续使用旧/boot
分区,直到您将其删除。如果您在运行程序之前对 GRUB 配置进行了任何更改update-grub
,您会注意到这些更改实际上并未生效。
所以,之后要做的事情mv /boot.bak /boot
不应该是update-grub
,而是:
grub-install /dev/sda
通过运行,您可以有效地达到相同的效果apt-get install --reinstall grub-pc
。但现在错误信息是attempt to read or write outside of disk 'hd0'
。这告诉我 GRUB 正在使用 BIOS 例程来访问磁盘,并且显然 QEMU 的 BIOS 模拟例程尚未更新以处理 >2TB 的磁盘,因此您将达到 2TB 的限制。
(是的,我已经分析了普通的 Debian 12grub-pc
安装。在像这样的简单安装中,嵌入 GRUB 核心映像的唯一模块是fshelp.mod
,适当的文件系统驱动程序模块(例如ext2.mod)
,适当的分区表类型模块(例如part_msdos.mod
或part_gpt.mod
)和虽然biosdisk.mod
会有一个独立于 BIOS 的ahci.mod
或ata.mod
可用的,默认安装不使用它们。)
不幸的是,当您的根文件系统大小约为 4 TB 时,您确实应该切换到以 UEFI 模式启动。要使用 Debian 的 QEMU(不支持安全启动)执行此操作,您需要ovmf
安装该软件包,并将<os>
VM 的 XML 配置文件部分更改为以下内容:
<os>
<type arch='x86_64' machine='pc-q35-5.2'>hvm</type>
<loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE_4M.fd</loader>
<nvram template='/usr/share/OVMF/OVMF_VARS_4M.fd'>/wherever/you/keep/your/VMs/vmname.nvram.fd</nvram>
<boot dev='hd'/>
</os>
那么你可以
- 重用 BIOS 引导和以前的分区的空间
/boot
来创建 EFI 系统分区, - 添加一条
/etc/fstab
线将其安装到/boot/efi
, - 将
grub-pc
和grub-pc-bin
替换为grub-efi-amd64
和grub-efi-amd64-bin
, - 跑步
grub-install --target=x86_64-efi --force-extra-removable /dev/sda
在 UEFI 模式下成功启动后,grub-install /dev/sda
再次运行以确保 UEFI NVRAM 启动变量设置正确。然后安装并学习efibootmgr
如何以标准化方式从正在运行的操作系统中管理启动设置。
如果运行时尚未在 UEFI 模式下运行grub-install --target=x86_64-efi
,则会在可移动媒体/后备位置--force-extra-removable
安装 UEFI GRUB 的第二个副本。/boot/efi/EFI/boot/bootx64.efi
如果您也需要安全启动,请将NVRAM模板替换OVMF_CODE_4M.fd
为。添加和包,然后重新运行.OVMF_CODE_4M.ms.fd
OVMF_VARS_4M.fd
OVMF_VARS_4M.ms.fd
grub-efi-amd64-signed
shim-signed
grub-install --target=x86_64-efi --force-extra-removable /dev/sda