Jak zatrzymać aktualizację GRUB-a przed skanowaniem wszystkich dysków?


19

Przy każdym update-gruburuchomieniu wszystkie dyski twarde są skanowane. Każdy dysk, który jest w stanie gotowości, obraca się, aby przejść w stan bezczynności. To strata energii. Używamy update-grub wersji 1.98:

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

Regresja

  1. W pliku znajduje się GRUB_DISABLE_OS_PROBER=trueopcja /etc/default/grub. Ale to wydaje się działać tylko od wersji 2 i wyższych. Przynajmniej nie przestaje skanować wszystkich dysków w naszej wersji 1.98.

  2. Istnieje /etc/grub.d/20_linux_xenskrypt, który może być uruchomiony jako część aktualizacji-grub. Po usunięciu uprawnień do wykonywania dla wszystkich użytkowników, chmod a-x /etc/grub.d/20_linux_xenwszystkie dyski nadal się rozwijają.

Jak przestać update-grubskanować każdy dysk twardy?


To tylko skrypt powłoki ... Zmienić to? Powinien działać tylko po aktualizacjach jądra, co nie zdarza się często.
jordanm,

Wykonywana jest jedna z linii skryptu /usr/sbin/grub-probe --target=device /. Ta komenda powoduje również wirowanie wszystkich dysków. To /usr/sbin/grub-probenie jest skrypt powłoki.
Pro Backup

Jak często biegasz update-grub? Powinno to się zdarzyć tylko po zainstalowaniu nowego jądra, więc kogo to obchodzi?
psusi

Wiem, że cała wykorzystywana przez niego picojoule jest marnotrawstwem - jeśli prowadzisz aktualizację grub 24/7 przez miesiąc na 1000 komputerów z 3 dyskami twardymi, może to doliczyć jeden lub dwa do rachunku za prąd.
tkbx,

Odpowiedzi:


14

W pliku /etc/grub.d/30_os-prober wiersz

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

powoduje, że wszystkie dyski obracają się (w trybie gotowości -> bezczynności). Os-prober to narzędzie do znajdowania instalacji Linuksa na dyskach innych niż dysk rozruchowy. To właśnie os-probernależy wyłączyć.

  1. Jednym ze sposobów jest usunąć pakiet : apt-get --purge remove os-prober.
  2. Innym sposobem jest usunięcie praw wykonywalnych dla os-prober . Najpierw znajdź lokalizację os-prober za pomocą $ which os-prober. Wyjście może wyglądać następująco: /usr/bin/os-prober. Usuń prawa do plików wykonywalnych dla wszystkich użytkowników tego pliku:# chmod a-x /usr/bin/os-prober
  3. Innym sposobem jest usunięcie uprawnień wykonywalnych dla 30_os-prober . Znajdź lokalizację sondy 30_os za pomocą $ locate /30_os-prober. Wyjście może wyglądać następująco: /etc/grub.d/30_os-prober. Usuń prawa do plików wykonywalnych dla wszystkich użytkowników tego pliku:# chmod a-x /etc/grub.d/30_os-prober
  4. Jeszcze innym sposobem jest pominięcie wykonanie z /etc/grub.d/30_os-prober. Na przykład poprzez włączenie GRUB_DISABLE_OS_PROBER=trueopcji w naszej wersji Grub 1.98. Można to zrobić, wstawiając do pliku /etc/grub.d/30_os-proberkod poniżej linii set -e:

...

if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
  exit 0
fi

5

Dla tych, którzy zastanawiają się, czy naprawdę warto, tak jest. Być może nie w celu oszczędzania energii, ale dzisiaj napotkałem problem z aktualizacją-grub, ponieważ chciał sondować zarówno dla / dev / sda (mój dysk twardy), jak i / dev / sdc (pamięć USB). Bez tego ostatniego włożonego do mojego laptopa, aktualizacja-grub by się zawiesił, nawet jeśli na moim pendrivie nie ma zainstalowanego systemu operacyjnego, ani też nie uruchomiłem się z tego pendrive'a. Ponieważ pamięć USB niedawno się zepsuła, potrzebowałem sposobu, aby aktualizacja-grub działała bez niego. Na szczęście załatwiłem sprawę GRUB_DISABLE_OS_PROBER=true. :)


1
Miałem odwrotny problem: błąd aktualizacji-grub nie powiódł się, jeśli był obecny dysk USB. Pamięć USB była nieco nietypowa, ponieważ ma zainstalowany Easy2Boot. Ale ponieważ było to w kiosku z wydanym poleceniem update-grub ze skryptu umieszczonego na tym samym dysku USB, to rozwiązanie było bardzo mile widziane.
noamik,

3

(Czy to naprawdę jest warte czasu i wysiłku, aby to naprawić?)

Jak wspomniałeś, sondowanie prawdopodobnie dzieje się podczas grub-mkconfigpołączeń grub-probe. Możesz zmodyfikować grub-mkconfig, po prostu zapisując na stałe wynik grub-probepołączeń. Jest on używany do wypełnienia GRUB_DEVICE, GRUB_DEVICE_UUID, GRUB_DEVICE_BOOT, GRUB_DEVICE_BOOT_UUID, i GRUB_FS.


1

Zobacz moje rozwiązanie tutaj, aby selektywnie wyłączyć, które partycje są sprawdzane za os-proberpomocą małego patch.

Konfiguracja GRUB_OS_PROBER_SKIP_LIST="UUID@device_path"w /etc/default/grub:

  • zmniejsza ilość urządzeń w ${OSPROBED}wykorzystywane przez/etc/grub.d/30_os-prober

  • co kończy sprawdzanie za pomocą ${grub_probe} --target=fs_uuid --device


0

Wiem, że to stary post, ale znalazłem inny sposób na osiągnięcie tego, który nie wymaga wprowadzania zmian w skryptach. w /etc/grub.d/I przemianowany plik 30_os-proberdo .30_os-prober(początek okresu) i to jest pomijany podczas aktualizacji, mimo to widać w tym samym miejscu w lsprzypadku korzystania -a.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.