Як зупинити 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 Резервне копіювання

Як часто ти біжиш update-grub? Це повинно статися лише при встановленні нового ядра, і кого це хвилює?
psusi

Я знаю, що цілий пікоджоул, який він використовує, є такою тратою - якщо ви протягом місяця ви працювали на оновленнях-груб 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 . Спочатку знайдіть місце розташування ос-пробера за допомогою $ 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варіант роботи у нашій грубі версії 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-накопичувач). Без останнього, вставленого до мого ноутбука, оновлення-grub зависло б, хоча насправді на моєму USB-накопичувачі немає встановленої ОС, і я ніколи не завантажувався з цієї палички. Коли USB-накопичувач нещодавно зламався, мені потрібен був спосіб оновлення-grub для продовження (живого) без нього. На щастя, GRUB_DISABLE_OS_PROBER=trueпросто зробив трюк. :)


1
У мене була зворотна проблема: збій оновлення-grub, якщо USB-накопичувач був присутній USB-накопичувач був трохи незвичним, оскільки на ньому встановлено Easy2Boot. Але оскільки це було в кіоску, коли команда update-grub видається зі сценарію, розміщеного на цій самій USB-паличці, це рішення було дуже вітано.
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.