Что делает параметр --hint в команде поиска grub2?

10

Я просматриваю официальные документы GRUB2 для этой searchкоманды, которые можно найти по адресу 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опция недокументирована, кроме как в качестве примера. Что именно это делает? Каков точный формат аргумента?

Jens
источник

Ответы:

6

--hintиспользуется, чтобы выбрать, какой раздел выбрать при наличии нескольких совпадающих разделов. По умолчанию выбран 1-й подходящий.

Предположим, есть 2 запоминающих устройства с меткой загрузки следующим образом

hd0,msdos1
hd1,msdos7

тогда команда:

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

выберет hd1, msdos7 вместо hd0, msdos1

Тотти
источник
6
Есть идеи, почему существуют отдельные опции --hint-efi, --hint-baremetal и т. Д.?
Майкл Шепер,
И если search --fs-uuidиспользуется, то что это за использование --hint?
Саад Малик
@SaadMalik, UUID не должен быть уникальным. UUID файловой системы работают так же, как метки, но UUID обычно генерируется при создании FS.
Jiwopene
1

Это не описано в Руководстве по GRUB, но в самом GRUB есть документация ( search --helpна оболочке GRUB):

--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нужно пройти через все это ... пока он наконец не найдет UUID, который вы искали в 2356-й попытке.

Или, может быть, у вас очень медленное устройство, и проверка его UUID вызывает searchнекоторое зависание. --no-floppyЯ предполагаю, что нужно избегать наиболее распространенных случаев, но другие устройства также могут работать медленно.

С помощью --hintвы устанавливаете устройство для проверки в первую очередь. При условии, что подсказка была правильной, вы вообще пропускаете потенциально длительную операцию поиска. Так что это оптимизация скорости. (Вероятно, не будет заметен только с одним диском, тремя разделами)

Эффект, описанный в ответе @ totti о предоставлении предпочтения конкретному устройству, когда есть два устройства с одинаковым LABEL или UUID, должен быть просто побочным эффектом.

Конечно, если вы сначала проверите одно устройство, дубликат на другом устройстве не должен быть найден. Тем не менее, было бы более разумно, во-первых, не иметь таких дубликатов. Поскольку дубликаты UUID (или LABEL) могут рассматриваться как ошибка конфигурации, и в случае, если --hintоказалось, что это неправильно, он все равно может вернуть неправильное устройство.

frostschutz
источник