Tempos de reinicialização

Tempos de reinicialização

Muitas vezes há 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 permitisse economizar o máximo de tempo possível executando 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, pule 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)
  • pular a tela de login (use o login automático sem senha uma vez)

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

Eu vi oReinicialização rápidaspec no Ubuntu Wiki, mas a página foi editada pela última vez em 03/02/2010.

Mas mesmo que ainda não possamos usar adequadamente o descrito kexecpara pular a inicialização do firmware e outras coisas, deve ser possível pré-selecionar temporariamente a entrada GRUB e usar o login automático para exatamente uma reinicialização. Como posso configurar isso?

Estou usando Ubuntu 16.04, 64 bits com Unity DE, lightdm e GRUB em dual boot com Windows 10 (e em breve mais algumas distros Linux) em uma máquina Acer Aspire E5-773G com UEFI.

Responder1

Tempos de reinicialização

Podemos às vezes procrastinar a reinicialização neste mundo de “muito ocupado” e não querer perder 5 ou 15 segundos. Quando analisei esta questão pela primeira vez, meus tempos de inicialização passaram de 45 segundos para 14 segundos com um SSD e systemdajustes.

Recentemente adquiri um laptop "moderno" com um SSD NVMe M.2 Gen 3.0 x 4 com incrível velocidade de leitura de 3,4 GB/s no Windows e 2 GB/s de velocidade de leitura no Linux. 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 é na verdadedepoisajustes. Foram 80 segundos muito piores porque a nVidia e a Dell optaram por cortar a energia do áudio HDMI na placa gráfica nVidia GTX970M que aciona a porta HDMI. Como tal, setpcifoi necessário um comando que causou a mensagem de "erro de gráficos baixos" e você teve que esperar 20 segundos para que o ponteiro do mouse continuasse. Em seguida, ele recarregaria todos os drivers gráficos e reiniciaria o lightdm.

Outro problema com o laptop "moderno" é que o BIOS POST demorava 15 segundos. Ajustes no BIOS para desligar a verificação de erros de hardware, desligar o carregamento de drivers de inicialização para NICs e outros ajustes que não me lembro, agora mudei o tempo de POST do BIOS para 6 segundos. Em comparação, o tempo de POST do BIOS do laptop "antigo" era de apenas alguns segundos usando o Legacy BIOS CSM e nenhum ajuste de BIOS.


Projeto do Ubuntu RapidRebootde 2010

O UbuntuReinicialização rápidaa menção do projeto na postagem do ByteCommander é de 2010. A justificativa do projeto é resumida assim:

Justificativa

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

Exemplos de uso do projeto:

Casos de uso

  • Bob acabou de atualizar seu kernel; update-notifier informa que ele deve reiniciar para que as alterações tenham efeito, e o botão 'Reiniciar' usa kexec para tornar isso mais rápido.
  • Alice acabou de atualizar o dbus; update-notifier diz a ela para reiniciar e usa kexec.
  • O Seveas realizou diversas atualizações no mês passado e agora está sob três vezes mais pressão de memória devido a diferentes programas que usam diferentes cópias de bibliotecas compartilhadas. Ele decide reiniciar para esclarecer isso e usa uma "Reinicialização rápida" para tornar isso mais rápido.
  • Keybuk acabou de instalar o Ubuntu Edgy e deseja inicializá-lo. O LiveCD carrega o kernel de destino e o initrd com kexec; desmonta todos os sistemas de arquivos baseados em disco; sincronizar; e então usa kexec para iniciar o novo sistema em vez de reinicializar.

Usando kexec para reiniciar

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

Kernel deve ser compilado com CONFIG_KEXECflag

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

$ 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ê inicializou. Como podemos ver no segundo comando o kernel é compilado pela equipe do Ubuntu com o sinalizador necessário definido. Não tenho certeza de quando isso foi adicionado, mas provavelmente <= ano de 2012.

Instalarkexec-tools

A próxima etapa é instalar as kexecferramentas para o espaço do usuário:

$sudo apt install kexec-tools

Após downloads binários normais, você será saudado com esta tela:

instalação do kexec-tools.png

Respondi Noem parte por causa deste relatório de bug que a opção não é relevante no 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) ...

Configurandokexec

Nossos colegas do ArchLinux têmótima documentação para kexecmas precisa de massagem para distribuições Ubuntu/Debian.

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, ele 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, habilite o arquivo de serviço para o kernel que você deseja carregar, por exemplo, para simplesmente definir 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].

Então para kexec:

$ sudo systemctl kexec

Se você estiver em youtubeexecuçã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, desabilite o serviço para o kernel atual e habilite aquele para o novo kernel:

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

Mais por vir

Tenho que postar esta resposta agora, pois é hora de inicializar, consertar, inicializar, consertar, repetir. Eu tenho uma configuração complicada onde systemdcarrego cinco nVidiadrivers que preciso descarregar, executar setpcipara ligar o áudio no HDMI, recarregar os drivers da nVidia e reiniciar o lightdm. Pode demorar um pouco para dar certo.

Depois de fazer os climétodos funcionarem, criarei um atalho na área de trabalho para reinicialização com um clique e sudosolicitação de senha. Depois disso, criarei um atalho na área de trabalho para uma yadcaixa de diálogo que permitirá que você escolha os kernels instalados para reinicializar. Semelhante ao menu de opções avançadas do grub.

Responder2

Para reinicializar extremamente rapidamente uma máquina Linux, chame a função reboot kernel. Ele irá liberar os discos (pelo menos na versão 3.x do kernel) e reinicializar imediatamente. Não há nada intermediário, nenhuma função do sistema operacional, scripts, etc... apenas as chamadas do kernel.

Como?

Crie reboot.c com conteúdo:

#include <stdio.h>
#include <sys/reboot.h>


int
main (int argc, char **argv)
{
    if (reboot (RB_AUTOBOOT) < 0) {
        fprintf (stderr, "%s: call to reboot() system call failed.\n",
             argv[0]);
    }

    return 0;
}

Compile reboot.c na reinicialização:

gcc reboot.c -o reboot

Execute a reinicialização (ele liberará os dados nos discos e reinicializará, é isso!):

./reboot

Tenha uma boa reinicialização!

https://github.com/masikh/reboot

Responder3

Se você deseja reiniciar parcialmente o seu computador (e não acelerar a inicialização), aqui está o meu entendimento: existem 3 partes principais na inicialização do Linux:

  1. Passo 1: Inicialização do computador até seleção do gerenciador de inicialização/SO (rEFInd, Grub, ...)
  2. Passo 2: Inicie o Linux e os principais serviços
  3. etapa 3: Iniciar a sessão
    • login de usuário
    • gerenciador de janelas como Cinnamon, KDE, Gnome, ...)

Reinicie apenas a etapa 3:

  • TipoAlt-F2eR
  • Ouserviço sudo $(cat /etc/X11/default-display-manager) reiniciar

Reinicie apenas as etapas 2 e 3:

Não sei como reiniciar o Linux a partir do seu gerenciador de boot


Reinicie todas as etapas

  • No menu principal, escolha "reiniciar"
  • Na linha de comando, digitesudo reiniciar

informação relacionada