Quel est le moyen le plus sûr de nettoyer la partition / boot?

274

J'ai 200 Mo assignés pour la /bootpartition. Chaque fois que j'essaie de mettre à jour le noyau, je reçois un message d'erreur indiquant en gros que le message /bootest plein.

Que puis-je faire pour /bootnettoyer et supprimer / sauvegarder les anciens noyaux?

koba101
la source
Si / boot est pleine, voir askubuntu.com/questions/263363/...
nslntmnx

Réponses:

335

Méthode en ligne de commande:

Tout d’abord, vérifiez la version de votre noyau pour ne pas supprimer l’image du noyau en cours d’utilisation:

uname -r

Maintenant, lancez cette commande pour obtenir la liste des noyaux installés:

dpkg --list 'linux-image*' | grep ^ii

et supprimez les noyaux dont vous ne voulez plus / n'avez plus besoin en lançant ceci:

sudo apt-get remove linux-image-VERSION

Remplacez VERSION par la version du noyau que vous souhaitez supprimer.

Lorsque vous avez terminé de supprimer les anciens noyaux, vous pouvez le lancer pour supprimer tous les paquets dont vous n’avez plus besoin:

sudo apt-get autoremove

Et enfin, vous pouvez exécuter ceci pour mettre à jour la liste du noyau grub:

sudo update-grub
PeppeDAlterio
la source
34
sudo dpkg --list 'linux-image*' | grep ^iiil est un peu plus facile de voir uniquement les noyaux installés. De plus, je pense que update-grubc'est inoffensif mais pas strictement nécessaire, c'est-à-dire qu'il s'exécute automatiquement lorsque vous désinstallez un noyau.
Nelson
9
Utilisez sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""pour obtenir la liste des noms de paquets à utiliser avec sudo apt-get remove. head -n -3est utilisé pour conserver les 3 noyaux les plus récents dans le système.
Sithsu
2
mon simple une doublure:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb
27
sudo apt-get autoremovedevrait suffire (vous laissant généralement avec les 3 derniers noyaux)
mbx le
6
C'est une bonne réponse, mais je doute que cela puisse fonctionner dans la plupart des cas (si ce n'est tous): le problème est qu'il /bootest saturé et qu'il apt-getva donc échouer avec un code d'erreur ou autre. La réponse ci - dessous est un peu « hackier » (je dois avouer que je devais me acier à émettre que rm -rfdans /boot) , mais le seul qui est susceptible de travailler dans cette situation.
Marco
284

NOTE: Ceci est seulement si vous ne pouvez pas utiliser apt à nettoyer en raison d'un / boot 100% complet

Si apt-get ne fonctionne pas parce que votre / boot est à 100%, vous devrez d'abord nettoyer / boot. Cela a probablement attrapé une mise à niveau du noyau lors d’une installation partielle, ce qui signifie qu’apt a presque complètement gelé et continuera à vous dire d’exécuter, apt-get -f installmême si cette commande échoue.

