Как я могу удалить старые ядра / установить новые, когда / boot заполнен?

31

Я знаю, что этот вопрос задавали много раз раньше, однако, со мной, я думаю, он немного другой.

# 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

Мой загрузочный раздел заполнен.

Текущее ядро:

# uname -r
3.2.0-35-generic

Все ядра:

# 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

Поэтому я подумал удалить ядро ​​3.2.0.32:

# 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).

Нет успеха

Когда я пытаюсь apt-get -f installэто тоже не получается:

# 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)

Любая помощь будет принята с благодарностью.

Обновление: я сделал:

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

После этого возникает следующая проблема 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)
завивать волосы щипцами
источник
Смотрите мой ответ, когда автоматическое удаление не работает из-за недостатка места.
nslntmnx

Ответы:

22

Вы не можете использовать apt-get, если ваше ядро ​​устарело.

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

используйте, lsчтобы увидеть, что находится в папке, удалить самый старый или два, затем

sudo apt-get -f install

Тогда вы можете либо удачно получить чистку, как в

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

или просто продолжайте с rm.

Вы должны также, sudo update-grubкогда вы закончите

wlraider70
источник
Команда установки переустановила многие старые ядра, что привело к полной загрузке диска. Команда очистки решила это для меня.
СПРБР
Я следовал за этим ответом до sudo apt-get -f install, затем перезапустил, чтобы убедиться, что все хорошо, и удалил остальное с помощью, apt autoremoveкак предложено в предыдущем выводе команд.
Барт C
10

Видимо, это работает:

sudo apt-get autoremove 

По данным apt-getman-страницы:

autoremove используется для удаления пакетов, которые были автоматически установлены для удовлетворения зависимостей других пакетов и больше не нужны.

3.16.0-39 - это тот, который я пытался установить, но не смог, потому что / boot был переполнен. 3.16.0-38 - моя текущая версия. Вы можете видеть, что -38 был пропущен.

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
источник
Мне нравится этот ответ, но он пропускает какое-то руководство, чтобы точно знать, для чего autoremove.
s3m3n
1
Автоудаление работает только в том случае, если ранее выполненные действия apt были поставлены в очередь. Автоудаление не будет работать, если вы уже получаете сообщение об ошибке «на устройстве не осталось места» - эти ранее поставленные в очередь действия завершатся сбоем и автообновление не будет запущено. Другими словами, автоудаление работает ... пока не работает.
user535733 31.12.15
@ user535733 Вы правы. Смотрите мой ответ, когда автоматическое удаление не работает из-за недостатка места.
nslntmnx
7

В терминале выполните следующую команду:

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

Эта команда выводит список всех установленных на данный момент ядер Linux, затем выбирает все те, которые в данный момент не используются, и удаляет их.

Django23
источник
2
Возможно, вы хотели бы объяснить, что именно делает эта команда. Это выглядит довольно сложно: в общем, людям следует советовать не запускать такие команды, которые они не понимают, особенно что-то жизненно важное для их системы.
mtdevans
@mtdevans: я добавил, что приведенная выше команда выводит список всех установленных на данный момент ядер Linux, затем выбирает все те, которые в данный момент не используются, а затем удаляет все ядра, которые в данный момент не используются.
Кристиан
4
Команда полезна, просто запустите часть перед «| xargs», чтобы проверить, что вы собираетесь удалить. Также, | grep -v может понадобиться для сохранения последнего ядра, которое еще не используется, но желательно.
Роман Суси
4
это опасно, так как оно соответствует linux-libc-dev: amd64
Фредерик Норд,
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

Если выполнение вышеуказанной команды без «sudo apt-get -y purge» соответствует вашему linux-libc-dev: amd64, вы можете добавить точку с запятой в регулярное выражение, чтобы не включать ее:

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"

Кори W
источник
1

Для Ubuntu 12.04 попробуйте это sudo apt-get purge linux-image-[kernel version]

Это удалит любую версию ядра. Если в вашей загрузочной папке много ядер, не забудьте обновить grub и перезагрузить систему

ех. sudo apt-get purge linux-image-3.11.6 *

alisaleh
источник
2
Проблема в том, что это больше не работает, когда есть точка, в которой есть проблемы с зависимостями, такие как та, что впереди.
Пало Эберманн
Это работает для меня!
Даниил
0

Многие ответы говорят, что нужно использовать «apt autoremove», но это может не сработать, когда / boot заполнен, потому что apt пытается добавить ядра перед удалением.

Next apt autoremove не удалит ядра, упомянутые в /etc/apt/apt.conf.d/01autoremove-kernels, поэтому мы должны это исправить.

Вот процесс, который работал для меня.

Удалите ненужные файлы конфигурации ядра.

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

Обновите /etc/apt/apt.conf.d/01autoremove-kernels, запустив ...

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

Надеюсь, удачное удаление будет работать.

sudo apt autoremove --purge

Если нет, вы сможете вручную удалить очень старые и неиспользуемые ядра из / boot.

Сначала выясните, какое ядро ​​вы используете.

uname -r

Не удаляйте текущее ядро ​​или предыдущее ядро.

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

Теперь у вас должно быть достаточно места, чтобы снова попробовать apt autoremove. Если нет, удалите другое очень старое ядро. Конечно, сохраняйте текущее и следующее старое.

nslntmnx
источник
-2

Я надеюсь, что это может помочь:

я обычно удаляю старые ядра, используя убунту-твик дворник, приятный графический интерфейс и легкий :)

нажмите на 'system', и появится список старых ядер, просто нажмите на него и уберите

Mohur
источник
1
это сервер Ubuntu, и я подключен через замазку. (Но у меня также есть доступ к Webmin на сервере)
Марсель
Как я могу установить этот уборщик Ubuntu-твик, пожалуйста?
Дженни О'Рейли