Как остановить update-grub от сканирования всех дисков?

19

Каждый раз при update-grubзапуске все жесткие диски сканируются. Все накопители, находящиеся в режиме ожидания, раскрутятся и перейдут в режим ожидания. Это пустая трата энергии. Мы используем update-grub версии 1.98:

# update-grub -v
grub-mkconfig (GRUB) 1.98+20100804-14+squeeze1

регрессия

  1. В файле есть GRUB_DISABLE_OS_PROBER=trueопция /etc/default/grub. Но это, кажется, работает только от версии 2 и выше. По крайней мере, это не останавливает сканирование всех дисков в нашей версии 1.98.

  2. Существует /etc/grub.d/20_linux_xenскрипт, который может быть запущен как часть update-grub. После удаления прав на выполнение для всех пользователей chmod a-x /etc/grub.d/20_linux_xenвсе диски продолжают раскручиваться.

Как остановить update-grubсканирование каждого жесткого диска?

Pro Backup
источник
Это всего лишь сценарий оболочки ... Изменить его? Он должен запускаться только после обновления ядра, что происходит не очень часто.
Иордания
Одна из строк сценария выполняется /usr/sbin/grub-probe --target=device /. Эта команда также заставляет все диски вращаться. Это /usr/sbin/grub-probeне скрипт оболочки.
Pro Backup
Как часто ты бежишь update-grub? Это должно происходить только при установке нового ядра, так кого это волнует?
psusi
Я знаю, что вся используемая ею пикоджоул - это пустая трата времени. Если вы запускаете update-grub 24/7 в течение месяца на 1000 компьютерах с 3 жесткими дисками каждый, это может добавить к вашему счету за электричество один или два цента.
tkbx

Ответы:

14

В файле /etc/grub.d/30_os-prober строка

OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"

заставляет все диски вращаться (режим ожидания -> режим ожидания). Os-prober - это утилита для поиска установок Linux на дисках, отличных от вашего загрузочного диска. Это то, os-proberчто нужно отключить.

  1. Одним из способов является удалить пакет : apt-get --purge remove os-prober.
  2. Другой способ - удалить исполняемые права для os-prober . Сначала найдите местоположение os-prober, используя $ which os-prober. Вывод может выглядеть следующим образом : /usr/bin/os-prober. Удалить права на выполнение для всех пользователей для этого файла:# chmod a-x /usr/bin/os-prober
  3. Другой способ - удалить исполняемые права для 30_os-prober . Найдите местоположение 30_os-prober, используя $ locate /30_os-prober. Вывод может выглядеть следующим образом : /etc/grub.d/30_os-prober. Удалить права на выполнение для всех пользователей для этого файла:# chmod a-x /etc/grub.d/30_os-prober
  4. Еще один способ заключается в пропустить выполнение в /etc/grub.d/30_os-prober. Например, сделав GRUB_DISABLE_OS_PROBER=trueопцию работать в нашей версии grub 1.98. Это можно сделать, вставив в файл /etc/grub.d/30_os-proberкод под строкой set -e:

...

if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
  exit 0
fi
Pro Backup
источник
5

Для тех, кто задается вопросом, действительно ли это стоит усилий, да, это так. Возможно, не для экономии энергии, но сегодня я столкнулся с проблемой с update-grub, так как он хотел проверить и / dev / sda (мой жесткий диск), и / dev / sdc (USB-флешка). Без последнего, вставленного в мой ноутбук, update-grub зависал бы, даже если на моей USB-карте не было установлено ни одной ОС, и я никогда не загружался с этой карты. Поскольку USB-флешка недавно сломалась, мне нужен был способ, чтобы update-grub продолжал (живой) без него. К счастью, GRUB_DISABLE_OS_PROBER=trueтолько что сделал трюк. :)

PPP
источник
1
У меня была обратная проблема: сбой update-grub при наличии флешки. Флешка была немного необычной, так как на ней установлен Easy2Boot. Но так как это было в киоске с командой update-grub, выполняемой из сценария, размещенного на той самой флешке, это решение было очень кстати.
noamik
3

(Это действительно стоит времени и усилий, чтобы исправить?)

Как вы упомянули, зондирование, вероятно, происходит при grub-mkconfigзвонках grub-probe. Вы можете изменить grub-mkconfig, просто жестко закодировав результат grub-probeвызовов. Он используется для заполнения GRUB_DEVICE, GRUB_DEVICE_UUID, GRUB_DEVICE_BOOT, GRUB_DEVICE_BOOT_UUID, и GRUB_FS.

Джим Пэрис
источник
1

Смотрите мое решение здесь, чтобы выборочно отключить, какие разделы проверяются os-proberс небольшим patch.

Конфигурация GRUB_OS_PROBER_SKIP_LIST="UUID@device_path"в /etc/default/grub:

  • сокращает количество устройств , ${OSPROBED}используемый/etc/grub.d/30_os-prober

  • который останавливает проверку с ${grub_probe} --target=fs_uuid --device

Стюарт Кардалл
источник
0

Я знаю, что это старый пост, но я нашел другой способ сделать это, не включая внесение изменений в сценарии. в /etc/grub.d/I переименовал файл 30_os-proberв .30_os-prober(начинаются с периода) и пропускается во время обновления , даже если она показывает в том же месте , lsесли вы используете -a.

Джеймс
источник