Kaldırılan çekirdeklerin eski initrd dosyaları neden / önyükleme bölümünü dolduruyor?


13

Her zaman tüm eski çekirdekleri kaldırmamıza rağmen, birkaç Ubuntu makinesinde sürekli olarak tam bir önyükleme bölümü sorunuyla karşı karşıyayım. initrdİlgili çekirdekler gerçekte yüklenmemiş olsa bile, önyükleme bölümünde birçok dosya olduğu için sorun ortaya çıkıyor . Örnek vermek gerekirse:

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

Ancak yalnızca linux-image-4.4.0-104-generic ve linux-image-4.4.0-109-generic kurulu:

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

Gereksiz initrd dosyalarını manuel olarak silersem, yükseltme yapmaya çalıştığımda bunlar yeniden oluşturulur.

Bu sorunun nedeni ne olabilir ve bu dosyalardan kalıcı olarak nasıl kurtulabilirim?


1
Bu sürümlere karşılık gelen paketleri nasıl kaldırdınız?
muru

1
muru Onları temizlemekten başka bir şekilde yaptıklarını hatırlayamıyorum apt-get autoremove.
user5950

Yanıtlar:


12

Kısmen kaldırılmış çekirdekleri

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

ve örneğin ile kaldırın sudo apt-get purge linux-image-4.4.0-101-generic.

Temizleme işlemi, initramfs oluşturma kurallarını kaldıracaktır /var/lib/initramfs-tools/.

Eğer yardımcı olmazsa, onları initramfs listesinden manuel olarak kaldırabilirsiniz:

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

Genellikle çalıştırmak purge-old-kernelsardından sudo apt-get autoremovesadece 2 son tanelerini olması.

Kurulu çekirdekleri initramfsesleriyle yeniden yükleyebilirsiniz:

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

1
Bu gayet iyi çalışıyor gibi görünüyor. Özetlemek gerekirse: bazılarının sadece kısmen kaldırılmış çekirdeklerinin nasıl olduğu. Yukarıda tarif edildiği gibi onları tespit ettim ve kaldırdım. Sonra orada gereksiz yer açmak için bir initrdkez daha elle gereksiz dosyaları form önyükleme kaldırmak zorunda kaldı , ve voilà sorunu çözüldü! Teşekkürler!
user5950

Okuduğum gibi, rmilgili herhangi bir şey, initrdçekirdekler veya başlıklar için kullanmak kötü bir formdur . Kısmen kaldırılan çekirdeklerin / başlıkların / initrd.img dosyalarının sizin için kaldırılmasını sağlayacak bazı komutlar vardır. Bkz update-initramfs. Daha fazla ayrıntı için aşağıdaki cevabıma bakın.
Daniel

2

Zaten kullandıysanız dpkgzaten kontrol ettikten eğer çekirdekleri / başlıkları temizlemek için ve dpkg -lhala çekirdeklerini görmüyorum / başlıklarını orada yüklü, ancak yine de bu eski çekirdekler başvurular bkz içinde /bootbiçiminde initrd-imgdosyalar, daha sonra uygun yolu bu referansları ve dosyaları temizlemek için update-initramfskomut ile.

Örneğin, yalnızca 4.4.0-109yüklediyseniz ancak yine de aşağıdakileri görüyorsanız /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

Güvenle kaldırabilirsiniz 4.4.0-104ve 4.4.0-103gelen /bootaşağıdaki komutlarla:

$ 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

İlk iki komut, initramfsoluşturma kurallarındaki çekirdeklere ve içindeki dosyalara yapılan referansları siler /boot. Son komut, initramfs'e initrd.imgdosyaları güncellenen kurallara göre yeniden oluşturmasını söyler .

Teorik olarak,

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

aynı anda birden çok çekirdeği silmek için, ancak bir nedenden dolayı bu benim için işe yaramadı.


+1 - Bu yetim kalan initrd'ler için doğru yöntemdir (ve cevaptır).
bshea

Teşekkür ederim. Fazla initrd.img dosyaları kaldırıldı. Umarım geri gelmez
null
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.