Comment puis-je supprimer les anciens noyaux / en installer de nouveaux lorsque / boot est plein?

31

Je sais que cette question est posée plusieurs fois auparavant, mais avec moi, c'est juste un peu différent, je suppose.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       224G  5.2G  208G   3% /
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           777M  260K  777M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
/dev/sda2        90M   88M     0 100% /boot
/dev/sda6       1.9G  514M  1.3G  29% /tmp

Ma partition de démarrage est pleine.

Noyau actuel:

# uname -r
3.2.0-35-generic

Tous les noyaux:

# dpkg --list | grep linux-image
ii  linux-image-3.2.0-32-generic    3.2.0-32.51                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-34-generic    3.2.0-34.53                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-35-generic    3.2.0-35.55                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-37-generic    3.2.0-37.58                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-38-generic    3.2.0-38.60                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iU  linux-image-generic             3.2.0.37.45                         Generic Linux kernel image

J'ai donc pensé à supprimer le noyau générique 3.2.0.32 avec:

# sudo apt-get purge linux-image-3.2.0-32-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-generic : Depends: linux-headers-generic (= 3.2.0.37.45) but 3.2.0.38.46 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Sans succès.

Lorsque j'essaie, apt-get -f installcela échoue également:

# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-34 linux-headers-3.2.0-35 linux-headers-3.2.0-34-generic linux-headers-3.2.0-35-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-generic linux-image-generic
The following packages will be upgraded:
  linux-generic linux-image-generic
2 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
5 not fully installed or removed.
Need to get 0 B/4,334 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
Setting up initramfs-tools (0.99ubuntu13.1) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-3.2.0-37-generic (3.2.0-37.58) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-38-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-37-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-37-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-37-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
Setting up linux-image-3.2.0-38-generic (3.2.0-38.60) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-37-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-38-generic /boot/vmlinuz-3.2.0-38-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-38-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-38-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-38-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-38-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of linux-image-generic:
 linux-image-generic depends on linux-image-3.2.0-37-generic; however:
  Package linux-image-3.2.0-37-generic is not configured yet.
