Làm cách nào để giảm kích thước của initrd khi biên dịch kernel của bạn?


13

Khi tôi biên dịch kernel của mình, về cơ bản những gì tôi làm là như sau:

  1. Tôi tải các nguồn từ www.kernel.org và giải nén nó.

  2. Tôi sao chép trước đó .configvào các nguồn và thực hiện make menuconfigđể xem các tùy chọn mới và sửa đổi cấu hình theo chính sách mới của kernel.

  3. Sau đó, tôi biên dịch nó: make -j 4

  4. Cuối cùng, tôi cài đặt nó : su -c 'make modules_install && make install'.

  5. Sau một vài thử nghiệm, tôi loại bỏ kernel cũ (từ /boot/lib/modules) và chạy hoàn toàn với kernel mới (bước cuối cùng này đã cứu mạng tôi nhiều lần! Đó là một pro-tip !).

Vấn đề là tôi luôn nhận được một /boot/initrd.img-4.x.xcái rất lớn so với những cái từ bản phân phối của tôi. Ở đây nội dung của /boot/thư mục hiện tại của tôi là một ví dụ:

# ls -alFh
total 243M
drwxr-xr-x  5 root root 4.0K Mar 16 21:26 ./
drwxr-xr-x 25 root root 4.0K Feb 25 09:28 ../
-rw-r--r--  1 root root 2.9M Mar  9 07:39 System.map-4.4.0-1-amd64
-rw-r--r--  1 root root 3.1M Mar 11 22:30 System.map-4.4.5
-rw-r--r--  1 root root 3.2M Mar 16 21:26 System.map-4.5.0
-rw-r--r--  1 root root 170K Mar  9 07:39 config-4.4.0-1-amd64
-rw-r--r--  1 root root 124K Mar 11 22:30 config-4.4.5
-rw-r--r--  1 root root 126K Mar 16 21:26 config-4.5.0
drwxr-xr-x  5 root root  512 Jan  1  1970 efi/
drwxr-xr-x  5 root root 4.0K Mar 16 21:27 grub/
-rw-r--r--  1 root root  19M Mar 10 22:01 initrd.img-4.4.0-1-amd64
-rw-r--r--  1 root root 101M Mar 12 13:59 initrd.img-4.4.5
-rw-r--r--  1 root root 103M Mar 16 21:26 initrd.img-4.5.0
drwx------  2 root root  16K Apr  8  2014 lost+found/
-rw-r--r--  1 root root 3.5M Mar  9 07:30 vmlinuz-4.4.0-1-amd64
-rw-r--r--  1 root root 4.1M Mar 11 22:30 vmlinuz-4.4.5
-rw-r--r--  1 root root 4.1M Mar 16 21:26 vmlinuz-4.5.0

Như bạn có thể nhận thấy, kích thước initrd.imgtệp của tôi lớn hơn khoảng 10 lần so với tệp từ bản phân phối của tôi.

Vì vậy, tôi có làm gì sai khi biên dịch kernel không? Và, làm thế nào tôi có thể giảm kích thước của tôi initrd.img?


wiki.gentoo.org/wiki/ Good và xem những gì làm cho nó rất lớn. Nó có thể là hàng tấn mô-đun hạt nhân hoặc thư viện ... hoặc một cái gì đó hoàn toàn khác. Nếu bạn không nhìn vào nội dung của kho lưu trữ thì đó chỉ là phỏng đoán.
frostschutz 17/03/2016

Câu trả lời:


19

Điều này là do tất cả các mô-đun hạt nhân không bị tước bỏ. Bạn cần phải lột nó xuống kích thước của nó.

Sử dụng lệnh này:

SHW@SHW:/tmp# cd /lib/modules/<new_kernel>
SHW@SHW:/tmp# find . -name *.ko -exec strip --strip-unneeded {} +

Điều này sẽ làm giảm đáng kể kích thước. Sau khi thực hiện lệnh trên, bạn có thể tiến hành tạo initramfs / initrd


Ồ, tôi sẽ không bao giờ mặc dù việc tước các mô-đun sẽ chia kích thước của initrdhình ảnh cho 10 ... Cảm ơn rất nhiều, nó hoạt động tốt!
perror

Nên là một không gian giữa {}+.
phk 17/03/2016

15

Tôi đã thực hiện một số nghiên cứu bổ sung về vấn đề này để biết đâu là cách tốt nhất để loại bỏ các mô-đun và đây là toàn bộ quá trình tôi tìm thấy (vẫn SHW đã mang lại câu trả lời nhưng quá trình tôi tìm thấy theo cách nào đó được chuẩn hóa hơn):

  1. Tải về các nguồn từ www.kernel.orgvà giải nén nó.

  2. Sao chép trước đó của bạn .configvào các nguồn và thực hiện make menuconfigđể xem các tùy chọn mới và sửa đổi cấu hình theo chính sách mới của kernel.

  3. Sau đó, biên dịch nó:

    $> make -j 4
    
  4. Cuối cùng, cài đặt nó:

    $> su -c 'make INSTALL_MOD_STRIP=1 modules_install && make install'
    
  5. Sau một vài thử nghiệm, loại bỏ kernel cũ khỏi /boot/lib/modulesthư mục.

Các INSTALL_MOD_STRIPkhi thiết lập để 1thêm một strip --strip-debugkhi cài đặt các mô-đun, đó là đủ để giảm kích thước đáng kể.

Xem: INSTALL_MOD_STRIP trong Documentation/kbuild/kbuild.txt.


7

Bạn cũng có thể thay đổi cấu hình của bạn initramfs.conf

Tìm tập tin tại /etc/initramfs-tools/initramfs.conf

Có một cài đặt cho biết MODULES=mostđiều này bao gồm hầu hết các mô-đun kn hình ảnh initrd của bạn.

Thay đổi nó thành MODULES=depđiều này làm cho trình tạo initramfs đoán mô-đun sẽ bao gồm.

Kiểm tra trang web cho initramfs.conf tại đây .

LƯU Ý 1: Sau khi thực hiện các bước trên, kích thước hình ảnh initramfs của tôi giảm từ 282 MB xuống còn 99 MB. (Điều này vẫn đủ lớn nhưng là một cải tiến đáng kể)

CHÚ THÍCH 2: Tôi cũng đã thử tước các mô-đun hạt nhân tại /lib/modules/<kernel version>. Các mô-đun được cung cấp bởi các bản cập nhật hệ điều hành bị tước (size = 211 MB) và do đó hình ảnh intiramfs tương ứng là khoảng 15 MB. Sau khi tước các mô-đun của hạt nhân vani mà tôi tự biên soạn kích thước của thư mục là 185 MB và hình ảnh intramfs là 16 MB. Vì vậy, sau khi tất cả tối ưu hóa, kích thước đã giảm từ 282 MB xuống 16 MB !! Để tước sử dụng mã này

find /lib/modules/<kernel_release>/ -iname "*.ko" -exec strip --strip-unneeded {} \;

Trong đoạn mã trên thay thế <kernel_release>bằng phiên bản kernel mà bạn muốn loại bỏ các mô-đun.

Để thảo luận thêm xem liên kết này .

Đoạn mã trên phải được chạy dưới dạng sudohoặcsu

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.