Чому старі файли initrd невстановлених ядер заповнюють / завантажують розділ?


13

На кількох машинах Ubuntu я постійно стикаюся з проблемою повного завантажувального розділу, хоча я завжди видаляю всі старі ядра. Здається, проблема виникає, оскільки багато initrdфайлів знаходяться на завантажувальному розділі, навіть якщо відповідні ядра фактично не встановлені. Навести приклад:

root@Jacobi:/boot# ls -lah
insgesamt 202M
drwxr-xr-x  3 root root 3,0K Jan 30 10:03 .
drwxr-xr-x 25 root root 4,0K Jan 30 10:03 ..
-rw-r--r--  1 root root 1,2M Dez 11 15:36 abi-4.4.0-104-generic
-rw-r--r--  1 root root 1,2M Jan  9 22:28 abi-4.4.0-109-generic
-rw-r--r--  1 root root 1,2M Jan 19 14:06 abi-4.4.0-112-generic
-rw-r--r--  1 root root 187K Dez 11 15:36 config-4.4.0-104-generic
-rw-r--r--  1 root root 187K Jan  9 22:28 config-4.4.0-109-generic
-rw-r--r--  1 root root 187K Jan 19 14:06 config-4.4.0-112-generic
drwxr-xr-x  5 root root 1,0K Jan 30 10:03 grub
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-3.13.0-39-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-101-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-103-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-104-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-109-generic
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-4.4.0-38-generic
-rw-r--r--  1 root root  10M Jan 30 10:03 initrd.img-4.4.0-45-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-59-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-77-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-78-generic
-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-81-generic
-rw-r--r--  1 root root 179K Jan 28  2016 memtest86+.bin
-rw-r--r--  1 root root 181K Jan 28  2016 memtest86+.elf
-rw-r--r--  1 root root 181K Jan 28  2016 memtest86+_multiboot.bin
-rw-------  1 root root 3,8M Dez 11 15:36 System.map-4.4.0-104-generic
-rw-------  1 root root 3,8M Jan  9 22:28 System.map-4.4.0-109-generic
-rw-------  1 root root 3,8M Jan 19 14:06 System.map-4.4.0-112-generic
-rw-------  1 root root 6,8M Dez 11 15:36 vmlinuz-4.4.0-104-generic
-rw-------  1 root root 6,8M Jan  9 22:28 vmlinuz-4.4.0-109-generic
-rw-------  1 root root 6,8M Jan 19 14:06 vmlinuz-4.4.0-112-generic

Але встановлено лише linux-image-4.4.0-104-generic та linux-image-4.4.0-109-generic:

root@Jacobi:/boot# dpkg -l linux-image-\* | grep ^ii
ii  linux-image-4.4.0-104-generic       4.4.0-104.127 amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-109-generic       4.4.0-109.132 amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-104-generic 4.4.0-104.127 amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-109-generic 4.4.0-109.132 amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP

Якщо я видаляю непотрібні файли initrd вручну, вони будуть створені знову, як тільки я спробую зробити оновлення.

Що може бути причиною цієї проблеми та як я можу назавжди позбутися цих файлів?


1
Як ви видалили пакунки, відповідні цим версіям?
муру

1
@muru Я не пам'ятаю, як це було зроблено інакше, ніж очищення їх apt-get autoremove.
user5950

Відповіді:


12

Слід перевірити частково видалені ядра

dpkg -l linux-image-\* | grep ^rc

і видаліть їх, наприклад sudo apt-get purge linux-image-4.4.0-101-generic.

Чистка видалить правила генерації initramfs з /var/lib/initramfs-tools/.

Якщо це не допомагає, ви можете видалити їх вручну зі списку initramfs:

sudo rm /var/lib/initramfs-tools/3.13.0-39-generic
sudo rm /var/lib/initramfs-tools/4.4.0-101-generic
sudo rm /var/lib/initramfs-tools/4.4.0-103-generic
sudo rm /var/lib/initramfs-tools/4.4.0-38-generic
sudo rm /var/lib/initramfs-tools/4.4.0-45-generic
sudo rm /var/lib/initramfs-tools/4.4.0-59-generic
sudo rm /var/lib/initramfs-tools/4.4.0-77-generic
sudo rm /var/lib/initramfs-tools/4.4.0-78-generic
sudo rm /var/lib/initramfs-tools/4.4.0-81-generic

Зазвичай я запускаю, purge-old-kernelsа потім sudo apt-get autoremoveлише 2 останні ядра.

Ви можете перевстановити встановлені ядра за допомогою їх initramfses:

sudo apt-get install --reinstall \
$(dpkg -l linux-image-\* | grep ^ii | awk '{print $2}')

1
Це, здається, працює досить добре. Підводячи підсумок: деякі, як було багато лише частково видалених ядер. Я помітив і видалив їх, як описано вище. Тоді мені довелося initrdще раз видалити непотрібні файли завантаження форми вручну, щоб звільнити місце там, і проблема voilà вирішена! Спасибі!
user5950

Як я читав, це погана форма використання rmдля будь-якого видаленого до initrdядер чи заголовків. Є кілька команд, які допоможуть вам видалити частково видалені файли ядер / заголовків / initrd.img. Див update-initramfs. Дивіться мою відповідь нижче для отримання більш детальної інформації.
Даніель

2

Якщо ви вже використовували dpkgчистку ядер / заголовків і якщо ви вже перевірили dpkg -lі досі не бачите встановлені там ядра / заголовки, але ви все ще бачите посилання на ці старі ядра у /bootвигляді initrd-imgфайлів, то правильний спосіб очистити ці посилання та файли можна за допомогою update-initramfsкоманди.

Наприклад, якщо ви лише 4.4.0-109встановили, але ви все ще бачите таке в /boot:

-rw-r--r--  1 root root  10M Jan 30 10:02 initrd.img-4.4.0-103-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-104-generic
-rw-r--r--  1 root root  38M Jan 30 10:02 initrd.img-4.4.0-109-generic

Ви можете безпечно видалити 4.4.0-104і 4.4.0-103з /bootза допомогою наступних команд:

$ sudo update-initramfs -d -k 4.4.0-103-generic
$ sudo update-initramfs -d -k 4.4.0-104-generic
$ sudo update-initramfs -c -k all

Перші дві команди видаляють посилання на ці ядра в initramfsправилах генерації, а також на файли в /boot. Остання команда повідомляє initramfs відновлювати initrd.imgфайли на основі оновлених правил.

Теоретично ви також можете використовувати

$ sudo update-initramfs -d -k 4.4.0-{103,104}-generic

щоб видалити декілька ядер одночасно, але мені це чомусь не вдалося.


+1 - Це правильний метод (і відповідь) для дітей-сиріт.
bshea

Дякую. Видалено зайві файли initrd.img. Сподіваємось, не повернеться
недійсне
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.