ทำไมไฟล์ initrd เก่าของเคอร์เนลที่ถูกถอนการติดตั้งเติมพาร์ติชั่น / boot?


13

ในเครื่องอูบุนตูหลายเครื่องฉันพบปัญหาพาร์ติชั่นบูทเต็มรูปแบบอยู่ตลอดเวลาแม้ว่าฉันจะลบเมล็ดเก่าทั้งหมดออกไปเสมอ ดูเหมือนว่าปัญหาจะเกิดขึ้นเนื่องจาก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
คุณลบแพ็กเกจที่สอดคล้องกับเวอร์ชันเหล่านี้อย่างไร
muru

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 เมล็ดล่าสุด

คุณสามารถติดตั้งเคอร์เนลที่ติดตั้งใหม่ด้วยชื่อเริ่มต้น:

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

1
ดูเหมือนว่าจะทำงานได้ดีทีเดียว เพื่อสรุป: บางส่วนมีเมล็ดเพียงบางส่วนเท่านั้น ฉันเห็นและลบออกตามที่อธิบายไว้ข้างต้น จากนั้นฉันต้องลบinitrdไฟล์ที่ไม่จำเป็นในการบู๊ตด้วยตนเองอีกครั้งเพื่อเพิ่มพื้นที่ว่างที่นั่นและแก้ไขปัญหา! ขอบคุณ!
user5950

อย่างที่ฉันได้อ่านมันเป็นรูปแบบที่ไม่ดีที่จะใช้rmสำหรับสิ่งที่เกี่ยวข้องinitrdหรือเมล็ดหรือส่วนหัว มีคำสั่งบางอย่างที่สามารถจัดการการลบไฟล์ kernels / headers / initrd.img ที่ถูกลบบางส่วนให้คุณได้ update-initramfsดู ดูคำตอบของฉันด้านล่างสำหรับรายละเอียดเพิ่มเติม
Daniel

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 - นี่เป็นวิธีที่ถูกต้อง (และตอบ) สำหรับ initrd ของเด็กกำพร้า
bshea

ขอขอบคุณ. ลบไฟล์ initrd.img ที่มากเกินไป หวังว่าจะไม่กลับมาอีก
null
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.