grub-probe 是 GRUB 工具链中的一个实用工具,用于探测指定路径或设备的文件系统及相关元数据信息。其核心功能是解析设备映射、获取文件系统类型、UUID、标签、GRUB 设备名称等,常用于 GRUB 配置文件的自动生成或调试引导环境时的设备信息查询。
功能描述
grub-probe 的主要功能包括:
设备信息探测:解析路径或设备的文件系统类型、UUID、标签等。GRUB 设备映射:将系统设备(如 /dev/sda1)转换为 GRUB 内部设备名称(如 (hd0,msdos1))。分区表探测:识别分区表类型(如 msdos、gpt)。加密容器支持:探测加密磁盘(如 LUKS)的 UUID。多目标输出:支持多种输出类型(如文件系统模块、驱动器名称等)。
语法格式
grub-probe [选项] <路径或设备>
选项说明
选项描述--device指定设备(如 /dev/sda1),而非文件系统路径(如 /boot)。--device-map=FILE使用指定的设备映射文件(默认为 /boot/grub/device.map)。--target=TYPE指定输出类型(见下文支持列表)。--verbose输出详细调试信息。<路径或设备>若使用 --device,为设备路径;否则为文件系统路径(如 /boot)。支持的目标输出类型
--target 参数支持以下输出类型:
类型描述示例输出fs文件系统模块名称ext4fs_uuid文件系统 UUID123e4567-e89b-12d3-a456-426614174000fs_label文件系统标签BOOTdriveGRUB 驱动器名称(hd0)device系统设备路径/dev/sda1partmap分区表模块名称msdosabstraction抽象模块名称(如 crypto_luks)crypto_lukscryptodisk_uuid加密容器的 UUIDluks-123e4567-e89b-12d3-a456-426614174000msdos_parttypeMS-DOS 分区类型代码0x83(Linux)使用场景与示例
1. 获取文件系统类型
sudo grub-probe --target=fs /boot
效果:输出 /boot 所在文件系统的模块名称(如 ext4)。应用场景:确定 GRUB 配置中需要加载的文件系统模块。
2. 获取文件系统 UUID
sudo grub-probe --target=fs_uuid /boot
效果:输出 /boot 所在文件系统的 UUID。应用场景:在 grub.cfg 中使用 search 命令定位设备。
3. 获取 GRUB 设备名称
sudo grub-probe --target=drive /boot
效果:输出 /boot 所在设备的 GRUB 名称(如 (hd0,msdos1))。应用场景:生成 GRUB 配置文件中的 set root 指令。
4. 获取分区表类型
sudo grub-probe --target=partmap /dev/sda1
效果:输出 /dev/sda1 所在磁盘的分区表类型(如 msdos)。应用场景:调试分区表兼容性问题。
5. 获取加密容器 UUID
sudo grub-probe --target=cryptodisk_uuid /dev/mapper/luks-123e4567-e89b-12d3-a456-426614174000
效果:输出加密容器的 UUID。应用场景:配置 GRUB 加密磁盘解锁流程。
注意事项
设备映射文件
GRUB 设备名称(如 (hd0))依赖于 /boot/grub/device.map。示例映射文件内容:(hd0) /dev/sda
(hd1) /dev/sdb
路径必须挂载
使用路径(如 /boot)时需确保目标分区已挂载。示例挂载验证:mount | grep /boot
加密设备支持
使用加密容器(如 LUKS)时需提前解密并挂载。示例解密挂载:cryptsetup open /dev/sda2 my_encrypted
mount /dev/mapper/my_encrypted /mnt
权限问题
需以 root 权限运行(通过 sudo)。示例权限提升:sudo grub-probe --target=device /boot
常见问题与解决方案
1. 错误提示:grub-probe: error: cannot find a device for /boot
原因:路径未挂载或设备映射不完整。解决方法:
挂载目标分区:sudo mount /dev/sda1 /boot
更新设备映射:sudo grub-mkdevicemap
2. 错误提示:grub-probe: error: unknown filesystem
原因:文件系统模块未加载或不支持。解决方法:
列出支持的文件系统模块:find /usr/lib/grub/x86_64-linux/ -name "*.mod"
确认模块已安装:sudo apt install grub-common
3. 错误提示:grub-probe: error: invalid target
原因:指定的 --target 类型无效。解决方法:
查看支持的 --target 类型:man grub-probe
4. GRUB 设备名称不匹配
原因:设备映射文件与实际硬件不一致。解决方法:
手动编辑设备映射文件:sudo nano /boot/grub/device.map
示例修改:(hd0) /dev/nvme0n1
典型工作流程
准备环境
确保目标分区已挂载。示例挂载:sudo mount /dev/sda1 /mnt
探测文件系统信息
sudo grub-probe --target=fs /mnt
sudo grub-probe --target=fs_uuid /mnt
生成 GRUB 配置
sudo grub-mkconfig -o /boot/grub/grub.cfg
验证 GRUB 设备名称
sudo grub-probe --target=drive /mnt
调试加密设备
sudo cryptsetup open /dev/sda2 my_encrypted
sudo mount /dev/mapper/my_encrypted /mnt
sudo grub-probe --target=cryptodisk_uuid /mnt