Como posso reiniciar mais rápido?

6

Existem ocasiões em que os usuários do Ubuntu precisam fazer uma reinicialização rápida, por exemplo, após uma atualização do kernel ou ao testar algumas configurações que exigem reinicialização.

Eu gostaria de ter um método (por exemplo, um script) que me permita economizar o máximo de tempo possível para executar uma reinicialização.

Essas são coisas que provavelmente podem ser evitadas para reduzir o tempo de reinicialização até que a sessão do usuário esteja pronta:

  • se possível, ignore a inicialização do BIOS / UEFI / firmware e o POST
  • pule o menu GRUB (pré-selecione a entrada desejada uma vez e inicialize-a diretamente sem qualquer tempo limite)
  • ignorar a tela de login (use o login automático sem senha uma vez)

Talvez ainda haja mais coisas que podem ser ignoradas para uma reinicialização rápida.

Eu vi a especificação RapidReboot no Wiki do Ubuntu, mas a página foi editada pela última vez em 2010-02-03.

Mas, mesmo se ainda não pudermos usar apropriadamente esse kexec descrito para pular a inicialização do firmware e outras coisas, a pré-seleção temporária da entrada do GRUB e o login automático para exatamente uma reinicialização devem ser possíveis. Como posso configurar isso?

Estou usando o Ubuntu 16.04, 64 bits com Unity DE, lightdm e GRUB em inicialização dupla com o Windows 10 (e logo mais algumas distribuições Linux) em uma máquina Acer Aspire E5-773G com UEFI.

    
por Byte Commander 30.08.2016 / 15:26

1 resposta

1

Tempos de reinicialização

Podemos procrastinar a reinicialização às vezes neste mundo de "excessivamente ocupado" e não querer desperdiçar 5 ou 15 segundos. Quando eu olhei pela primeira vez para essa questão, meus tempos de inicialização haviam passado de 45 segundos para 14 segundos com um SSD e systemd de ajustes.

Recentemente, adquiri um laptop "moderno" com um SSD NVMe M.2 Gen 3.0 x 4 com velocidade de leitura do Windows de 3,4 GB / s incrível e velocidade de leitura do Linux de 2 GB / s. Então deveria ser mais rápido, certo? Hum ... não. É dolorosamente mais lento:

$ systemd-analyze
Startup finished in 6.823s (firmware) + 4.447s (loader) + 3.467s (kernel) + 8.412s (userspace) = 23.151s

Desta vez, é realmente após ajustes. Foi muito pior em 80 segundos porque a nVidia e a Dell optaram por cortar a potência do áudio HDMI na placa gráfica nVidia GTX970M, que aciona a porta HDMI. Como tal, foi necessário o comando setpci , que causou a mensagem "baixo erro de grapics", e você teve que esperar 20 segundos para que o ponteiro do mouse prosseguisse. Em seguida, recarregaria todos os drivers gráficos e reiniciaria o lightdm.

Outro problema com o laptop "moderno" é o BIOS POST levar 15 segundos. Ajustes no BIOS para desativar a verificação de erros de hardware, desativar o carregamento de drivers de inicialização para NICs e outros ajustes que não consigo lembrar agora apenas alteraram o tempo do BIOS POST para 6 segundos. Em comparação, o "antigo" tempo do BIOS POST do laptop foi de apenas alguns segundos usando o CSM Legacy BIOS e nenhum ajuste da BIOS.

Projeto RapidReboot do Ubuntu de 2010

A menção do projeto RapidReboot no post do ByteCommander é de 2010. O raciocínio do projeto é resumido assim:

  

Fundamentação

     

Existem alguns casos em que podemos assumir com segurança que o usuário não   quero ver o gerenciador de inicialização; nestes casos, devemos usar o kexec para   evite reinicializações longas, POSTs da BIOS e tempo do carregador de inicialização. Isso pode levar 10   segundos em situações ótimas; mas com BIOS SCSI ou RAID e rede   boot roms, o tempo pode subir para 20, 30, ou mesmo mais de 60 segundos, mesmo   nos casos em que o tempo entre o carregamento do kernel e ver o   tela de login é de 30 a 60 segundos.

Exemplos de uso do projeto:

  

Casos de uso

     
  • Bob acaba de atualizar seu kernel; update-notifier informa que ele deve reinicializar para que as mudanças entrem em vigor, e o botão 'Restart'   usa o kexec para tornar isso mais rápido.
  •   
  • Alice acaba de atualizar o dbus; update-notifier diz a ela para reiniciar e usa o kexec.
  •   
  • Seveas realizou várias atualizações no mês passado e agora está com menos de três vezes mais pressão de memória devido a diferentes programas   usando cópias diferentes de bibliotecas compartilhadas. Ele decide reiniciar para   limpar isso, e usa um "Quick Reboot" para tornar isso mais rápido.
  •   
  • O Keybuk acabou de instalar o Ubuntu Edgy e quer inicializar nele. O LiveCD carrega o kernel de destino e o initrd com o kexec; todos   sistemas de arquivos baseados em disco; sincronizar; e depois usa o kexec para iniciar o novo   sistema em vez de reiniciar.
  •   

