Jaki jest najbezpieczniejszy sposób czyszczenia partycji / bootowania?

273

Mam 200 MB przypisanych do /bootpartycji. Ilekroć próbuję zaktualizować jądro, /bootpojawia się komunikat o błędzie, który w zasadzie stwierdza, że jest pełny.

Co mogę zrobić, aby wyczyścić /booti usunąć / wykonać kopię zapasową starszych jąder?

koba101
źródło
Jeśli / boot jest pełny, zobacz askubuntu.com/questions/263363/…
nslntmnx

Odpowiedzi:

334

Metoda wiersza poleceń:

Najpierw sprawdź wersję jądra, aby nie usuwać używanego obrazu jądra, uruchamiając:

uname -r

Teraz uruchom to polecenie, aby wyświetlić listę zainstalowanych jąder:

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

i usuń jądra, których już nie potrzebujesz / potrzebujesz, uruchamiając to:

sudo apt-get remove linux-image-VERSION

Zamień VERSION na wersję jądra, którą chcesz usunąć.

Po zakończeniu usuwania starszych jąder możesz uruchomić to, aby usunąć pakiety, których już nie potrzebujesz:

sudo apt-get autoremove

I w końcu możesz uruchomić to, aby zaktualizować listę jądra gruba:

sudo update-grub
PeppeDAlterio
źródło
34
sudo dpkg --list 'linux-image*' | grep ^iisprawia, że ​​trochę łatwiej jest zobaczyć tylko zainstalowane jądra. Myślę też, że update-grubjest nieszkodliwy, ale nie jest absolutnie konieczny, jest uruchamiany automatycznie po odinstalowaniu jądra.
Nelson
9
Użyj, sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""aby uzyskać listę nazw pakietów, których chcesz używać sudo apt-get remove. head -n -3służy do przechowywania 3 najnowszych jąder w systemie.
Sithsu,
2
moja prosta jedna linijka:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb
27
sudo apt-get autoremovepowinno wystarczyć (zazwyczaj pozostawiając ci ostatnie 3 jądra)
mbx
6
To dobra odpowiedź, ale wątpię, że może zadziałać w większości (jeśli nie we wszystkich) przypadkach: problem polega na tym, że /bootjest pełny, więc apt-getnie powiedzie się z jakimś kodem błędu lub innym. Poniższa odpowiedź jest nieco „hackier” (muszę przyznać, musiałem stali się do kwestii, która rm -rfw /boot), ale jedynym, który może pracować w tej sytuacji.
Marco
283

UWAGA: dzieje się tak tylko wtedy, gdy nie można użyć apt do czyszczenia ze względu na 100% pełnego / rozruchu

Jeśli apt-get nie działa, ponieważ twój / boot ma 100%, musisz najpierw wyczyścić / boot. Prawdopodobnie złapało to aktualizację jądra podczas częściowej instalacji, co oznacza, że ​​apt prawie całkowicie się zawiesił i będzie ci mówił, abyś uruchomił, apt-get -f installnawet jeśli to polecenie nadal nie działa .

