Comment libérer plus d'espace dans / boot?


563

Ma /bootpartition est presque pleine et je reçois un avertissement chaque fois que je redémarre mon système. J'ai déjà supprimé les anciens paquets du noyau (linux-headers ...). En fait, je l'ai fait pour installer une version plus récente du noyau fournie avec les mises à jour automatiques.

Après avoir installé cette nouvelle version, la partition est presque pleine à nouveau. Alors quoi d'autre puis-je supprimer? Existe-t-il d'autres fichiers associés aux anciennes images du noyau?

Voici une liste des fichiers qui se trouvent sur ma /bootpartition:

:~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

Actuellement, j'utilise le 3.0.0-14-genericnoyau.


5
Il est à noter que toutes les installations Ubuntu n’auront pas une partition / boot distincte - c’est souvent une grosse partition. Cette réponse s'applique à ceux qui ont une partition / boot séparée. Ceux qui utilisent le chiffrement LVM ou "disque complet" ont besoin d'un / boot séparé, sinon il peut être optionnel.
thomasrutter

4
Si quelqu'un d'autre a le même problème que moi: après que / boot n'ait plus d'espace disponible, "apt-get upgrade" échouera lors de la régénération des fichiers initrd pour les noyaux installés ou si le script update-initramfs est installé, en examinant la contenu de / var / lib / initramfs-tools. Dans cette situation, il est impossible de supprimer les anciens noyaux à l’aide d’apt-get car la partition fscking / boot n’a plus d’espace libre sur le périphérique. Cela peut être fait en utilisant "dpkg -P" puis en nettoyant l'entrée correspondante dans / boot (pour libérer de l'espace) et / var / lib / initramfs-tools (l'image initrd ne sera pas générée).
wojci

3
Un point clé pour des réponses correctes est qu’elles vous disent de supprimer les paquetages contenant les anciennes versions du noyau. De nombreuses pages Web qui traitent de ce problème recommandent de supprimer directement les fichiers de la partition / boot; Cela peut fonctionner pendant un certain temps, mais vous pouvez éventuellement mettre à jour un paquet qui recrée les fichiers manquants pour les versions du noyau contenant des paquets, ce qui vous fait manquer d'espace.
Kgrittn

Réponses:


630

Vous avez beaucoup de noyaux inutilisés. Supprimez tous les noyaux sauf les derniers avec:

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

Ceci est un raccourci pour:

sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

Le retrait du linux-image-x.x.x-xpaquet sera également supprimé linux-image-x.x.x-x-generic.

Les en-têtes sont installés dans /usr/srcet sont utilisés lors de la construction de modules du noyau en dehors de l’arbre (comme le pilote nvidia et la virtualbox propriétaires). La plupart des utilisateurs doivent supprimer ces packages d'en-tête si le package de noyau correspondant ( linux-image-*) n'est pas installé.

Pour lister tous les noyaux installés, lancez:

dpkg -l linux-image-\* | grep ^ii

Une commande pour afficher tous les noyaux et les en-têtes pouvant être supprimés, à l’exclusion du noyau en cours d’ exécution:

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

Il sélectionne tous les packages nommés en commençant par linux-headers-<some number>ou linux-image-<some number>, affiche les noms des packages pour les packages installés, puis exclut le noyau chargé / en cours d'exécution (pas nécessairement le dernier noyau!). Cela correspond à la recommandation de tester un nouveau noyau avant de supprimer les anciens noyaux connus pour fonctionner.

Ainsi, après avoir mis à niveau les noyaux et redémarré pour le tester, vous pouvez supprimer tous les autres noyaux avec:

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

16
Réponse fantastique. Une autre information pourrait aider: Comment pouvez-vous dire (avec certitude) lequel des noyaux que vous utilisez? Vous ne pouvez probablement pas supposer que c'est le dernier ... Edit : Et il semble que la réponse soit uname -a. Il est probablement préférable de ne pas avoir de processus en attente de redémarrage pour installer le nouveau noyau (comme je l'ai fait, mais j'ai noté l'inadéquation entre uname -ale "dernier" noyau et le dernier).
TJ Crowder

