Quando você liga seu PC, uma série de coisas acontece. Você pode visualizar várias informações, logos do fabricante, tela do GRUB, etc. O boot no Linux, dependendo do caso, pode inclusive demorar muito (assim como em outros S.Os.).
Geralmente, assim que você instala o sistema operacional, o Linux inicia de forma mais veloz. Com o tempo, porém, conforme mais programas vão sendo instalados, uma certa lentidão pode ocorrer.
Conforme você instala mais aplicativos, mais serviços vão sendo carregados durante o boot. Mais lenta a inicialização do sistema se torna. Mais tempo leva para a tela de login aparecer.
Nesse sentido, é essencial que você descubra quanto tempo leva, no total, para que seu sistema operacional inicialize. Com estes dados em mãos, é muito fácil tomar as medidas necessárias para corrigir o “problema”.
Além disso, é importante que você saiba que os procedimentos abaixo foram realizados em uma distro baseada no Ubuntu. Porém, como eles envolvem o uso do sistema init systemd, o qual é usado na maior parte das distros modernas, muito provavelmente podem ser executados em outras distros.
Como descobrir (e acelerar) o tempo de boot no Linux
Em primeiro lugar, antes de tomar quaisquer medidas para aumentar a velocidade de boot do sistema operacional, você deve descobrir quanto tempo este processo demora no seu computador.
E aqui, mais uma vez, vamos utilizar o systemd. Além disso, não deixe de dar uma conferida no artigo abaixo, para descobrir mais detalhes sobre este sistema:
Agora, antes de mais nada, vamos descobrir quanto tempo leva para nosso sistema iniciar. Gostaria de ressaltar que preparei um sistema especialmente para trabalhar neste guia.
Ou seja, junto com você, vou identificar onde está o “problema” e também corrigi-lo. Tenha cuidado, porém: não saia parando e/ou desativando serviços de qualquer modo, para evitar problemas maiores.
E para ainda mais segurança, crie um ponto de restauração no Linux, através do Timeshift.
Identificando os culpados
Bem, para descobrir o tempo de boot no Linux, digite o comando abaixo no seu terminal:
systemd-analyze
Logo a seguir, observe a saída. Você deverá visualizar uma tela semelhante à abaixo:
Cada um destes itens quer dizer algo muito importante. Confira alguns detalhes:
- Tempo gasto pelo kernel: 6.258 segundos;
- Tempo gasto pelo espaço do usuário: 1 min. e 24.729 segundos;
Ou seja, resumindo, o tempo total de inicialização foi em torno de um minuto e meio. Agora, vamos detalhar um pouco mais as coisas. Vamos encontrar os “culpados”. No terminal, execute o seguinte comando:
systemd-analyze blame
Agora você irá visualizar uma lista (talvez longa) de unidades do systemd:
Dessa forma, podemos facilmente identificar os serviços responsáveis pela demora na inicialização. Observe que só o Docker leva mais de 21 segundos, enquanto o Network Manager leva em torno de 13 segundos.
Só aqui, em teoria, já temos cerca de 30 segundos que podem ser economizados durante o boot. Portanto, vamos continuar.
Agora, execute o comando abaixo, para descobrir o momento em que os serviços foram iniciados durante o boot, bem como quanto tempo este processo levou:
systemd-analyze critical-chain
Agora, observe o resultado:
Neste caso, o Docker foi inicializado após mais de 1 minuto. O serviço levou, além disso, algo em torno de 21 segundos para ser iniciado. Percebeu um dos “problemas”, aqui?
Outro grande “vilão” (pelo menos na minha configuração atual – e possivelmente na sua também) é o Network Manager. Mais precisamente, o serviço “NetworkManager-wait-online.service” (veja na imagem acima).
Este serviço é responsável por ativar a rede. O Network Manager também está relacionado com a sua conexão com a internet, e infelizmente retarda o boot no Linux. Isto até o sistema estabelecer uma conexão, é claro.
Eliminando alguns culpados e reduzindo o tempo de boot no Linux
Agora, vamos começar a trabalhar em prol do aumento da velocidade do boot no Linux. Antes de qualquer coisa, vamos desativar o Docker e o “NetworkManager-wait-online.service”, para que eles não inicializem mais durante o boot.
E não, você não leu errado: vamos desativar o Network Manager também, pois não é necessário que ele inicialize tão cedo. Ao fazer isto, obviamente, você não terá acesso à internet antes do login.
Mas não se preocupe, a rede (e a internet, é claro) começará a funcionar alguns segundos após o login. E em relação ao Docker, bem, quando for necessário trabalhar com contêineres, você pode iniciá-lo através do comando systemctl.
Assim, para desativar os dois serviços, abra o terminal e digite os comandos abaixo:
sudo systemctl disable NetworkManager-wait-online.service
sudo systemctl disable docker.service
Obs: lembre-se de fazer as alterações necessárias (por exemplo, caso seu sistema não conte com o Docker, elimine esta parte do comando).
Em seguida, reinicie o seu computador.
Obs: caso você deseje reativar os dois serviços acima, basta usar os comandos abaixo:
sudo systemctl enable NetworkManager-wait-online.service
sudo systemctl enable docker.service
Reduzindo o tempo de espera do GRUB
Depois de termos desativado os serviços necessários, vamos agora dar uma olhada no GRUB. Incluso em grande parte das distribuições GNU/Linux, o GRUB (GRand Unified Bootloader) é um boot loader, ou “carregador de inicialização”.
O boot loader por padrão conta com um tempo de espera de 10 segundos. Porém, este tempo pode ser reduzido, de forma a acelerar a velocidade de inicialização do Linux.
Você pode alterar o valor de timeout do GRUB, de 10 segundos para 2, por exemplo. Você pode até mesmo usar 0 (zero), aqui, porém fique ciente de que neste caso o S.O. default será iniciado de forma automática, e você não terá tempo para escolher outra opção.
Antes, porém, faça um backup do arquivo de configuração, através do seguinte comando:
sudo cp /etc/default/grub /etc/default/grub.bak
Assim, vamos usar o valor “2” no tempo de espera. Portanto, abra o arquivo de configuração do GRUB através do comando abaixo:
sudo nano /etc/default/grub
Com o arquivo aberto, procure a linha GRUB_TIMEOUT=”10″. Aqui, altere o valor (e mantenha as aspas) para 2. Veja na imagem abaixo:
Em seguida, grave e feche o arquivo. Finalmente, para aplicar as modificações, execute o seguinte comando:
sudo update-grub
Obs: você também pode usar, neste caso, uma aplicação gráfica. O GRUB Customizer também funciona, neste caso. Aqui, basta alterar o valor da opção “boot padrão de inicialização depois de”, na aba “Configurações gerais”.
Em seguida, reinicie sua máquina, lembrando que até agora ajustamos as configurações abaixo:
- Desativado o serviço “NetworkManager-wait-online.service”;
- Desativado o serviço “docker.service”;
- Reduzido o tempo de espera do GRUB;
Impacto no tempo de boot no Linux até o momento
Chegou o momento de verificar se as alterações feitas até agora surtiram efeito. Portanto, vamos usar o comando systemctl novamente, conforme abaixo:
systemd-analyze
No meu caso, por exemplo, houve um ganho muito interessante, lembrando, porém, que estou fazendo as alterações com alguma parcimônia.
De qualquer forma, você agora pode observar que o tempo de inicialização foi reduzido de um minuto e meio (veja acima) para cerca de 1min. 13s:
Otimizando ainda mais o boot no Linux
Em seguida, vamos otimizar ainda mais o nosso sistema. Desta vez, através da geração de um gráfico, que permite visualização com um nível de detalhes muito maior. Use agora o seguinte comando:
systemd-analyze plot> boot.svg
O comando acima gerou um arquivo SVG (boot.svg). Lembre-se de que ele foi gerado no diretório onde você se encontra.
Você pode abrir este gráfico através de um editor de imagens qualquer. E ele é muito interessante, pois exibe uma espécie de “linha do tempo”, com um gráfico de barras e a duração de cada serviço.
O gráfico é grande, muito denso, e assim, será necessário que você use bastante o zoom do aplicativo gráfico de sua escolha. Porém, chama a atenção o fato do serviço “apt-daily.timer” tomar bastante tempo (pelo menos no meu caso).
De fato, o “”apt-daily.timer” não precisa ser carregado logo no boot. Ele ainda pode contar com um certo tempo de atraso. Assim, digite o comando abaixo, e vamos ajustar o serviço para ser iniciado 15 minutos após o boot:
sudo systemctl edit apt-daily.timer
Com o arquivo de configuração aberto, cole o seguinte conteúdo dentro dele, tornando-o padrão. Você deve adicionar o texto logo abaixo fora dos comentários (“#”), para que ele não seja desconsiderado:
# apt-daily timer configuration override
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
AccuracySec=1h
RandomizedDelaySec=30min
Agora, salve e feche o arquivo. A seguir, reinicie o seu sistema.
Removendo Snaps desnecessários
Em seguida, é preciso observar que o “snapd.service” também toma bastante tempo durante o boot no Linux, pelo menos em nosso caso (veja imagens acima).
Antes de partir para qualquer alternativa mais radical, porém, você deve verificar todos os Snaps que porventura possui instalados.
Geralmente, leva um certo tempo, durante o boot, para a montagem dos Snaps (isto sem falar no espaço ocupado no disco). Assim, verifique seu sistema em busca de pacotes “velhos” ou que você não usa mais:
snap list --all
Observe que aqui são listadas inclusive versões anteriores dos pacotes Snap. Verifique os códigos das versões, e as colunas “Rev” (Revisão) e “Notas”. Busque por Snaps “Desativados”.
Em seguida, no terminal, use um comando com a sintaxe abaixo para desinstalar Snaps que aparecem como “Desativado”:
sudo snap remove nomeDoPacote --revision=codigoDaRevisão
Agora vamos a um exemplo prático. No meu caso, para remover a revisão 115 do ONLYOFFICE, usei o comando abaixo:
sudo snap remove onlyoffice-desktopeditors --revision=115
E assim por diante. A seguir, reinicie novamente o computador.
E para saber mais a respeito deste formato de empacotamento, confira o artigo abaixo:
Conferindo o impacto no boot no Linux até agora
Se você chegou até aqui, é provável que tenha ganho alguns bons segundos (ou mais) na inicialização do seu sistema.
Outras coisas podem ser feitas, obviamente. Entretanto, que tal dar uma olhada nos ganhos até agora? Veja a imagem abaixo, portanto (comando systemd-analyze
):
Agora, observe com mais detalhes o resultado obtido através do comando systemd-analyze blame
:
Repare que o serviço “systemd-journal-flush.service” teve seu tempo muito reduzido. E isto se deve a dois comandos que executei há pouco (veja detalhes logo mais abaixo).
De qualquer forma, agora o mesmo sistema (de acordo com as imagens acima) leva cerca de 1min. e 1s. para iniciar (contra 1 minuto e meio anteriormente).
Contribuindo para isto tudo, temos o “systemd-journal-flush.service” levando cerca de 11 segundos (contra 33 segundos anteriormente) e o “snapd.service” demorando em torno de 17 segundos (contra 23 segundos anteriormente).
Finalizando os ajustes para acelerar o boot no Linux
Detalhando um pouco melhor: o “systemd-journal-flush.service” serve para liberar espaço utilizado pelos logs do systemd. Em suma, grandes arquivos de log, neste ponto, acabam deixando a inicialização mais lenta, pois todos eles são verificados durante o boot (novos dados também são adicionados, no boot).
Agora, que tal verificar quanto espaço em disco está sendo ocupado pelo sistema de logs do seu systemd?
Basta executar o seguinte comando:
journalctl --disk-usage
No meu caso, após a limpeza, o espaço ocupado foi reduzido de mais de 3 GB para cerca de 100 MB:
“Archived and active journals take up 104.0M in the file system.“
Assim, os comandos que você deve executar para resolver este problema (eu os executei há pouco) seguem abaixo:
sudo journalctl --rotate
sudo journalctl --vacuum-time=1d
Em relação à opção “–vacuum-time=1d”, estamos solicitando a eliminação de tudo com mais de 1 dia de “vida”. Altere o valor conforme desejar, mas fica aqui a sugestão.
Execute agora, novamente, o comando para verificar quanto de espaço esses logs ocupam no sistema:
journalctl --disk-usage
Perceba agora que, provavelmente, muito espaço em disco foi liberado.
Você também deve ter em mente que ferramentas como MySQL, Apache, Xampp e similares geralmente demoram mais para serem carregadas. Por outro lado, é sempre possível desativá-las através do comando systemctl disable
.
Obviamente, estamos aqui lidando com um desktop. No caso de um servidor, por exemplo, serviços como estes geralmente são necessários e não podem ser desativados.
Além disso, a troca de um disco rígido tradicional por um SSD, por exemplo, geralmente proporciona ganhos significativos. Assim, tudo depende de testes, ferramentas e, claro, orçamento.
Conclusão
E assim chegamos ao final de mais um guia no blog TecLinux. Continuando com nossa “saga” envolvendo o systemd, system init padrão em um número bem grande de distros, demos uma olhada melhor em algumas formas de acelerar a inicialização do sistema.
Como você certamente percebeu, o processo de boot no Linux não é complicado. Apenas é preciso ter paciência, tempo para testes e disposição para ir mais fundo no sistema operacional.
Gostou do conteúdo? Deixe seu comentário, compartilhe seus resultados!
0 comentários