Как остановить 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сканирование каждого жесткого диска?


Это всего лишь сценарий оболочки ... Изменить его? Он должен запускаться только после обновления ядра, что происходит не очень часто.
Иордания

Одна из строк сценария выполняется /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

5

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


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.