Obtenez la liste des images du noyau et déterminez ce que vous pouvez faire sans. Cette commande affichera les noyaux installés, à l'exception de ceux en cours d'exécution sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`. Notez les deux dernières versions de la liste. Vous n'avez pas besoin de vous inquiéter à propos de la course car elle n'est pas listée ici. Vous pouvez vérifier cela avec uname -r.

Créez une commande pour supprimer tous les fichiers dans / boot pour les noyaux qui ne comptent pas pour vous en utilisant le développement d'accolade pour vous garder sain d'esprit. N'oubliez pas d'exclure les images du noyau actuelles et les deux plus récentes. Exemple: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. Vous pouvez également utiliser une plage avec la syntaxe {80..84}.

sudo apt-get -f install nettoyer ce qui rend grogny à propos d’une installation partielle.

Si vous rencontrez une erreur comportant une ligne du type "Erreur interne: impossible de trouver une image (/boot/vmlinuz-3.2.0-56-generic)", exécutez la commande sudo apt-get purge linux-image-3.2.0-56-generic(avec la version appropriée).

Enfin, sudo apt-get autoremoveeffacez les anciens paquets d’images du noyau qui ont été rendus orphelins par le nettoyage manuel au démarrage.

Suggestion, exécutez sudo apt-get updateet sudo apt-get upgradeprenez en charge les mises à niveau éventuellement sauvegardées en attendant la découverte de la partition / boot complète.

Suggestion2, consultez la page https://help.ubuntu.com/community/AutomaticSecurityUpdates et envisagez de définir la valeur Unattended-Upgrade :: Remove-Unused-Dependencies sur true dans /etc/apt/apt.conf.d/50unattended-upgrades. Ce sera l'équivalent d'exécuter autoremove après chaque mise à jour de sécurité pour vous assurer de nettoyer les noyaux inutilisés, mais supprimera également d'autres éléments qu'il pense inutilisés pour vous éviter ce problème à l'avenir.

papillotement
la source
3
De cette façon, j'ai la dernière en date pour le prochain redémarrage, puis celle qui précède au cas où quelque chose se briserait dans celui-ci. Habituellement, j’ai beaucoup d’espace, alors il n’ya pas de mal à en avoir quelques-unes et cela satisfait ma paranoïa de ne pas avoir assez d’options de sauvegarde dans un scénario donné.
papillotements
1
Je n'ai jamais eu de problème causé par des mises à niveau sans surveillance. Je peux imaginer des scénarios où cela pourrait être un problème lié principalement à la perte de dépendances sur des installations empaquetées non-deb Dites que vous installez php, décidez de le désinstaller et d'installer une version plus récente à partir du code source. Cette version a des dépendances fournies par l’installation précédente, mais apt n’est pas conscient du fait que cela est toujours nécessaire. La prochaine fois que vous exécuterez la suppression automatique, ces dépendances disparaîtront. Si automatisé, cela pourrait être un peu déroutant. Si vous n'installez pas en dehors des dépôts, je pense que c'est totalement sûr.
papillotements
3
Après avoir vu cela sur plusieurs serveurs virtuels vsphere (où les noyaux étaient automatiquement mis à niveau mais non supprimés par la suite), j'ai écrit un script python pour l'automatiser. J'adorerais avoir plus d'yeux
EvanK
2
Si vous utilisez dpkg --purgeun démarrage complet, vous obtiendrez ce qui suit $ 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
flickerfly
1
Après le nettoyage / boot, apt-get install -f ne fonctionnerait toujours pas. En utilisant, df -ij'ai découvert que je manquais aussi d'inodes à /cause de la quantité énorme de fichiers pour le code source des noyaux plus anciens dans/usr/src
Kristofer
51

Il existe une documentation à ce sujet à l' adresse https://help.ubuntu.com/community/RemoveOldKernels.

En résumé: utiliser

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

L' purge-old-kernelsoutil peut être installé via sudo apt install byobu. Voici la description de sa page de manuel:

Ce programme supprimera les anciens packages de noyau et d’en-tête du système, libérant ainsi de l’espace disque. Il ne supprimera jamais le noyau en cours d'exécution. Par défaut, il conserve au moins les 2 derniers noyaux, mais l'utilisateur peut remplacer cette valeur à l'aide du --keep paramètre.

Si vous souhaitez une solution de copier-coller, ReSearchIT Eng a suggéré ce qui suit:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge
peq
la source
3
Dans mon cas, apt ne fonctionne pas en raison d'un noyau en attente et le correctif suggéré est un accroc-22:
James Bowery
J'ai d'abord dû réparer les paquets cassés avec askubuntu.com/a/304388/284313. Votre solution a ensuite fonctionné.
James Bowery
3
Je pense que cela devrait être la solution acceptée dès maintenant.
Fran Marzoa
3
c'est beaucoup plus sûr que la réponse acceptée. Je pense que apt-get autoremove --purgedevrait être suffisant, cependant.
Woodrow Barlow
7

J'ai trouvé qu'il est beaucoup plus facile d'abandonner la petite partition et de passer /bootà la racine. Cela évite également les problèmes de manque d'espace à l'avenir.

Déplacez d'abord vos données de la partition de démarrage vers la racine (exécutez en tant que sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

Supprimer (ou commenter) l' /bootentrée dans /etc/fstab:

vim /etc/fstab

Mettez à jour grub et assurez-vous que tout est correct:

update-grub

apt devrait maintenant être en mesure de mettre à niveau sans problèmes.

Cela laisse une partition inutilisée de 200 Mo (que vous pouvez utiliser pour autre chose si vous trouvez que cela en vaut la peine).

laktak
la source
5
C'est une bonne idée, mais ne fonctionne pas si vous souhaitez un chiffrement de disque complet pour votre partition racine.
Paŭlo Ebermann
Oui, il y a des cas où / boot devrait être une partition séparée. Un autre exemple est que Grub était auparavant incapable de charger à partir d'une partition LVM.
Bastion
4

Suppression des anciens noyaux (pour libérer de l'espace sur / boot), voir: 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]+//')")

Puis courir

sudo apt-get update
Amos Folarin
la source
1
c'était la seule qui a fonctionné .... excellente solution
John
Meilleure réponse! C’est la seule solution qui a fonctionné pour moi; autoremove est stupide; il essaie de réinstaller les noyaux avec des dépendances non satisfaites avant de les supprimer officiellement. Je tournais en rond, manquant d’espace encore et encore. Cette réponse est d'or.
Lonnie Best
3

sudo apt-get autoremove

Cela supprime tous les noyaux sauf les 2 derniers. Testé sur Ubuntu 16.04 LTS lorsqu'il /bootétait à 100% de sa capacité et apt-get upgradequ'il a échoué lors de la dernière mise à niveau du noyau. Le retrait automatique du noyau est itératif, donc si vous avez plusieurs noyaux, ils seront supprimés un par un. Alors soyez patient.

DeepSpace101
la source
1

Pourquoi le faire à la main quand on peut le faire avec un outil? Vous savez que vous en aurez de nouveau besoin dans 30 secondes, car il leur faut 30 secondes pour publier une nouvelle mise à jour kernal ces jours-ci = P

Je recommande d'utiliser cet outil, bootnukem

git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

ensuite

sudo bootnukem --dry-run

Supprimez --dry-runune fois que vous confirmez qu'il semble en sécurité

Jonathan
la source