Como parar o update-grub de verificar todas as unidades?

19

Toda vez que update-grubé executado, todos os discos rígidos são verificados. Cada unidade que está no modo de espera gira para ficar ociosa. Isso é um desperdício de energia. Usamos o update-grub versão 1.98:

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

Regressão

  1. Há uma GRUB_DISABLE_OS_PROBER=trueopção no /etc/default/grubarquivo Mas isso parece funcionar apenas a partir da versão 2 e posterior. Pelo menos, não para de verificar todas as unidades em nossa versão 1.98.

  2. Há um /etc/grub.d/20_linux_xenscript que pode ser executado como parte do update-grub. Depois de remover os direitos de execução para todos os usuários com chmod a-x /etc/grub.d/20_linux_xentodas as unidades, eles continuam girando.

Como parar update-grubde verificar cada disco rígido?

Pro Backup
fonte
É apenas um script de shell ... Modificá-lo? Ele deve ser executado somente após as atualizações do kernel, o que não ocorre com muita frequência.
Jordanm
Uma das linhas de script é executada /usr/sbin/grub-probe --target=device /. Esse comando também faz com que todas as unidades girem. O /usr/sbin/grub-probenão é um script de shell.
Pro Backup
Com que frequência você está correndo update-grub? Isso só deve acontecer quando você instala um novo kernel, então quem se importa?
Psusi
Eu sei que todo o picojoule que ele usa é um desperdício - se você executou o update-grub 24/7 por um mês em 1000 computadores com 3 HDDs cada, isso pode adicionar um centavo ou dois à sua conta de luz.
Tkbx

Respostas:

14

No arquivo /etc/grub.d/30_os-prober, a linha

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

faz todas as unidades girarem (espera -> ociosa). O Os-prober é um utilitário para encontrar instalações Linux em unidades que não sejam a sua unidade de inicialização. É o os-proberque precisa ser desativado.

  1. É uma maneira de remover o pacote : apt-get --purge remove os-prober.
  2. Outra maneira é remover os direitos executáveis ​​do os-prober . Primeiro encontre a localização do os-prober usando $ which os-prober. Saída pode parecer: /usr/bin/os-prober. Remova os direitos executáveis ​​de todos os usuários desse arquivo:# chmod a-x /usr/bin/os-prober
  3. Outra maneira é remover os direitos executáveis ​​do 30_os-prober . Encontre a localização de 30_os-prober usando $ locate /30_os-prober. Saída pode parecer: /etc/grub.d/30_os-prober. Remova os direitos executáveis ​​de todos os usuários desse arquivo:# chmod a-x /etc/grub.d/30_os-prober
  4. Ainda outra maneira é pular a execução de /etc/grub.d/30_os-prober. Por exemplo, fazendo a GRUB_DISABLE_OS_PROBER=trueopção funcionar em nossa versão do grub 1.98. Isso pode ser feito inserindo no arquivo /etc/grub.d/30_os-probero código abaixo da linha set -e:

...

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

Para aqueles que se perguntam se realmente vale a pena o esforço, sim é. Talvez não seja para economizar energia, mas hoje encontrei um problema com o update-grub, pois ele queria pesquisar o / dev / sda (meu disco rígido) e / dev / sdc (um pendrive). Sem o último inserido no meu laptop, o update-grub travaria, mesmo que não haja realmente nenhum SO no meu pen drive instalado nem nunca inicializei nesse pen drive. Como o pen drive quebrou recentemente, eu precisava de um meio para o update-grub continuar (vivo) sem ele. Felizmente, GRUB_DISABLE_OS_PROBER=trueapenas fiz o truque. :)

PPP
fonte
11
Eu tive o problema inverso: update-grub falhando se um pendrive estava presente. O pendrive USB era um pouco incomum, pois possui o Easy2Boot instalado. Mas como este estava em um quiosque com o comando update-grub sendo emitido a partir de um script colocado naquele mesmo pendrive, essa solução foi muito bem-vinda.
noamik
3

(Isso realmente vale o tempo e o esforço para consertar?)

Como você mencionou, a investigação provavelmente está acontecendo quando grub-mkconfigchamadas grub-probe. Você pode modificar grub-mkconfigsimplesmente codificando o resultado das grub-probechamadas. Ele é usado para preencher GRUB_DEVICE, GRUB_DEVICE_UUID, GRUB_DEVICE_BOOT, GRUB_DEVICE_BOOT_UUID, e GRUB_FS.

Jim Paris
fonte
1

Veja minha solução aqui para desativar seletivamente quais partições são verificadas os-probercom um pequeno patch.

A configuração de GRUB_OS_PROBER_SKIP_LIST="UUID@device_path"em /etc/default/grub:

  • reduz o número de dispositivos ${OSPROBED}usados ​​pelo/etc/grub.d/30_os-prober

  • que interrompe a verificação com ${grub_probe} --target=fs_uuid --device

Stuart Cardall
fonte
0

Sei que este é um post antigo, mas encontrei outra maneira de fazer isso que não envolve fazer alterações nos scripts. em /etc/grub.d/I renomeado o arquivo 30_os-proberpara .30_os-prober(começar com um período) e é ignorada durante a atualização mesmo que ele mostra no mesmo lugar em lsque você usa -a.

James
fonte