Tenho 200 MB atribuídos para a /boot
partição. Sempre que tento atualizar o kernel, recebo uma mensagem de erro que basicamente diz que /boot
está cheia.
O que posso fazer para /boot
limpar e remover / fazer backup dos kernels antigos?
Tenho 200 MB atribuídos para a /boot
partição. Sempre que tento atualizar o kernel, recebo uma mensagem de erro que basicamente diz que /boot
está cheia.
O que posso fazer para /boot
limpar e remover / fazer backup dos kernels antigos?
Respostas:
Primeiro verifique sua versão do kernel, para não excluir a imagem do kernel em uso, executando:
uname -r
Agora execute este comando para obter uma lista dos kernels instalados:
dpkg --list 'linux-image*' | grep ^ii
e exclua os kernels que você não deseja / precisa executando:
sudo apt-get remove linux-image-VERSION
Substitua VERSION pela versão do kernel que você deseja remover.
Quando você terminar de remover os kernels mais antigos, poderá executar isso para remover todos os pacotes desnecessários:
sudo apt-get autoremove
E, finalmente, você pode executar isso para atualizar a lista do kernel do grub:
sudo update-grub
sudo dpkg --list 'linux-image*' | grep ^ii
torna um pouco mais fácil ver apenas os kernels instalados. Também acho que update-grub
é inofensivo, mas não estritamente necessário, que é executado automaticamente quando você desinstala um kernel.
sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""
para obter a lista de nomes de pacotes a serem usados sudo apt-get remove
. head -n -3
é usado para manter os 3 núcleos mais recentes restantes no sistema.
apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
sudo apt-get autoremove
deve ser suficiente (geralmente deixando-o com os 3 últimos kernels)
/boot
está cheio, por apt-get
isso falhará com algum código de erro ou outro. A resposta abaixo é um pouco "hackier" (Devo confessar que eu tinha que me preparar para emitir que rm -rf
em /boot
), mas o único que é provável que trabalhar nesta situação.
NOTA: isto é apenas se você não puder usar o apt para limpar devido a uma inicialização 100% completa
Se o apt-get não estiver funcionando porque o seu / boot está em 100%, será necessário limpar / inicializar primeiro. Provavelmente, houve uma atualização do kernel em uma instalação parcial, o que significa que o apt praticamente congelou completamente e continuará dizendo para você executar, apt-get -f install
mesmo que esse comando continue falhando.
Obtenha a lista de imagens do kernel e determine o que você pode fazer sem. Este comando mostrará os kernels instalados, exceto o atualmente em execução sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`
. Observe as duas versões mais recentes da lista. Você não precisa se preocupar com o que está sendo executado, pois ele não está listado aqui. Você pode verificar isso com uname -r
.
Crie um comando para excluir todos os arquivos em / boot para kernels que não importam para você usando a expansão de chaves para mantê-lo saudável. Lembre-se de excluir a atual e as duas imagens mais recentes do kernel. Exemplo: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*
. Você também pode usar um intervalo com a sintaxe {80..84}.
sudo apt-get -f install
para limpar o que está deixando o apt mal-humorado com uma instalação parcial.
Se você encontrar um erro que inclua uma linha como "Erro interno: não foi possível encontrar a imagem (/boot/vmlinuz-3.2.0-56-generic)", execute o comando sudo apt-get purge linux-image-3.2.0-56-generic
(com a versão apropriada).
Finalmente, sudo apt-get autoremove
para limpar os pacotes antigos de imagens do kernel que ficaram órfãos pela limpeza manual da inicialização.
Sugestão, execute sudo apt-get update
e sudo apt-get upgrade
cuide de todas as atualizações que podem ter sido copiadas enquanto aguarda a descoberta da partição completa / inicialização.
Sugestão2, reveja https://help.ubuntu.com/community/AutomaticSecurityUpdates e considere configurar a Atualização autônoma :: Remover-Não-Dependências-dependentes como verdadeira em /etc/apt/apt.aptf.d/50unattended-upgrades. Isso equivale a executar a remoção automática após cada atualização de segurança para garantir que você limpe os kernels não utilizados, mas também removerá outras coisas que considera não utilizadas, poupando-o desse problema no futuro.
dpkg --purge
em um boot completo você terá o seguinte $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
df -i
eu descobri que eu também estava ficando sem inodes em /
causa da enorme quantidade de arquivos para o código fonte de kernels mais antigos em/usr/src
Há documentação sobre isso em https://help.ubuntu.com/community/RemoveOldKernels
Em resumo: Use
sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels
A purge-old-kernels
ferramenta pode ser instalada via sudo apt install byobu
. Aqui está a descrição da sua página de manual:
Este programa removerá pacotes antigos de kernel e cabeçalho do sistema, liberando espaço em disco. Ele nunca removerá o kernel atualmente em execução. Por padrão, ele manterá pelo menos os 2 kernels mais recentes, mas o usuário pode substituir esse valor usando o
--keep
parâmetro
Se você deseja uma solução copiar e colar, o ReSearchIT Eng sugeriu o seguinte:
sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge
apt-get autoremove --purge
deveria ser suficiente, no entanto.
Eu descobri que é muito mais fácil abandonar a pequena partição e mudar /boot
para a raiz. Isso também evita problemas de falta de espaço no futuro.
Primeiro, mova seus dados da partição de inicialização para raiz (execute como sudo -s
):
cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot
Remova (ou comente) a /boot
entrada em /etc/fstab
:
vim /etc/fstab
Atualize o grub e verifique se está tudo correto:
update-grub
apt
agora deve poder atualizar sem problemas.
Isso deixa uma partição de 200mb não utilizada (que você pode usar para outra coisa se achar que vale a pena).
Removendo Kernels antigos (para liberar espaço no / boot), consulte: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot
sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")
Então corra
sudo apt-get update
sudo apt-get autoremove
Isso remove todos, exceto os 2 últimos kernels. Testado no Ubuntu 16.04 LTS quando /boot
estava com 100% da capacidade e apt-get upgrade
falhou em sua última atualização do kernel. A remoção automática do kernel é iterativa; portanto, se você tiver vários kernels, eles serão removidos um de cada vez. Então seja paciente.
Por que fazer manualmente quando você pode fazer isso com uma ferramenta? Você sabe que precisará disso novamente em 30 segundos, porque leva 30 segundos para eles enviarem uma nova atualização de kernal hoje em dia = P
Eu recomendo usar esta ferramenta, bootnukem
git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh
Então
sudo bootnukem --dry-run
Remova --dry-run
quando confirmar que parece seguro