J'ai 200 Mo assignés pour la partition /boot
. Chaque fois que j'essaie de mettre à jour le noyau, je reçois un message d'erreur indiquant que le code /boot
est saturé.
Que puis-je faire pour nettoyer /boot
et supprimer/sauvegarder les anciens noyaux?
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 fini 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
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 dans une installation partielle, ce qui signifie qu'apt a pratiquement totalement gelé et continuera à vous dire d'exécuter apt-get -f install
mê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 celui 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'accolades 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
pour 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 autoremove
pour effacer les anciens packages d’image du noyau devenus orphelins par le nettoyage manuel au démarrage.
Suggestion: exécutez Sudo apt-get update
et Sudo apt-get upgrade
pour prendre en charge les mises à niveau éventuellement sauvegardées en attendant la découverte de la partition/boot complète.
Suggestion2, Review https://help.ubuntu.com/community/AutomaticSecurityUpdates et envisagez de définir la valeur Unatended-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.
Il existe une documentation à ce sujet sur https://help.ubuntu.com/community/RemoveOldKernels
En résumé: utiliser
Sudo apt-get autoremove --purge
# and/or:
Sudo purge-old-kernels
L'outil purge-old-kernels
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 paramètre
--keep
.
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
J'ai trouvé qu'il est beaucoup plus facile d'abandonner la petite partition et de déplacer /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 la commande sous Sudo -s
):
cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot
Supprimez (ou commentez) l'entrée /boot
dans /etc/fstab
:
vim /etc/fstab
Mettez à jour grub et assurez-vous que tout est correct:
update-grub
apt
devrait maintenant pouvoir être mis à 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).
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
Sudo apt-get autoremove
Cela supprime tous les noyaux sauf les 2 derniers. Testé sur Ubuntu 16.04 LTS lorsque /boot
avait une capacité de 100% et que apt-get upgrade
avait é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.
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 envoyer 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-run
une fois que vous confirmez qu'il semble sans danger