Vraag Mijn / opstartpartitie sloeg 100% en nu kan ik niet upgraden. Kan oude kernels niet verwijderen om ruimte te maken


Mijn eerste probleem was toen ik het probeerde apt-get update of apt-get upgrade. Bij een upgrade krijg ik de volgende foutmelding:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.

Ik probeerde apt-get install -f uit te voeren en dit was de uitvoer (na het zeggen van ja op prompt)

(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
 failed in write on buffer copy for backend dpkg-deb during `./boot/System.map-3.2.0-27-generic': No space left on device
 No apport report written because the error message indicates a disk full error
                                                                          dpkg-deb:    error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic   /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ik probeerde te rennen apt-get autoremove en het geeft me dezelfde fout als apt-get upgrade.

Wanneer ik ren df, Ik krijg dit voor /boot:

/dev/sda1                    233191     230297         0 100% /boot

Dus, ik lees elders dat ik zou moeten proberen oude kernels te zuiveren. Ik controleerde voor welke kernels ik had:

$ dpkg -l linux-image-\* | grep ^ii
ii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64
ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-26-generic  3.2.0-26.41   Linux kernel image for version 3.2.0  on 64 bit x86 SMP

Wanneer ik de oudste hiermee probeer te verwijderen:

$ sudo apt-get purge linux-image-2.6.38-13-server
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-image-server : Depends: linux-image-3.2.0-27-generic but it is not going to be     installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Hoe kan ik mijn opstart vrijmaken of verlengen zonder mijn installatie in de war te schoppen?


138
2017-08-02 15:17


oorsprong


Ik denk dat het antwoord van @ mreiter de beste is: het gebruikt de pakketbeheerder en het werkte wanneer andere pakketbeheeropdrachten faalden, tenminste voor mij: askubuntu.com/a/205776/247661 - Aaron Hall
Ik heb een script gemaakt dat de klus klopt. Ik zal het publiceren nadat mijn bounty-doel is bereikt: bountysource.com/issues/... - jarno
help.ubuntu.com/community/RemoveOldKernels - dskrvk
@dskrvk Ja! Waarom is Remove-Unused-Dependencies niet de standaard? - Steven R. Loomis


antwoorden:


Ruimte vrijmaken op het root-bestandssysteem

Om ruimte vrij te maken op het root-bestandssysteem, kunt u proberen uit te voeren apt-get clean.

Als dat niet werkt, kun je gaan /var/cache/apt/archives en verwijder handmatig een paar bestanden uit de cache om wat ruimte terug te krijgen, bijvoorbeeld:

sudo rm linux-headers-*

Het zal geen kwaad om alle te verwijderen .deb bestanden hier als dat nodig is - dat is wat apt-get clean doet. Ze worden automatisch opnieuw gedownload door apt als ze opnieuw nodig zijn.

Ruimte vrijmaken op het / boot-bestandssysteem

De originele poster heeft een aparte /boot partitie, en dat is wat vol is en het voorkomen van de apt systeem van werken. Het zal nodig zijn om daar de ruimte vrij te maken.

Als er bijna voldoende ruimte is, ga dan naar /boot en verwijder een configuratiebestand of twee:

sudo rm config-3.2.0-19-generic-pae

bijvoorbeeld, maar met de naam van een van de kernelversies die je in ieder geval wilt verwijderen. Dit maakt een beetje ruimte vrij (ongeveer 144K per stuk).

Als je meer ruimte nodig hebt, verwijder dan de oude vmlinuz, initrd, abi en System.map bestanden totdat je genoeg ruimte hebt (ongeveer 22M voor een van mijn i386-kernelversies).

Wat je ook doet, verwijder ze niet allemaal. Je moet op zijn minst de laatste twee overeenkomende versies van elk soort bestand bewaren voor elke soort kernel die je gebruikt.

Ga vervolgens verder met uw apt-get install-opdrachten. Zoals hierboven vermeld, moeten ze sommige van de debuten die u hebt verwijderd misschien opnieuw downloaden, maar als dat zo is, gebeurt dat automatisch. Wanneer je apt hebt om opnieuw te werken, ruim je op door apt-get te gebruiken om de pakketten te verwijderen die overeenkomen met de bestanden die je hebt verwijderd - zodat alles overeenkomt.


Het configuratiebestand in /boot is de kernel die config was gebruikt door het kernelteam aan bouwen de kernel met dezelfde naam. Het moet onschadelijk zijn om te verwijderen, tenzij je het ter referentie wilt of om je te helpen bij het bouwen van je eigen kernels.

Ten slotte verwijder je handmatig een oud kernelpakket of twee van het /boot om nog meer ruimte te maken voor de nieuwe.


116
2017-08-02 15:54



Ik probeerde bijna alle configs te verwijderen. Het lijkt nog steeds niet genoeg ruimte te hebben. Welke andere bestanden kunnen veilig worden verwijderd? Mijn rootbestandssysteem is nog lang niet vol, dus ik maak me er geen zorgen over. - Strifey16
Ik heb mijn antwoord bijgewerkt met de verdere bestanden om handmatig te verwijderen. Het lijkt me dat het verwijderen van de sets 3.0.0.13 en 3.0.0.14 (vijf bestanden naar de set inclusief het abi-bestand) voldoende zou zijn. - John S Gruber
Dit loste het op. Ik besefte dat het waarschijnlijk ging om het verwijderen van bestanden met de hand, maar ik ben altijd terughoudend om dat te doen met alles dat door apt is geïnstalleerd, dus ik dacht dat ik het eerst hier zou vragen. - Strifey16
Gebruik niet sudo rm verwijderen uit / opstarten. Gebruik in plaats daarvan sudo dpkg --purge om een ​​oud linux-image pakket te verwijderen. Daarna gebruik sudo apt-get -f install om de gebroken afhankelijkheid te herstellen. - jarno
Hoewel het systeem soms zo vol is dat zelfs dpkg niet kan werken. Maar rm kan dan worden gebruikt. - jarno


In mijn geval, de apt opdrachten en dpkg opdracht kon niet voltooien en kon niet verwijderen. De autoupdate was mislukt bij het installeren 2.6.32-56-server.

Mijn eerste stap was om de te gebruiken ruimte te identificeren,

cd /boot
du -sk *|sort -n

Ik had ongeveer 30 kernels en ondersteunende bestanden.

ik heb een uname -a om de draaiende kernel te krijgen, Ik heb vastgesteld dat ik afwisselend op Linux zat 2.6.32-43-serveren deed a tar van 6 van de versies die niet draaiden en oud waren.

tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Ik deed toen een rm -rf van wat ik had gesteund:

rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Ik toon deze commando's als voorbeelden, je zult moeten beslissen met wat je gaat werken voor jouw situatie.

Nu had ik wat ruimte op /boot, Ik kon rennen

apt-get -f install 

Om de mislukte installatie van op te schonen 2.6.32-56-server.

Ik deed toen een

apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server

Dit gaf me de ruimte om terug te zetten wat ik had geback-upt.

tar -xf ~username/boot.tar
rm  ~username/boot.tar    

Om op te ruimen, kon ik dan uitvoeren:

apt-get autoremove

Ik ben opnieuw opgestart en ga nu naar het gebruik van 4% van /boot.


60
2018-02-20 16:48



Dit was het nuttigst voor mij uit alle suggesties. Veel dank! - Joshua F. Rountree
het verwijderen van bestanden van / boot gewoon vreselijk pauzes apt en dpkg sinds hun installatie en verwijdering scripts HARD mislukken wanneer de bestanden ontbreken. Ik zie niet hoe je dit hebt laten werken. - FizxMike


Je kunt gebruiken dpkg in plaats van apt-get om oudere kernels te verwijderen:

sudo dpkg -r linux-image-3.2.0-29-generic

19
2018-04-08 14:38



Misschien zijn er plussen om dit te gebruiken, maar de suggestie van @ mreiter werkte voor mij wanneer dit niet het geval was (deze werd voorgesteld op het IRC-ondersteuningskanaal van ubuntu.) - Aaron Hall
@AaronHall Dit antwoord bevat simpelweg het belangrijkste onderdeel van antwoord van mreiter (de laatste regel) en het is veel korter omdat het geen betrekking heeft op het opschonen van headers (wat niet helpt in het geval van een aparte regel /boot partitie). - Melebius


Ik merkte dat er nog steeds enkele bestanden van de oude versies in de bootdirectory waren:

$ ls /boot
vmcoreinfo-2.6.31-17-server

En de pakketbeheerder zou de oude versies vermelden:

dpkg -l | grep linux-image

Ik heb daarom dit commando gebruikt (autoremove zou ook recentere afbeeldingen verwijderen die ik niet wil verwijderen)

sudo apt-get purge linux-image-2.6.31-17-server

Ik had nog wat headers over:

dpkg -l | grep linux-headers

Dus ik deed dit:

sudo apt-get purge linux-headers-2.6.32-34

Eindelijk was er nog een pakket dat ik niet kon verwijderen met apt-get purge:

$ dpkg -l | grep linux-image
rc  linux-image-2.6.28-11-server

Bron: Verwijder een pakket gemarkeerd als rc door dpkg

sudo dpkg --purge linux-image-2.6.28-11-server

9
2017-10-24 13:56





Dit is wat ik heb gebruikt:

sudo apt-get autoremove linux-image-xxxx

Doe dat voor alle oude kernels en bewaar alleen de meest recente twee.

Als u de oude kernels automatisch wilt verwijderen en GRUB wilt bijwerken zie dit: Ubuntu-documentatie


2
2017-11-22 17:33



Dit zou het geaccepteerde antwoord moeten zijn. Als je het niet erg vindt om alles op te ruimen, hoef je niet eens de Linux-image op te geven. - CyberEd


U kunt niet op pakketten handelen, maar u kan werken op andere bestanden. Ga eerst door je thuismap en kijk of die er is iets je kunt verwijderen. Als dit niet het geval is, probeert u een groot aantal bestanden naar een andere partitie (of een flashstation) te verplaatsen en probeert u het vervolgens sudo apt-get install -f om de pakketafhankelijkheidsproblemen op te lossen (hoogstwaarschijnlijk hebt u een .deb-bestand geïnstalleerd dpkg) en verwijder vervolgens alle oude kernels. Zodra u veilig ten minste 10 MB hebt, probeert u onnodige software of bestanden te verwijderen.


2
2017-08-02 15:20



De thuismap bevindt zich niet in / boot - Thorbjørn Ravn Andersen


Gebruik Synaptic Package Manager. Kies gewoon het pakket dat u wilt verwijderen en het zal u vragen om ook pakketten te verwijderen die ervan afhankelijk zijn. In mijn ervaring komen kernelpakketten altijd in groepen van twee (of meer, afhankelijk van hoe je telt) die onderling afhankelijk zijn. U kunt oude snel vinden door het filter "local / obsolete" te gebruiken.


1
2017-08-03 02:39



Bijv. op een (alleen tekst) server is er geen Synaptic. Dus niet echt een haalbare oplossing voor servers. - nerdoc