GRUB find 命令是什么?
find 是 GRUB 提供的一个命令行工具,用于在硬盘的分区中搜索指定的文件,它的主要作用是:

- 定位文件系统:找到你的 Linux 系统安装所在的分区。
- 定位核心文件:找到启动 Linux 所必需的内核文件(如
vmlinuz)和初始内存盘(如initrd.img)。
当你的系统因为配置文件(如 /boot/grub/grub.cfg)损坏、MBR/GPT 引导扇区错误或硬盘分区表变化而无法自动启动时,你就可以进入 GRUB 命令行,使用 find 命令手动告诉 GRUB 内核和 initrd 文件在哪里,从而完成手动引导。
基本语法
find 命令的基本语法非常简单:
find [选项] 文件名
常用选项
-
(hd0)或(hd0,gpt1):这是 GRUB 中表示硬盘和分区的格式。hd代表 Hard Disk (硬盘)。- 后面的数字
0代表第 0 块硬盘(在 GRUB 中计数从 0 开始,hd0是第一块硬盘,hd1是第二块,以此类推)。 ,gpt1代表 GPT 分区表下的第 1 个分区(同样从 1 开始计数),如果是 MBR 分区表,则使用类似(hd0,msdos1)的格式。- 你可以省略分区号,直接写
(hd0),GRUB 会在该硬盘的所有分区中搜索。
-
--set=root:这是一个非常有用的选项,当find命令成功找到文件后,它会将该文件所在的分区设置为 GRUB 的根设备 (root),后续的linux和initrd命令就会默认在这个根设备下寻找文件,省去了你手动输入完整路径的麻烦。
(图片来源网络,侵删)
常用搜索文件名
/boot/vmlinuz-*:内核文件, 是通配符,可以匹配内核版本号。/boot/initrd.img-*:初始内存盘文件,用于加载驱动模块。/boot/grub/grub.cfg:GRUB 的主配置文件。
使用场景和示例
假设你的系统无法启动,你进入了 GRUB 的命令行界面(通常按 c 键)。
示例 1:查找内核文件并设置根设备
这是最常见的用法,目的是找到内核并启动它。
-
启动 GRUB 命令行 在 GRUB 菜单出现时,按
c键。 -
使用
find命令 我们尝试在第一块硬盘 (hd0) 的所有分区中查找内核文件。
(图片来源网络,侵删)find --set=root /boot/vmlinuz
- 命令解释:
find会在(hd0),(hd0,1),(hd0,2)... 等分区中搜索/boot/vmlinuz。 - 成功输出:如果找到了,GRUB 会返回类似下面的信息,并且自动将
root变量设置为找到文件的分区。Found linux image: /boot/vmlinuz-5.15.0-88-generic这行输出不仅告诉你找到了,还告诉你
root变量已经被设置为了这个文件所在的分区((hd0,gpt2))。
- 命令解释:
-
加载内核和 initrd
root已经设置好了,你可以直接加载内核和 initrd 文件,使用 Tab 键可以自动补全文件名,非常方便。linux /boot/vmlinuz-5.15.0-88-generic root=/dev/sda2 ro initrd /boot/initrd.img-5.15.0-88-generic
- 注意:
root=/dev/sda2这里的设备名是 Linux 内核能识别的设备名(如/dev/sda2),而不是 GRUB 的(hd0,gpt2),你需要将find找到的分区号对应到 Linux 的设备名上。(hd0,gpt1)对应/dev/sda1,(hd0,gpt2)对应/dev/sda2。
- 注意:
-
启动系统 执行
boot命令启动。boot
示例 2:查找 GRUB 配置文件
grub.cfg 文件丢失或损坏,导致 GRUB 无法显示菜单,你可以手动找到它并加载。
-
查找
grub.cfgfind --set=root /boot/grub/grub.cfg
-
手动配置并启动 找到后,
root已经设置,你可以手动指定内核和 initrd 的完整路径(虽然root已设,但明确写出更清晰)。linux /boot/vmlinuz-5.15.0-88-generic root=/dev/sda2 ro initrd /boot/initrd.img-5.15.0-88-generic boot
示例 3:在特定分区中查找
如果你大概知道系统安装在哪个分区,可以直接指定,提高搜索效率。
# 在第一块硬盘的第二个 GPT 分区中查找 find (hd0,gpt2) /boot/vmlinuz # 在第二块硬盘的第一个分区中查找 find (hd1,1) /boot/initrd.img
与 search 命令的对比
GRUB 还有一个类似的命令叫做 search。search 功能更强大,它不直接搜索文件,而是通过文件系统属性来查找。
find:通过文件名在文件系统中搜索。search:通过文件系统标签、UUID 等唯一标识符来查找分区。
search 命令通常被认为更可靠,因为它不依赖于文件路径,即使你 /boot 分区被挂载到其他地方(/home/boot),只要标签或 UUID 不变,它就能找到。
search 命令示例:
# 通过文件系统标签查找 search --label --set=root my_root_partition # 通过文件系统 UUID 查找 search --fs-uuid --set=root 1234abcd-56ef-7890-1234-567890abcdef
- 快速修复:在大多数情况下,使用
find --set=root /boot/vmlinuz是最快、最直接的方法。 - 更健壮的修复:如果文件路径可能有问题,使用
search --label或search --fs-uuid是更可靠的选择,因为它与挂载点无关。
对于日常的应急修复,find 命令因其简单直观而广受欢迎,理解它的用法是掌握 GRUB 手动引导的关键一步。
