Grub2

grub2 搜尋命令中的 –hint 選項有什麼作用?

  • July 27, 2019

我正在查看該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除了作為範例之外,該選項似乎沒有記錄。它究竟是做什麼的?參數的確切格式是什麼?

--hint用於在有多個匹配分區時選擇選擇哪個分區。預設情況下,選擇第一個匹配的。

假設有 2 個帶有標籤boot的儲存設備 如下

hd0,msdos1
hd1,msdos7

然後命令:

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

將選擇hd1,msdos7而不是 hd0,msdos1

這在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結果是錯誤的,它可能仍會返回錯誤的設備。

引用自:https://unix.stackexchange.com/questions/115555