Pobierz listę obrazów jądra i określ, co możesz zrobić bez. To polecenie wyświetli zainstalowane jądra oprócz aktualnie uruchomionego sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`. Zwróć uwagę na dwie najnowsze wersje na liście. Nie musisz się martwić o działający, ponieważ nie ma go tutaj. Możesz to sprawdzić za pomocą uname -r.

Utwórz polecenie, aby usunąć wszystkie pliki w / boot jądra, które nie mają dla ciebie znaczenia, używając rozszerzenia nawiasów, aby zachować rozsądek. Pamiętaj, aby wykluczyć bieżące i dwa najnowsze obrazy jądra. Przykład: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. Możesz także użyć zakresu ze składnią {80..84}.

sudo apt-get -f install by usunąć to, co sprawia, że ​​apt jest zrzędliwy w związku z częściową instalacją.

Jeśli napotkasz błąd zawierający wiersz „Błąd wewnętrzny: nie można znaleźć obrazu (/boot/vmlinuz-3.2.0-56-generic)”, uruchom polecenie sudo apt-get purge linux-image-3.2.0-56-generic(z odpowiednią wersją).

Wreszcie, sudo apt-get autoremoveaby usunąć stare pakiety obrazów jądra, które zostały osierocone przez ręczne czyszczenie systemu.

Sugestie, uruchom sudo apt-get updatei sudo apt-get upgradezajmij się wszelkimi aktualizacjami, których kopie zapasowe mogły zostać utworzone podczas oczekiwania na odkrycie pełnej partycji / boot.

Sugestia 2, przejrzyj https://help.ubuntu.com/community/AutomaticSecurityUpdates i rozważ ustawienie Unattended-Upgrade :: Remove-Unused-Dependencies na true w /etc/apt/apt.conf.d/50unattended-upgrades. Będzie to równoznaczne z uruchomieniem autoraove po każdej aktualizacji zabezpieczeń, aby mieć pewność, że wyczyścisz nieużywane jądra, ale usuniesz także inne rzeczy, które według Ciebie są nieużywane, ratując cię od tego problemu w przyszłości.

Flickerfly
źródło
3
W ten sposób mam najnowszą wersję do następnego restartu, a potem poprzednią na wypadek, gdyby coś się zepsuło. Zwykle mam dużo miejsca, więc nie ma nic złego i wystarcza mi paranoja, że ​​nie mam wystarczających opcji tworzenia kopii zapasowych w danym scenariuszu.
flickerfly
1
Nigdy nie miałem problemu spowodowanego przez nienadzorowane aktualizacje. Mogę sobie wyobrazić scenariusze, w których może to być problem głównie z powodu utraty zależności w instalacjach nieopakowanych. Powiedzmy, że instalujesz php, zdecydujesz się go odinstalować i zainstalować nowszą wersję ze źródła. Ta wersja ma zależności dostarczone przez poprzednią instalację, ale apt nie wie, że jest nadal wymagana. Następnym razem, gdy uruchomisz automatyczne usuwanie, te zależności znikną. W przypadku automatyzacji może to być nieco mylące. Jeśli nie zainstalujesz poza repozytoriami, uważam, że jest to całkowicie bezpieczne.
flickerfly
3
Po zobaczeniu tego na kilku wirtualnych serwerach vsphere (gdzie jądra były automatycznie aktualizowane, ale później nie usuwane), napisałem skrypt pythonowy, aby go zautomatyzować. Chciałbym mieć na to więcej oczu
EvanK
2
Jeśli używasz dpkg --purgena pełnym bagażniku otrzymasz następujące $ 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
Po wyczyszczeniu / boot apt-get install -f nadal nie działa. Za pomocą df -idowiedziałem się, że zabrakło mi również i-węzłów z /powodu ogromnej ilości plików dla kodu źródłowego starszych jąder w/usr/src
Kristofer
51

Dokumentacja na ten temat znajduje się na stronie https://help.ubuntu.com/community/RemoveOldKernels

Podsumowując: Użyj

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

purge-old-kernelsNarzędzie może być zainstalowany poprzez sudo apt install byobu. Oto opis ze strony man:

Ten program usunie z systemu stare pakiety jądra i nagłówka, zwalniając miejsce na dysku. Nigdy nie usunie aktualnie działającego jądra. Domyślnie zachowuje co najmniej 2 ostatnie jądra, ale użytkownik może zastąpić tę wartość za pomocą --keep parametru.

Jeśli potrzebujesz rozwiązania kopiuj-wklej, inżynier ReSearchIT zaproponował następujące:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge
peq
źródło
3
W moim przypadku apt nie działa z powodu oczekującego jądra, a sugerowana poprawka to catch-22:
James Bowery
Najpierw musiałem naprawić zepsute pakiety za pomocą askubuntu.com/a/304388/284313 Następnie twoje rozwiązanie zadziałało.
James Bowery
3
Myślę, że powinno to być obecnie przyjęte rozwiązanie.
Fran Marzoa,
3
jest to o wiele bezpieczniejsze niż zaakceptowana odpowiedź. myślę, że apt-get autoremove --purgepowinno wystarczyć.
Woodrow Barlow,
7

Odkryłem, że o wiele łatwiej jest porzucić małą partycję i przejść /bootdo katalogu głównego. Zapobiega to również problemom związanym z brakiem miejsca w przyszłości.

Najpierw przenieś dane z partycji rozruchowej do katalogu głównego (uruchom jako sudo -s):

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

Usuń (lub skomentuj) /bootwpis w /etc/fstab:

vim /etc/fstab

Zaktualizuj grub i upewnij się, że wszystko jest w porządku:

update-grub

apt powinien być teraz w stanie zaktualizować bez problemów.

Pozostawia to nieużywaną partycję 200 MB (której możesz użyć do czegoś innego, jeśli okaże się, że warto).

laktak
źródło
5
To dobry pomysł, ale nie działa, jeśli chcesz mieć pełne szyfrowanie dysku dla partycji root.
Paŭlo Ebermann
Tak, są przypadki, w których / boot powinien być osobną partycją. Innym przykładem było to, że Grub wcześniej nie mógł załadować z partycji LVM.
Bastion
4

Usuwanie starych jąder (aby zwolnić miejsce na / boot) patrz: 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]+//')")

Następnie uruchomić

sudo apt-get update
Amos Folarin
źródło
1
to był jedyny, który działał .... świetne rozwiązanie
Jan
Najlepsza odpowiedź! To jedyne rozwiązanie, które działało dla mnie; autorove jest głupi; próbuje ponownie zainstalować wszystkie jądra z niespełnionymi zależnościami, zanim oficjalnie je usunie. Krążyłem w kółko, zabrakło miejsca w kółko. Ta odpowiedź jest złota.
Lonnie Best
3

sudo apt-get autoremove

Usuwa to wszystkie ostatnie 2 jądra. Testowany na Ubuntu 16.04 LTS, gdy /bootmiał 100% pojemności i apt-get upgradenie powiódł się, to jego ostatnia aktualizacja jądra. Jądro autoraove jest iteracyjne, więc jeśli masz kilka jąder, będą one usuwane pojedynczo. Więc bądź cierpliwy.

DeepSpace101
źródło
1

Dlaczego robisz to ręcznie, skoro możesz to zrobić za pomocą narzędzia? Wiesz, że będziesz go potrzebować ponownie za 30 sekund, ponieważ w tych dniach potrzeba 30 sekund na przesłanie nowej aktualizacji jądra = P

Polecam korzystanie z tego narzędzia, bootnukem

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

Następnie

sudo bootnukem --dry-run

Usuń, --dry-rungdy potwierdzisz, że wygląda bezpiecznie

Jonathan
źródło