Usando o kexec para reiniciar

kexec é a mágica que lançamos para reinicializar sem postagem no BIOS e alguns outros mecanismos de descoberta de baixo nível, como a configuração do RAID.

O kernel deve ser compilado com CONFIG_KEXEC flag

O primeiro passo é garantir que seu kernel foi compilado com a opção CONFIG_KEXEC=y :

$ uname -r
4.14.2-041402-generic
$ grep KEXEC= /boot/config-'uname -r'
CONFIG_KEXEC=y

O primeiro comando uname -r é opcional apenas para mostrar com qual kernel você iniciou. Como podemos ver no segundo comando, o kernel é compilado pela equipe do Ubuntu com o sinalizador necessário. Não tenho certeza de quando isso foi adicionado, mas provavelmente & lt; = ano de 2012.

Instalar kexec-tools

O próximo passo é instalar as ferramentas kexec para o espaço do usuário:

$sudo apt install kexec-tools

Após downloads binários normais, você é recebido com esta tela:

Eu respondi No em parte por causa deste relatório de bug que a opção não é relevante em systemd .

Em seguida, a instalação continua (snippet mostrado abaixo):

Unpacking kexec-tools (1:2.0.10-1ubuntu2.4) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for systemd (229-4ubuntu21) ...
Setting up kexec-tools (1:2.0.10-1ubuntu2.4) ...
Generating /etc/default/kexec...
Generating grub configuration file ...
  (... CUT ...)
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
Found Windows Boot Manager on /dev/sda1@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
Processing triggers for systemd (229-4ubuntu21) ...

Configurando kexec

Nossas coortes no ArchLinux têm excelente documentação para o kexec , mas ele precisa ser massageado para distribuições Ubuntu / Debian. p>

O uso básico é feito com dois comandos:

sudo kexec -l /boot/vmlinuz-'uname -r' --initrd=/boot/initrd.img-'uname -r' --reuse-cmdline
sudo kexec -e

deste ponto em diante, aparece toda vez que você clica em reiniciar, ele recarrega automaticamente o último kernel no modo de reinicialização rápida.

Usando o Systemd para carregar o kexec

Crie o arquivo /etc/systemd/system/[email protected] :

[Unit]
Description=load %i kernel into the current kernel
Documentation=man:kexec(8)
DefaultDependencies=no
Before=shutdown.target umount.target final.target

[Service]
Type=oneshot
ExecStart=/usr/bin/kexec -l /boot/vmlinuz-%i --initrd=/boot/initrd.img-%i --reuse-cmdline

[Install]
WantedBy=kexec.target

Em seguida, ative o arquivo de serviço para o kernel que você deseja carregar, por exemplo, simplesmente configure o kernel atual uname -r :

$ sudo systemctl enable kexec-load@'uname -r'
Created symlink from /etc/systemd/system/kexec.target.wants/[email protected] to /etc/systemd/system/[email protected].

Em seguida, para kexec:

$ sudo systemctl kexec

Se você tem youtube em execução, pode haver um inibidor do sistema impedindo a reinicialização. Nesse caso, use:

$ sudo systemctl kexec -i

Se você deseja carregar um kernel diferente para o próximo kexec, por exemplo, 4.12.2-041202-generic, desabilita o serviço para o kernel atual e habilita aquele para o novo kernel:

$ sudo systemctl disable kexec-load@'uname -r'
$ sudo systemctl enable [email protected]

Mais para vir

Tenho que postar esta resposta agora, já que é hora de inicializar, corrigir, inicializar, corrigir e repetir. Eu tenho uma configuração complicada, onde systemd carrega cinco nVidia drivers que eu tenho que descarregar, executar setpci para ligar o áudio ao HDMI, recarregar os drivers nVidia e reiniciar o LightDm. Pode demorar um pouco para dar certo.

Depois de obter os métodos cli em funcionamento, criarei um atalho na área de trabalho para reinicialização com um clique com o prompt sudo password. Depois disso, criarei um atalho na área de trabalho para uma caixa de diálogo yad , permitindo que você escolha entre os kernels instalados e a reinicialização. Semelhante ao menu de opções avançadas do grub.

    
por WinEunuuchs2Unix 03.12.2017 / 18:37