5
@freddyb Fait. Notez que les commandes impriment / suppriment les noyaux autres que celui chargé / démarré .
Lekensteyn

9
Si apt-get purge échoue à cause de dépendances non résolues,
svandragt

11
Réponse très complète et fonctionne toujours ... et toujours nécessaire en 2014. Un peu ridicule que ce ne soit toujours pas fait automatiquement par les outils de l'interface graphique.
Allprog

6
@ byf-ferdy Le noyau est une partie essentielle du système d'exploitation. Si la version la plus récente ne fonctionne pas complètement avec votre matériel, vous pouvez toujours en sélectionner une autre pour démarrer. Une fonctionnalité intéressante serait probablement quelque chose qui supprime tous les noyaux de plus d'un mois installés automatiquement (à l'exception des deux derniers).
Lekensteyn

217

Votre partition de démarrage est pleine. Comme il s’agit d’une mise à jour du noyau, ces fichiers seront copiés sur la partition d’amorçage. Vous devez donc les nettoyer. Voici un article de blog qui vous montrera comment effacer les anciennes images du noyau avec une seule commande. Je vais donner un résumé de base de la méthode. Utilisez cette commande pour imprimer la version actuelle de votre noyau:

uname -r

Utilisez ensuite cette commande pour imprimer tous les noyaux que vous avez installés et qui ne sont pas votre dernier noyau:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Assurez-vous que votre noyau actuel ne figure pas sur cette liste. Remarquez comme il s’agit de la majorité de la commande finale (en bas). Pour désinstaller et supprimer ces anciens noyaux, vous souhaitez diriger ces arguments vers:

sudo apt-get -y purge

Maintenant, nous pouvons faire tout ce que nous voulons en combinant ces deux dernières commandes dans ce désordre impie:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Et cette commande prendra soin de tout pour vous. Je confirmerai que cela fonctionne parfaitement, mais ne faites jamais confiance à quiconque sur Internet. :) Pour plus d'informations, l'article de blog fournit une très bonne explication de la lecture de chaque partie de la commande afin que vous soyez convaincu qu'elle fait ce que vous voulez.


cela correspond également à linux-libc-dev: amd64
Frederick Nord

que va provoquer la suppression involontaire de "linux-libc-dev: amd64"?
ConfusedStack

@FrederickNord merci pour le heads up. Corrigé ceci. Cela aurait posé quelques difficultés lors de la compilation des programmes c.
Dward

9
La commande sonne bien, mais lorsque je l’exécute, la même erreur que lorsque je souhaite installer quelque chose s’affiche. Elle ne peut pas le faire car le démarrage est saturé: --------------- ----------- Les paquetages suivants ont des dépendances non satisfaites: linux-image-extra-4.2.0-27-generic: Dépend de: linux-image-4.2.0-27-generic mais il ne va pas à installer linux-image-extra-4.2.0-30-generic: Dépend de: linux-image-4.2.0-30-generic mais il ne va pas être installé
Alex

109
sudo apt-get autoremove

Cette commande fait le travail automatiquement.


7
Comme son nom l'indique, apt-get AUTOremove est une opération automatisée dans laquelle le système prend "au mieux" ce que vous essayez d'atteindre. Il ne doit pas être utilisé comme substitut à l’administration système du bon sens. Le problème avec cette approche: Si vous (ou une mise à jour) supprimez un package qui fait partie de cette liste de dépendances, la fonction de suppression automatique souhaite supprimer tous les autres packages de la liste de dépendances, vous laissant avec un système sans bureau (et parfois même avec un système complètement cassé).
Rinzwind

Référence: 1 des nombreuses sources de ce commentaire ci-dessus: linuxquestions.org/questions/debian-26/…
Rinzwind

7
si linux-image-generic est installé et que les nouveaux noyaux n'ont pas été installés explicitement, cela supprimera les anciens noyaux. Le bon sens est de n'accepter aucune modification du système sans les lire au préalable. Si le bon sens a été utilisé avant d'utiliser cette commande, il n'y aura aucun problème.
Mchid

