Moja partycja rozruchowa znajduje się na dysku SSD, więc nie ma miejsca na więcej niż około 8 zainstalowanych wersji jądra, a ostatecznie niektóre aktualizacje jądra nie zostaną zainstalowane, ponieważ moja partycja rozruchowa jest pełna starych wersji. Istnieje wiele pytań na temat usuwania starych wersji (nawet jak zautomatyzować proces), ale moje pytanie brzmi po prostu: dlaczego nie apt-get autoremove
wykrywa ich i nie usuwa automatycznie i czy jest sposób, aby to zrobić ? Mam na myśli, czy apt-get
to, co je zainstalowało, więc o nich wie, więc dlaczego decyduje się na pozostawienie wszystkich starych wersji?
53
Odpowiedzi:
Aby odpowiedzieć dlaczego, zapoznaj się z plikiem
/etc/apt/apt.conf.d/01autoremove-kernels
Jak widać, apt dowiaduje się nigdy autoremove jądra, jak powiedział o innym pliku (skryptu)
/etc/kernel/postinst.d/apt-auto-removal
. A oto:Jeśli ręcznie zainstalujesz 2 wybrane jądra, tj. Pierwsze i bieżące, apt-autorove usunie tylko starsze wersje, których nie zainstalowałeś ręcznie, więc zawsze będziesz miał te 2 opcje plus cokolwiek najnowszego.
Aktualizacja:
W
/etc/kernel/postinst.d/apt-auto-removal
tej części jest:Więc jeśli porównasz dane wyjściowe
01autoremove-kernels
pliku iuname -r
zdasz sobie sprawę, że aktualnie działające jądro i najnowsze przed nim, nigdy nie zostaną usunięte przez ten skrypt. Okazuje się, że jest inny plik/etc/apt/apt.conf.d/01autoremove
, w którym są wiersze:Możesz więc je skomentować, a to pozwoli ci automatycznie usunąć jądra
apt-autoremove
, jednak pamiętaj - rób to na własne ryzykoźródło
/etc/apt/apt.conf.d/01autoremove-kernels
ma wiele wierszy, ale tylko dwie wersje spośród nich wszystkich: 3.13.0. {39,43}.dpkg -l linux-*
Wymienia jednak cztery wersje, 3.13.0. {39, 40, 41, 43}, więc czymś innym niż/etc/apt/apt.conf.d/01autoremove-kernels
utrzymanie tych środkowych wersji, prawda?01autoremove
plik, który chcesz,01autoremove-kernels
jest prawdopodobnie tylko ochroną, więc apt nie usuwa aktualnie zainstalowanego jądra i najnowszego (na wypadek, gdyby najnowsze01autoremove
, chroni to tylko przed automatycznym usunięciem pakietów zależności, takich jaklinux-image-extra
. Zmiana nie powinna mieć wpływu na to, czylinux-image-3.16.0-31-generic
autoroved. Żaden z zawartych w nim wzorców nie pasuje do nazw pakietów, które chcemy automatycznie usunąć./etc/apt/apt.conf.d/01autoremove
. To nie pomaga w pisaniu starych wersji jądra, ale może mieć niepożądane efekty. Plik nie chroni przed autorovingiem,linux-image-extra
ale pakiety pasujące do wyrażeń regularnych wNeverAutoRemove
sekcji.apt-get autoremove
nie usuwa się jądra niewymienionego na liście,/etc/apt/apt.conf.d/01autoremove-kernels
jest to, że jądra te są oznaczone jako zainstalowane ręcznie; zobacz moją odpowiedź .Dla mnie pomogło to zainstalować najnowsze (X) ubuntu (15.10). We wcześniejszych wersjach pakiety jądra mogą być oznaczone jako zainstalowane ręcznie, przynajmniej jeśli zostały zainstalowane przy użyciu Software Updater, więc
sudo apt-get autoremove --purge
nie można ich usunąć. Istnieją raporty o błędach dotyczące problemu: Bug # 1175637 , Bug # 1439769We wcześniejszej wersji można było spróbować oznaczyć pakiety jądra automatycznie instalowane przez
sudo apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$")
i uruchomićsudo apt-get autoremove --purge
później, aby sprawdzić, czy to robi różnicę. Polecenie nadal nie powinno usuwać pakietów jądra pokazanych w /etc/apt/apt.conf.d/01autoremove-kernels, ale najbezpieczniej jest uruchomić najpierwapt-get autoremove
z--dry-run
opcją.źródło
apt-mark
wystarczyły dla mnie, chciałbym móc upvote 10 razy: P