Tenho 200 MB atribuídos para a /bootpartição. Sempre que tento atualizar o kernel, recebo uma mensagem de erro que basicamente diz que /bootestá cheia.
O que posso fazer para /bootlimpar e remover / fazer backup dos kernels antigos?
Tenho 200 MB atribuídos para a /bootpartição. Sempre que tento atualizar o kernel, recebo uma mensagem de erro que basicamente diz que /bootestá cheia.
O que posso fazer para /bootlimpar 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 ^iitorna 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 autoremovedeve ser suficiente (geralmente deixando-o com os 3 últimos kernels)
/bootestá cheio, por apt-getisso 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 -rfem /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 installmesmo 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 autoremovepara limpar os pacotes antigos de imagens do kernel que ficaram órfãos pela limpeza manual da inicialização.
Sugestão, execute sudo apt-get updatee sudo apt-get upgradecuide 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 --purgeem 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 -ieu 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-kernelsferramenta 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
--keepparâ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 --purgedeveria ser suficiente, no entanto.
Eu descobri que é muito mais fácil abandonar a pequena partição e mudar /bootpara 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 /bootentrada 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 /bootestava com 100% da capacidade e apt-get upgradefalhou 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-runquando confirmar que parece seguro