1
@Rinzwind - Cette commande a vidé 250 Mo de mon espace disque en supprimant les anciens 'en-têtes linux'
Chinmaya B

3
autoremove fonctionne si utilisé avant une condition de manque d'espace. Cependant, une fois que apt manque d'espace et abandonne (et que l'utilisateur remarque enfin le problème), il est trop tard pour exécuter la suppression automatique ou toute autre solution basée sur apt. Si c'est le cas pour vous, essayez l'une des solutions basées sur dpkg.
user535733

40

Le gestionnaire de paquets Synaptic peut être utilisé pour sélectionner et supprimer facilement les anciennes images du noyau. Capture d'écran du gestionnaire de paquets Synaptic

Si vous n'avez pas encore installé Synaptic:

sudo apt-get install synaptic

Démarrez l'application et sélectionnez les options affichées.

Vous devriez pouvoir mettre en surbrillance tous les paquets "linux" avec la version "2.6.x" où x est compris entre 31 et 38 selon les fichiers de votre dossier / boot.

Cliquez avec le bouton droit de la souris sur chacun de ces packages Linux et choisissez l'option "Marquer pour suppression complète". Enfin, cliquez sur le bouton Appliquer. Cela supprimera tous les fichiers et tous les fichiers associés. Votre /bootdossier devrait maintenant être un peu plus ordonné.


Je suis sur 14.04. J'ai géré cette situation par le passé via la ligne de commande, mais j'ai décidé d'essayer cette méthode aujourd'hui ... pour moi, mes images Linux étaient situées sous installé (manuel), non installé (local ou obsolète)
Ryan

8
Oh non. Je ne peux pas installer Synaptic car il n'y a pas d'espace disponible /boot!
John McGehee

@JohnMcGehee fsck et divisé devrait résoudre ce problème pour vous.
FlipMcF

25

Merci pour votre post détaillé de votre problème, cela m'a permis d'aller dans la bonne direction. Bien qu'il soit utile de conserver les fichiers du noyau précédents, vous pouvez tous les supprimer en une fois. Pour ce faire, consultez l'article suivant:
Comment supprimer tous les en-têtes, images et modules du noyau Linux non utilisés

Fait en ligne de commande. Si vous le faites via une utilisation à distance, utilisez quelque chose comme WINSCP pour ouvrir une session de terminal et collez-le simplement, cela fonctionne très bien.

Ici, il est copié du lien de l'article, je vous suggère de lire l'article complet:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

23

Ceci est une nouvelle réponse à une vieille question, mais un moyen simple de nettoyer cette chose (et plus) consiste à installer Ubuntu Tweak . Pour l' installer :

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

Ensuite, vous pouvez exécuter Ubuntu Tweak, en allant sur l'onglet "concierge", et à partir d'ici, il suffit de trois clics:

Ubuntu tweak janitor pour les vieux noyaux

Il est préférable de laisser le dernier noyau (on ne sait jamais) ou un noyau qui fonctionne bien pour des raisons de sécurité. mais c'est facilement personnalisable.

Vous pouvez utiliser le même outil pour nettoyer beaucoup de choses - rappelez-vous simplement que si vous nettoyez le cache des vignettes ou le cache de la TB, le système devra les reconstruire si nécessaire.


J'ai essayé d'installer Ubuntu Tweak et d'aller également sur le site Web du référentiel. Il dit que ce n'est que pour 13.10 et avant. Avez-vous une version mise à jour pour 15.04?
JayCouture.com

@ JayCouture.com La version sur le site est pour 14.04 (le "pour 13.10 et avant" est un lien vers des versions plus anciennes). J'ignore s'il existe une version pour 14.10 ou 15.04.
Rmano

19

J'ai pu résoudre le problème en utilisant dpkgpour supprimer directement les packages. Bien que les packages soient toujours répertoriés dpkg -l, les fichiers sont supprimés /boot, ce qui libère de l'espace.

phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`

Après cela, apt-get -f installmes problèmes de dépendance ont été résolus et tout allait bien pour le monde.

Je n'accepterai cependant pas cette réponse, car je dois encore savoir si je devrais augmenter ma /boottaille ou faire autre chose.


Vous devriez soit ne pas avoir une partition / boot séparée en premier lieu, soit augmenter sa taille car 100 Mo est trop petit.
Psusi

1
Merci, je supprime via:sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt

2
et sudo dpkg --remove linux-image-3.5.0-28*pour l'image, vérifié viadf -h
TiloBunt

Merci, cela m'a servi aussi. J'ai enlevé quelques vieux noyaux ( pas celui que j'utilisais actuellement) puis j'ai fait le apt-get -f install. Aussi, n'oubliez pas de faire plus tard apt-get autoremove, pour éventuellement supprimer d'autres inutiles.
Yajo

15

Vous pouvez cesser d'utiliser une partition / boot distincte pour ne pas disposer d'un espace aussi limité. Pour ce faire, démontez la partition, montez-la ailleurs, copiez tous les fichiers dans le répertoire / boot de votre partition racine, supprimez l'entrée de / etc / fstab et réinstallez grub. Par exemple (vous devrez utiliser la partition correcte):

sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

Vous pouvez ensuite utiliser gparted pour supprimer l'ancienne partition / boot et éventuellement étendre la partition racine pour utiliser cet espace. Pour étendre la partition racine, vous devez démarrer à partir du livecd et l’espace libre doit être immédiatement à droite. Si la partition / boot se trouve actuellement à gauche de la partition racine, vous devrez d'abord déplacer la partition racine vers la gauche, puis l'étendre, mais cela peut prendre un temps très très long. difficulté.


6
Déplacer / boot sur ma partition principale n'est pas une solution pour moi car tout sauf le / boot est chiffré. Vous ne pouvez pas le savoir d'après ma question, désolé.
user6722

C'est une bonne solution si les solutions ci-dessus ne fonctionnent pas car vous ne disposez d'aucun espace sur le volume de démarrage, ou si vous rencontrez régulièrement le problème de "manque d'espace". Veuillez d'abord lire pourquoi il est parfois nécessaire d'avoir une partition / boot: ( help.ubuntu.com/community/DiskSpace )
svandragt

@svandragt, il n'y a fondamentalement plus de raison d'avoir besoin d'une partition / boot de nos jours. Il ne reste que le cas où votre bios est cassé et ne peut pas voir le disque en entier, et aucune machine fabriquée au cours de la dernière décennie n’a une telle limitation. D'autres cas, tels que l'utilisation de RAID ou LVM, sont désormais correctement gérés par grub2.
Psusi

Il y a quelques raisons d'avoir une partition de démarrage séparée. Mais je ne suis pas sûr que les avantages valent la configuration de complexité accrue. 1. Le système d'exploitation peut bénéficier d'un démarrage plus rapide via ext2. 2. La sécurité peut être accrue en montant / en démarrant en tant que RO. (rootkits, etc.), ou même rester démonté au moment de l'exécution. 3. grub (1) a (eu) encore quelques problèmes avec ext4. 4. Requis pour exécuter lvm (grubv1). Bien que cela ne s'applique pas à la configuration par défaut d'ubuntu.
David Cahill

lsblkpeut être utilisé pour déterminer quelle partition est quoi
Mr Purple

9

Prenant le meilleur des réponses ci-dessus, mon approche éprouvée est la suivante:

  • uname -a pour trouver le noyau en cours d'exécution.
  • dpkg -l linux-{headers,image}-\* | grep ^iipour lister tous les paquets liés au noyau actuellement installés. Cela inclura le noyau en cours d'exécution.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz}enlever les vieux noyaux. Remplacez xx,yy,zzpar une liste des versions du noyau que vous souhaitez supprimer: il s'agit de toutes les versions répertoriées par la commande précédente qui sont plus anciennes que le noyau en cours d'exécution. Assurez-vous de ne pas supprimer le noyau en cours d’exécution, car votre système ne pourra plus démarrer . Vous devrez peut-être aussi changer la version du noyau de 3.16.0ce qui est installé sur votre système.
  • En option, effectuez une opération supplémentaire. sudo apt-get autoremoveCela supprimera toutes les dépendances résiduelles des anciens noyaux dont le noyau actuel n'a plus besoin, ce qui libèrera de l'espace supplémentaire.

Vous pouvez avoir des fichiers d'en-tête sans que les versions du noyau correspondantes soient installées, ou inversement - incluez simplement toutes ces versions dans la commande. APT se plaindra que certains paquets ne peuvent pas être supprimés car ils ne sont pas installés, mais cela ne fera aucun mal.

Si quelque chose échoue ...

  • Si la commande apt échoue en raison d'un pas d' espace sur le périphérique erreur, utilisez la commande correspondante à la place dpkg: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Si la commande dpkg ne fonctionne toujours pas car les linux-imagepackages sont requis par les linux-headerspackages de la même version (que vous souhaitez également désinstaller), il est possible que dpkg n'ait pas résolu ce problème. Vérifiez de nouveau le résultat dpkg -let spécifiez les suffixes de nom de package sur la ligne de commande. Par exemple, sur l’un de mes systèmes, la commande qui a finalement fonctionné a été sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • Si vous rencontrez une autre erreur, demandez de l'aide, votre problème pourrait être différent de celui que vous pensiez.

@ user535733 le cas habituel (au moins l'un , je continue à courir dans) est qu'il ya encore un peu d' espace sur /boot, mais pas assez pour un autre paquet de noyau. Dans ces cas, ce qui précède a bien fonctionné. N'hésitez pas à ajouter la dpkgcommande correspondante . Pour ce qui est purge, non, ce n'est pas une sorte de "suppression forcée". Contrairement à ce qu’il fait, removeil supprime également les fichiers de configuration. Depuis / aussi longtemps que les paquets du noyau installer aucun fichier de configuration, removeet purgeferont la même chose pour les paquets du noyau.
user149408

Ajout d'une quatrième puce avec la commande dpkg correspondante.
user535733

4

Pour moi les deux apt-get purgeet les dpkg --removedeux ont échoué. J'ai donc dû supprimer quelques anciennes images du noyau de / boot avec rm -f.


4
Ce n'est pas un bon moyen de supprimer des paquets. Bien que cette réponse ne précise pas vraiment pourquoi leur suppression a échoué, je suis sûr que si cette information était fournie (dans une question distincte, bien sûr), nous serions en mesure d'essayer de déterminer la cause du problème.
thomasrutter

2
Je crois que cela a échoué, car la /bootpartition était pleine. Ces commandes essaient d’abord de mettre à jour le noyau avec les No space left on deviceinitrd.img
versions

1
AVERTISSEMENT, la suppression directe de fichiers peut poser problème, car une mise à jour du paquet linux-firmware peut recréer le fichier initrd.img pour chaque version qui, à son avis, est installée en fonction des informations sur le paquet. Voir: askubuntu.com/questions/865577/…
kgrittn

1
merci, c'est la solution finale qui sauve des vies lorsque rien d'autre ne fonctionne.
Jeff Puckett

4

Lister tous les noyaux:

dpkg --list 'linux-image*'

Afficher le noyau actuel:

uname -r

Répertoriez tous les noyaux SAUF celui en cours:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Assurez-vous que votre noyau actuel ne figure pas sur cette liste.

Supprime tous les noyaux SAUF celui en cours:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Effacer les autres trucs:

sudo apt-get autoremove

Si cela vous donne toujours une erreur d’espace disque d’amorçage pour l’installation / désinstallation de fichiers, supprimez directement l’une des OLD images du répertoire / boot,

ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 

REMARQUE: Veuillez revoir l’image actuelle du noyau avant de supprimer une image.


2

J'ai déjà supprimé les anciens paquets du noyau (linux-headers ...)

linux-headers-*ne sont pas des noyaux. Les paquets de noyau sont ceux nommés linux-image-*. Ceux nommés linux-headers-*sont des packages de développement pour la compilation des modules du noyau: ils ne résident pas dans le répertoire / boot et ne sont pas requis pour une utilisation quotidienne au quotidien de votre système.

Les fichiers listés dans / boot font inclure plusieurs vieilles images du noyau ( vmlinuz*) et compilé des images initrd ( initrd.img*) pour ces noyaux, ce qui est une indication que vous avez encore beaucoup de vieux paquets de noyau installés.

Vous devriez pouvoir lister vos noyaux installés avec

aptitude search ~ilinux-image

(Notez que cela retournera probablement les paquets qui ne sont pas des noyaux, aussi).

Il n’est généralement pas nécessaire d’installer plus de deux noyaux - celui qui est actuellement utilisé et celui qui le précède (en tant que solution de secours). Vous pouvez donc commencer à supprimer les anciens, un à un, comme ceci:

sudo apt-get autoremove linux-image-3.2.0-23-generic

Assurez-vous de remplacer "3.2.0-23-generic" par la version du noyau que vous souhaitez supprimer! En outre, ne supprimez pas les paquets tels que linux-image-generic. Vous devez faire très attention de ne pas supprimer le noyau en cours d'exécution, sinon vous ne pourrez pas démarrer (Ubuntu peut ou non vous en avertir).

Vous pouvez trouver votre noyau en cours d'exécution avec:

uname -r

1

J'ai eu ce problème et plus encore car j'ai supprimé initrd-img-xxxmanuellement certains fichiers du répertoire / boot et que ces anciennes versions étaient toujours générées et remplies dans le /bootdossier. Pour résoudre ce problème, j'ai suivi ce qui suit:

  • J'ai supprimé manuellement l'ancienne version du noyau générée afin de libérer de l'espace.
  • Vous allez éditer un fichier de configuration texte en tant que superutilisateur. Collez donc les éléments suivants dans un terminal:

    sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • Localisez la ligne update_initramfs=yeset remplacez-la par update_initramfs=no. Enregistrez et quittez le fichier, puis exécutez:

    sudo dpkg --configure -a
    

Cela a résolu mon problème. C'était basé sur ce blog

Si tout va bien, tout devrait bien se passer lorsque vous redémarrez, et plus tard, vous pourrez essayer de modifier le noretour yesen update-initramfs.conf.


1

Je montre que, même en 2017, cette question a de nouveaux commentaires et réponses mais manque une réponse qui me semble très utile ici:

Ubuntu, en tant qu’OS de bureau à usage quotidien simple, n’a aucune raison de s’installer avec une partition \ boot distincte, et quelque chose comme cela n’offrira PAS quelque chose à un "utilisateur ordinaire" ... Une solution est donc une nouvelle installation sans partition \ boot et cela comme vous n'aurez jamais un tel problème

PS: Ma réponse peut être supprimée ou ajoutée à la réponse acceptée ... (Je pense que cela aidera certaines personnes de cette façon)


1

Super utilitaire qui efface votre partition de démarrage

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

Utilisez à vos risques et périls, mais cela a fonctionné pour moi:

sudo bootnukem

Pourquoi le vote négatif?
Jonathan le

0

Dans aptitude ou synaptic il y a une section "vieux ou emballé manuellement". Il devrait y avoir les anciens paquets linux.


0

J'ai écrit ci-dessous un script bash qui rend le processus un peu plus convivial.

YMMV - c'était fait pour Mint 14. J'apprends toujours BASH, donc c'est probablement un peu maladroit. Utilisez à vos risques et périls, mais cela fonctionne pour moi!

#!/bin/bash

endCol='\e[0m'
bold_red='\e[1;31m'
bold_green='\e[1;32m'
bold_yellow='\e[1;33m'

title_color='\e[0;30;47m'

function show_kernel_info {
clear
current_kernel=$(uname -r)
echo "Current ACTIVE kernel is:"
echo -e "  "$bold_yellow$current_kernel$endCol
echo "This kernel will be TOTALLY EXCLUDED from all actions in this script."
echo "Also, one fallback non-active kernel will be always left untouched."
echo ""
echo "These are the non-active kernels stored in /boot:"
count_of_old_kernels_in_boot=$(ls -o /boot/initrd* | grep -c -v "$current_kernel")
if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo " * No non-active kernels found! *"
else
  ls -o /boot/initrd* | grep -v "$current_kernel"
fi
echo ""
list_of_old_kernels=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic" | head -n 1)
count_of_old_kernels_installed=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -c -v "linux-image-generic")
echo "Listing of all unused kernels still installed in the system (these may not exist in /boot):"
if [ $count_of_old_kernels_installed = 0 ]; then
  echo " * No unused kernel installs found! *"
else
  dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic"
fi
echo ""
}

function exit_script {
free_space_after=$(df -BM /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
let freed_space=$free_space_after-$free_space_before
echo ""
echo "Results (in MB)"
echo "---------------"
echo "Free space in /boot before script was run: "$free_space_before
echo "Free space now: "$free_space_after
echo ""
echo "Amount of space freed up = "$freed_space
echo ""
echo "Press any key to exit."
read -s -n 1
echo ""
exit
}

# Main code
echo ""
echo -e $title_color" --------------------------- "$endCol
echo -e $title_color" -   Kernel Cleanup v1.0   - "$endCol
echo -e $title_color" --------------------------- "$endCol
echo ""
echo "Maximise this window for readability."
echo "Press any key to continue."
read -s -n 1
echo ""
echo "This script will remove old unused kernels, but it will prompt you before removing each one."
echo "It will never remove the current running kernel, and will also leave one fallback kernel."
echo "It can also remove source files from /usr/src for each kernel removed."
echo "This is normally safe to do and will free up lots more space."
echo ""
echo "Do you want that done as well? (y/n, enter=yes)"
valid_input=0
while [ "$valid_input" = "0" ]; do
  read -s -n 1 YesNo_input
  if [ "$YesNo_input" = "" ]; then
    YesNo_input="y"
  fi
  case $YesNo_input
  in
    y)
    RemoveSource="y"
    valid_input=1
    ;;

    Y)
    RemoveSource="y"
    valid_input=1
    ;;

    n)
    RemoveSource="n"
    valid_input=1
    ;;

    N)
    RemoveSource="N"
    valid_input=1
    ;;
  esac
done

free_space_before=$(df -h /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
show_kernel_info
while [ $count_of_old_kernels_in_boot -gt 1 ]; do
  # failsafe check if somehow the current kernel is about to be removed!
  if [ "$current_old_kernel" = "$current_kernel" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow the current kernel has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  # failsafe check if somehow a linux-image-generic entry is about to be removed
  if [ "$current_old_kernel" = "linux-image-generic" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow one of the linux-image-generic entries has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  echo "Command about to be executed is:"
  echo "  $ sudo apt-get purge \"$current_old_kernel\""
  check_in_boot=$(echo $current_old_kernel | sed 's/linux-image/initrd.img/g')
  if [ -e /boot/$check_in_boot ]; then
    echo -e $bold_yellow"Note:"$endCol" This kernel exists in /boot but it NON-active, so it's OK to remove."
  else
    echo -e $bold_green"Totally safe to remove:"$endCol" This kernel does NOT exist in /boot."
  fi
  echo ""
  echo "Are you sure you want to remove this kernel?"
  echo "(*upper case* Y=yes / any other key will exit the script)"
  read -s -n 1 yes_no
  echo ""
  # Only entering a single upper case Y will work!
  if [ "$yes_no" != "Y" ]; then
    echo "Aborting script."
    exit_script
  fi
  echo "Removing kernel "$current_old_kernel"..."
  sleep 1
  sudo apt-get -y purge $current_old_kernel
  if [ "$RemoveSource" = "y" ]; then
    current_old_source=$(echo $current_old_kernel | sed 's/linux-image/linux-headers/g')
    current_old_source=$(echo $current_old_source | sed 's/-generic//g')
    current_old_source=$(echo $current_old_source | sed 's/-pae//g')
    sudo apt-get -y purge $current_old_source
  fi
  show_kernel_info
done

if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo -e $bold_red"There are no NON-active kernels to remove!"$endCol
else
  echo -e $bold_red"There is only one NON-active kernel left in /boot!"$endCol
  echo "This script will not remove the last non-active kernel so that you have at least one backup kernel."
fi
echo "Aborting script."
exit_script

0

[En tant que membre de AskUbuntu, je ne peux pas commenter avant d'avoir la réputation = 50. Ne votez donc pas à cause de cela.]

Mon serveur faisait cela aussi. Aucune des réponses attendues n’a fonctionné, car elles nécessitent de la place sur / boot pour pouvoir être complétées. Si la partition de démarrage est pleine, elle se terminera brutalement sans supprimer aucune des images.

La seule chose qui a fonctionné pour moi a été d'examiner l'image actuelle, puis manuellement sudo rm filenamepour les fichiers d'image les plus anciens (chacun avait -3.16.0-30 dans leurs noms). Une fois cela fait, il sudo apt-get autoremovedisposait de la marge de manœuvre dont il avait besoin pour faire son travail. Il a mis en évidence certaines erreurs associées à cette version, par exemple: "depmod: FATAL: impossible de charger /boot/System.map-3.16.0-30-generic: Aucun fichier ou répertoire de ce type", mais il faut s'y attendre.

Une fois terminé, df42% des utilisateurs retournés sont utilisés pour / boot pour indiquer qu'ils sont à nouveau en bonne santé.


1
Le poste que vous cherchez est askubuntu.com/questions/171209/…
muru

@muru Eh bien, oui ... Je suggérerais que l'affiche originale aurait également besoin de ce conseil. Une fois que / boot est plein, ces versions scriptées qui tentent de le réparer échouent aussi puisque, bien, / boot est plein.
Justin Case

Eh bien, il existe deux problèmes similaires: a) lorsque le système vous avertit que votre disque est saturé, mais qu’il apt-getdispose de suffisamment d’espace pour continuer, et b), qu’il apt-getéchoue car le disque est trop plein. C'est l'autre post.
muru


0

Enregistrez ce script sous /usr/local/bin/remove_kernels.sh(n'oubliez pas de donner les autorisations d'exécution sudo chmod 755 /usr/local/bin/remove_kernels.sh):

#!/bin/sh
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 1
fi
apt purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )
update-grub

Ensuite, pour supprimer tous les anciens noyaux, tapez simplement: sudo remove_kernels.sh


0

La partition / boot peut être un peu étrange parfois

ne commencez pas directement à supprimer les fichiers kernal.

Étapes à suivre

  1. Recherchez le kernal actuellement utilisé et utilisé par le système linux.

    uname -r

    cela devrait vous donner le nom de l'image kernal actuellement installée sur le système

  2. Maintenant, commencez à supprimer des fichiers supplémentaires, sauf celui qui est installé sur votre système

    apt-get remove linux-image-XXXXX

  3. Supprimez également le fichier d'en-tête.

    apt-get remove linux-headers-XXXXX

  4. De plus, il peut y avoir une condition qui apta cessé de fonctionner, dans ce cas, passez à / boot

    cd /boot

  5. Commencez à supprimer les fichiers manuellement, mais en prenant garde de ne pas supprimer les installed one'sfichiers kernal de votre système.

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. Après avoir supprimé les fichiers corrects, installation partielle, le cas échéant

    apt-get -f install

  7. Supprimez les fichiers supplémentaires qui se trouvent à cet emplacement en tant que fichiers de démarrage nettoyés manuellement

    apt-get autoremove

  8. Mettre à jour grub

    update-grub

  9. Enfin mettre à jour vos paquets système

    apt-get update


-1

Si vous ne pouvez pas supprimer davantage de fichiers inutilisés et si vous avez une autre partition avec / ou de l'espace libre sur le même périphérique, vous pouvez redimensionner la partition / boot par parted / gparted . (Il est également inclus sur le support d'installation.)

Avertissement : le redimensionnement de la partition est une opération dangereuse , enregistrez vos données importantes sur un autre support avant de le faire!


La plupart des utilisateurs de petites partitions séparées / de démarrage ont choisi le «chiffrement de disque entier» lors de l'installation, ce qui nécessite LVM. Cette solution semble causer plus de problèmes qu'elle n'en résout pour ces utilisateurs.
user535733
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.