grub2的搜索命令中的--hint选项有什么作用?


10

我正在查看该search命令的官方GRUB2文档,如http://www.gnu.org/software/grub/manual/grub.html#index-search上所示

Command: search [--file|--label|--fs-uuid] [--set [var]] [--no-floppy] name

Search devices by file (-f, --file), filesystem label (-l, --label),
or filesystem UUID (-u, --fs-uuid).

If the --set option is used, the first device found is set as the
value of environment variable var. The default variable is ‘root’.

The --no-floppy option prevents searching floppy devices, which can be slow.

The ‘search.file’, ‘search.fs_label’, and ‘search.fs_uuid’ commands are aliases
for ‘search --file’, ‘search --label’, and ‘search --fs-uuid’ respectively.

在5.3节中,有许多示例

menuentry "FreeBSD" {
      insmod zfs
      search --set=root --label freepool --hint hd0,msdos7
      ...
}

--hint除示例外,该选项似乎没有记载。它到底是做什么的?参数的确切格式是什么?

Answers:


6

--hint用于在存在多个匹配分区时选择要选择的分区。默认情况下,选择第一个匹配项。

假设有两个带有标签引导的存储设备, 如下所示

hd0,msdos1
hd1,msdos7

然后命令:

search --set=root --label freepool --hint hd1,msdos7

将选择hd1,msdos7而不是hd0,msdos1


6
知道为什么存在单独的--hin-efi,-hint-baremetal等选项吗?
Michael Scheper 2014年

如果search --fs-uuid使用,则有什么用--hint
萨德·马利克

@ SaadMalik,UUID不必唯一。文件系统UUID的工作方式与标签相同,但是UUID通常是在FS创建时生成的。
jiwopene

1

GRUB手册中没有对此进行描述,但是可以在GRUB本身中找到文档(search --help在GRUB shell上):

--hint
    First try the device HINT.
    If HINT ends in comma, also try subpartitions

--hint-ieee1275
    First try the device HINT if currently running on IEEE1275.
    If HINT ends in comma, also try subpartitions

--hint-bios
    First try the device HINT if currently running on BIOS.
    If HINT ends in comma, also try subpartitions

--hint-baremetal
    First try the device HINT if direct hardware access is supported.
    If HINT ends in comma, also try subpartitions

--hint-efi
    First try the device HINT if currently running on EFI.
    If HINT ends in comma, also try subpartitions

--hint-arc
    First try the device HINT if currently running on ARC.
    If HINT ends in comma, also try subpartitions

现在,“首次尝试设备”的意义是什么?

您必须了解这search是一个潜在的缓慢操作。

也许您有50个驱动器,每个驱动器具有100个分区,现在search必须经历所有这些……直到最终找到您在第2356次尝试中寻找的UUID。

或者,也许您的设备速度很慢,并且检查其UUID会导致search卡住一段时间。--no-floppy我想这是为了避免最常见的情况-但其他设备也可能很慢。

使用--hint,将设备设置为首先检查。如果提示是正确的,那么您将完全跳过原本可能漫长的搜索操作。所以这是一个速度优化。(可能只有一个驱动器,三个分区就不会引起注意)

@totti的答案中描述的效果是:当两个设备具有相同的LABEL或UUID时,优先选择特定的设备,这仅是副作用。

当然,如果您首先检查一台设备,则不应在另一台设备上找到重复的设备。即使这样,一开始就没有这样的重复将更有意义。由于重复的UUID(或LABEL)可被视为配置错误,并且如果--hint发现错误,它可能仍会返回错误的设备。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.