Що робить параметр --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варіант є недокументованим, крім прикладу. Що це робить саме? Який точний формат аргументу?

Відповіді:


6

--hintвикористовується для вибору, який розділ вибрати, коли є декілька відповідних розділів. За замовчуванням вибирається 1-й відповідний.

Припустимо, є два пристрої зберігання даних із завантаженням етикетки наступним чином

hd0,msdos1
hd1,msdos7

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

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

вибере hd1, msdos7 замість hd0, msdos1


6
Будь-яка ідея, чому існують окремі параметри --int-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виявилося, що воно неправильне, воно все одно може повернути неправильний пристрій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.