Tại sao các tập tin initrd cũ của các hạt nhân đã gỡ cài đặt lấp đầy / phân vùng khởi động?


12

Trên một số máy Ubuntu, tôi liên tục phải đối mặt với vấn đề phân vùng khởi động đầy đủ mặc dù tôi luôn loại bỏ tất cả các hạt nhân cũ. Vấn đề dường như xảy ra, vì nhiều initrdtệp nằm trên phân vùng khởi động mặc dù các hạt nhân liên quan không thực sự được cài đặt. Để đưa ra ví dụ:

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

Nhưng chỉ cài đặt linux-image-4.4.0-104 và 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

Nếu tôi xóa các tệp initrd không cần thiết bằng tay, chúng sẽ được tạo lại ngay sau khi tôi cố gắng nâng cấp.

Điều gì có thể là nguyên nhân của vấn đề này và làm thế nào tôi có thể thoát khỏi những tập tin đó vĩnh viễn?


1
Làm thế nào bạn loại bỏ các gói tương ứng với các phiên bản này?
muru

1
@muru Tôi không thể nhớ nó đã được thực hiện theo bất kỳ cách nào khác, ngoài việc thanh lọc chúng với apt-get autoremove.
dùng5950

Câu trả lời:


12

Bạn nên kiểm tra hạt nhân đã loại bỏ một phần với

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

và loại bỏ chúng với ví dụ sudo apt-get purge linux-image-4.4.0-101-generic.

Purging sẽ loại bỏ các quy tắc tạo initramfs khỏi /var/lib/initramfs-tools/.

Nếu nó không hữu ích, bạn có thể xóa chúng theo cách thủ công khỏi danh sách 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

Thông thường tôi chạy purge-old-kernelstheo sau sudo apt-get autoremovechỉ có 2 hạt nhân gần đây.

Bạn có thể cài đặt lại các kernel đã cài đặt với initramfs của chúng:

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

1
Điều này dường như làm việc khá tốt. Tóm lại: một số làm thế nào có nhiều hạt nhân chỉ bị loại bỏ một phần. Tôi phát hiện và loại bỏ chúng như mô tả ở trên. Sau đó, tôi phải xóa các initrdtệp không cần thiết khởi động lại một lần nữa để giải phóng không gian ở đó, vấn đề et voilà đã được giải quyết! Cảm ơn!
dùng5950

Như tôi đã đọc, nó là hình thức xấu để sử dụng rmcho bất kỳ thứ gì liên quan đến initrdhoặc nhân hoặc tiêu đề. Có một số lệnh có sẵn sẽ xử lý loại bỏ các tập tin hạt nhân / tiêu đề / initrd.img bị loại bỏ một phần cho bạn. Xem update-initramfs. Xem câu trả lời của tôi dưới đây để biết thêm chi tiết.
Daniel

1

Nếu bạn đã sử dụng dpkgđể tẩy các hạt nhân / tiêu đề và nếu bạn đã kiểm tra dpkg -lvà vẫn không nhìn thấy các hạt nhân / header được cài đặt ở đó, nhưng bạn vẫn thấy tham chiếu đến các hạt nhân cũ tại /bootdưới dạng initrd-imgcác file, sau đó một cách thích hợp để lọc các tham chiếu và tệp này bằng update-initramfslệnh.

Ví dụ: nếu bạn chỉ 4.4.0-109cài đặt, nhưng bạn vẫn thấy như sau /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

Bạn có thể gỡ bỏ 4.4.0-1044.4.0-103từ một cách an toàn /bootvới các lệnh sau:

$ 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

Hai lệnh đầu tiên xóa các tham chiếu đến các nhân đó trong initramfscác quy tắc tạo cũng như các tệp trong /boot. Lệnh cuối cùng cho initramfs tạo lại các initrd.imgtệp dựa trên các quy tắc được cập nhật.

Về mặt lý thuyết bạn cũng có thể sử dụng

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

để xóa nhiều hạt nhân cùng một lúc, nhưng vì một số lý do, điều này không hiệu quả với tôi.


+1 - Đây là phương pháp chính xác (và câu trả lời) cho initrd mồ côi.
bshea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.