dpkg: error processing linux-image-generic (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Package linux-image-generic is not configured yet.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
Processing triggers for initramfs-tools ...
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because MaxReports is reached already
  update-initramfs: Generating /boot/initrd.img-3.2.0-35-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-35-generic with 1.
dpkg: error processing initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
 linux-image-3.2.0-37-generic
 linux-image-3.2.0-38-generic
 linux-image-generic
 linux-generic
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

Toute aide serait vraiment appréciée.

Mise à jour: j'ai fait:

sudo rm /boot/*-3.2.0-32-generic /boot/*-3.2.0-34-generic

Après cela, le problème suivant avec apt-get -f install:

root@localhost:/# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  linux-generic
The following packages will be upgraded:
  linux-generic
1 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,722 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Version of linux-image-generic on system is 3.2.0.38.46.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error     from a previous failure.
                      Errors were encountered while processing:
 linux-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
Marcel
la source
Voir ma réponse lorsque le retrait automatique ne fonctionne pas en raison d'un manque d'espace.
nslntmnx

Réponses:

22

Vous ne pouvez pas utiliser apt-get lorsque votre noyau est obsolète.

cd /boot
sudo rm *-2.6.35-6.9-generic
sudo rm *-3.16.0-23-generic

utiliser lspour voir ce qui se trouve dans le dossier supprimer le plus ancien ou les deux

sudo apt-get -f install

Ensuite, vous pouvez purger apt-get comme dans

sudo apt-get purge linux-image-3.2.0-32-generic linux-image-3.2.0-34-generic

ou continuez simplement avec rm.

vous devriez aussi sudo update-grubquand vous avez terminé

wlraider70
la source
La commande d'installation a réinstallé de nombreux anciens noyaux, résultant en un disque de démarrage complet. La commande de purge a résolu ce problème pour moi.
SPRBRN
J'ai suivi cette réponse jusqu'à sudo apt-get -f install, puis j'ai redémarré pour m'assurer que tout allait bien et j'ai supprimé le reste avec apt autoremovecomme suggéré dans la sortie des commandes précédentes.
Bart C
10

Apparemment, cela fonctionne:

sudo apt-get autoremove 

Selon la apt-getpage de manuel:

autoremove est utilisé pour supprimer les packages qui ont été installés automatiquement pour satisfaire les dépendances des autres packages et qui ne sont plus nécessaires.

3.16.0-39 est celui que j'ai essayé d'installer, mais qui a échoué car / boot était plein. 3.16.0-38 est ma version actuelle. Vous pouvez voir que -38 a été ignoré.

server:~$ uname -r
3.16.0-38-generic
server:~$ sudo apt-get autoremove 
[sudo] password for mikeb: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.16.0-30 linux-headers-3.16.0-30-generic
  linux-headers-3.16.0-31 linux-headers-3.16.0-31-generic
  linux-headers-3.16.0-33 linux-headers-3.16.0-33-generic
  linux-headers-3.16.0-34 linux-headers-3.16.0-34-generic
  linux-headers-3.16.0-36 linux-headers-3.16.0-36-generic
  linux-headers-3.16.0-39 linux-headers-3.16.0-39-generic
  linux-image-3.16.0-30-generic linux-image-3.16.0-31-generic
  linux-image-3.16.0-33-generic linux-image-3.16.0-34-generic
  linux-image-3.16.0-36-generic linux-image-3.16.0-39-generic
  linux-image-extra-3.16.0-30-generic linux-image-extra-3.16.0-31-generic
  linux-image-extra-3.16.0-33-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic linux-image-extra-3.16.0-39-generic
0 upgraded, 0 newly installed, 24 to remove and 0 not upgraded.
ChePazzo
la source
J'aime cette réponse mais il manque un manuel pour savoir exactement à quoi ça sert autoremove.
s3m3n
1
autoremove ne fonctionne que si les actions apt précédemment mises en file d'attente se terminent correctement. La suppression automatique ne fonctionnera pas si vous obtenez déjà une erreur `` Il ne reste plus d'espace sur l'appareil '' - ces actions précédemment mises en file d'attente échoueront et la suppression automatique ne s'exécutera pas. En d'autres termes, la suppression automatique fonctionne ... jusqu'à ce qu'elle ne fonctionne pas.
user535733
@ user535733 vous avez raison. Voir ma réponse lorsque le retrait automatique ne fonctionne pas en raison d'un manque d'espace.
nslntmnx
7

Dans un terminal, exécutez la commande suivante:

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

Cette commande répertorie tous les noyaux Linux actuellement installés, puis sélectionne tous ceux qui ne sont actuellement pas utilisés et les supprime.

Django23
la source
2
Peut-être voudriez-vous expliquer ce que fait exactement cette commande. Cela semble plutôt compliqué: en général, les gens devraient être déconseillés d'exécuter des commandes comme celles-ci qu'ils ne comprennent pas - en particulier avec quelque chose de vital pour leur système.
mtdevans
@mtdevans: J'ai ajouté que la commande ci-dessus répertorie tous les noyaux Linux actuellement installés, puis sélectionne tous ceux qui ne sont actuellement pas utilisés, puis supprime tous les noyaux qui ne sont pas actuellement utilisés.
Kristian
4
La commande est utile, exécutez simplement la partie avant "| xargs" pour vérifier ce que vous allez supprimer. Aussi, | grep -v peut être nécessaire pour conserver le dernier noyau, qui n'est peut-être pas encore utilisé, mais souhaité.
Roman Susi
4
c'est dangereux car cela correspond également à linux-libc-dev: amd64
Frederick Nord
2
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

Si l'exécution de la commande ci-dessus sans la "purge sudo apt-get -y" correspond à votre linux-libc-dev: amd64, vous pouvez ajouter un point-virgule à l'expression régulière pour ne pas l'inclure:

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

Maintenant, assurez-vous qu'il a l'air bien et ajoutez la "purge sudo apt-get -y"

Cory W
la source
1

Pour Ubuntu 12.04, essayez ceci sudo apt-get purge linux-image-[kernel version]

Cela supprimera toute version du noyau. Si votre dossier de démarrage contient plusieurs noyaux, n'oubliez pas de mettre à jour grub et de redémarrer votre système

ex. sudo apt-get purge linux-image-3.11.6 *

alisaleh
la source
2
Le problème est que cela ne fonctionne plus quand on a un point où il y a des problèmes de dépendance, comme celui à venir.
Paŭlo Ebermann du
Ça marche pour moi!
Daniel
0

De nombreuses réponses disent d'utiliser "apt autoremove" mais cela peut ne pas fonctionner lorsque / boot est plein car apt essaie d'ajouter des noyaux avant de les supprimer.

La prochaine suppression automatique d'apt ne supprimera pas les noyaux mentionnés dans /etc/apt/apt.conf.d/01autoremove-kernels, nous devons donc y remédier.

Voici le processus qui a fonctionné pour moi.

Supprimez les fichiers de configuration du noyau indésirables.

sudo dpkg --purge $ (COLONNES = 200 dpkg -l | grep "linux-image-extra" | grep "^ rc" | tr -s '' | cut -d '' -f 2)

Mettez à jour /etc/apt/apt.conf.d/01autoremove-kernels en exécutant ...

sudo /etc/kernel/postinst.d/apt-auto-removal

J'espère que la suppression automatique d'apt fonctionnera.

sudo apt autoremove --purge

Sinon, vous devriez pouvoir supprimer manuellement les noyaux très anciens et inutilisés de / boot.

Découvrez d'abord quel noyau vous utilisez.

uname -r

Ne supprimez pas votre noyau actuel ou le noyau précédent.

sudo rm /boot/initrd.img-V.XX.Y-ZZ-generic

Vous devriez maintenant avoir suffisamment d'espace pour réessayer la suppression automatique d'apt. Sinon, supprimez un autre noyau très ancien. Bien sûr, restez à jour et le plus ancien suivant.

nslntmnx
la source
-2

J'espère que cela peut aider:

je supprime généralement les anciens noyaux en utilisant ubuntu-tweak janitor, nice GUI and easy :)

cliquez sur «système» et il y aura une liste d'anciens noyaux, cliquez simplement dessus et nettoyez

mohur
la source
1
c'est un serveur ubuntu et je suis connecté via putty. (Mais j'ai aussi la disponibilité de Webmin sur le serveur)
Marcel
Comment puis-je installer ce concierge ubuntu-tweak s'il vous plaît?
Jenny O'Reilly