为什么 lsblk 命令不显示 /boot 分区?

为什么 lsblk 命令不显示 /boot 分区?

我尝试在系统上找到启动分区并执行 lsblk 命令

sda              8:0    0 930.4G  0 disk
├─sda1           8:1    0     1G  0 part
├─sda2           8:2    0    40G  0 part
├─sda3           8:3    0 763.6G  0 part
└─sda4           8:4    0 125.8G  0 part
sde              8:64   0   100G  0 disk
├─sde1           8:65   0     2G  0 part
└─sde2           8:66   0    98G  0 part
 ├─sles-root0 254:0    0  27.9G  0 lvm  /
 └─sles-root  254:1    0    70G  0 lvm

但是当我执行 df -h /boot 时,这显示了

Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/sles-root0   28G  3.8G   23G  15% /

这是什么意思以及如何确认系统有引导分区?

答案1

如果您的系统固件有一些限制,导致其无法访问磁盘的完整大小,则需要启动分区。在磁盘的开头创建一个单独的分区/boot可确保引导加载程序需要访问的内容(使用固件内置的驱动程序)始终位于磁盘的固件可访问区域内。

一旦引导加载程序成功加载内核和 initramfs 文件,内核将启动并开始使用自己的驱动程序,这些驱动程序比系统固件更容易更新,因此不太可能受到磁盘大小限制。

如果您的系统固件没有此类限制,则没有什么可以阻止您/boot在根文件系统中创建常规目录。只要引导加载程序可以读取该文件系统类型(并且该文件系统完全包含在引导加载程序正在读取的磁盘中),它就可以正常工作。

拥有引导分区的另一个可能原因是,如果您有加密的根文件系统,并且您的引导加载程序不支持加密。在这种情况下,引导加载程序完成其工作的唯一方法是将内核和 initramfs 文件放在未加密的分区中。在此类设置中,从用户处获取必要的密码或密钥并解锁加密所需的工具和配置需要包含在 initramfs 中。

即使您确实有/boot分区,也不必连续​​安装它。仅当您 a) 安装内核更新、b) 更新 initramfs 文件或 c) 更新引导加载程序或其配置时才需要安装它。某些发行版在正常使用时会保留未挂载的分区,并且它们的 kernel/initramfs/bootloader 更新工具包含根据需要/boot挂载和卸载的功能。/boot

关于你的df -h /boot输出:

Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/sles-root0   28G  3.8G   23G  15% /

由于您指定/boot为命令的参数df,因此该命令将仅显示包含指定文件或目录的文件系统。由于该Mounted on专栏称/,它是根文件系统。

下一步是运行ls -l /boot:如果目录包含名为vmlinuz-<kernel version number>,的文件System.map-<kernel version number>,则内核、initramfs(如果需要)和引导加载程序配置(如果适用)存储在根文件系统上的目录中,并且您的文件系统中/boot没有单独的文件系统/boot当前配置。

但是,如果ls -l /boot指示目录完全为空,则表明实际/boot文件系统当前已卸载,并且该空目录只是它的(当前未使用的)挂载点。


如果您拥有现代 UEFI 系统(并且不使用旧版 BIOS 兼容性启动),则验证您当前的配置非常容易。首先以efibootmgr -vroot 身份运行:它将显示当前的固件启动设置。 UEFI 引导条目将包含引导路径字符串,该字符串可以有多种形式,但引导 Linux 最常见的形式是:

HD(1,GPT,<PARTUUID string for ESP containing the bootloader file>,0x800,0x82000)/File(<bootloader pathname within the ESP partition>)

使用 lsblk -o +PARTUUID,您将能够查看系统上每个分区的分区标识符,从而找到将包含引导加载程序的 ESP(EFI 系统分区)作为常规文件。 ESP 通常是 FAT32 分区,因为 UEFI 规范的所有版本始终要求所有 UEFI 固件实现必须理解 FAT32,但固件开发人员也可以添加对其他文件系统的支持。

引导加载程序路径名通常使用 Windows 路径名约定编写,使用反斜杠作为目录分隔符。因此,如果显示的引导加载程序路径efibootmgr -v是 例如\EFI\SLES\GRUBX64.EFI,那么如果您在 处挂载 ESP /boot/efi,您应该在 处找到引导加载程序/boot/efi/EFI/SLES/grubx64.efi(FAT32 不区分大小写,UEFI 固件也应该如此...但是,某些 UEFI 实现中可能存在错误)。

它还efibootmgr -v包括BootCurrent:标识用于引导当前运行的系统的引导条目的四位数字的行。

答案2

启动分区不是必需的。并非每个系统都有,并且您的命令的输出暗示您的系统没有。

相关内容