grub2 搜尋命令中的 –hint 選項有什麼作用?
我正在查看該
search
命令的官方 GRUB2 文件,如http://www.gnu.org/software/grub/manual/grub.html#index-searchCommand: 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
結果是錯誤的,它可能仍會返回錯誤的設備。