Çekirdeğinizi derlerken initrd'nin boyutu nasıl azaltılır?


13

Kendi çekirdeğimi derlediğimde, temelde yaptığım şey şudur:

  1. Kaynakları www.kernel.org adresinden indirip açıyorum.

  2. Öncekimi .configkaynaklara kopyalarım make menuconfigve yeni seçenekleri izlemek ve yapılandırmayı çekirdeğin yeni ilkesine göre değiştirmek için yaparım .

  3. Sonra derliyorum: make -j 4

  4. Son olarak, kurun: su -c 'make modules_install && make install'.

  5. Birkaç testten sonra, eski çekirdeği ( /bootve /lib/modules) kaldırıyorum ve yenisiyle tamamen çalıştırıyorum (bu son adım hayatımı birkaç kez kurtardı! Bu bir profesyonel ipucu !).

Sorun şu ki /boot/initrd.img-4.x.x, dağıtımımdakilere kıyasla her zaman çok büyük bir tane alıyorum. /boot/Örnek olarak şu anki dizinin içeriği :

# 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

Fark etmiş olabileceğiniz gibi, initrd.imgdosyalarımın boyutu dağıtımımdakilerden yaklaşık 10 kat daha büyük.

Çekirdeğimi derlerken yanlış bir şey mi yaparım? Ve boyutumu nasıl azaltabilirim initrd.img?


wiki.gentoo.org/wiki/… ve onu neyin bu kadar büyük yaptığını görün. Ya tonlarca çekirdek modülü ya da kütüphane ... ya da tamamen başka bir şey olabilir. Eğer arşivin içeriğine bakmazsanız bu sadece bir tahmindir.
frostschutz

Yanıtlar:


19

Bunun nedeni, tüm çekirdek modüllerinin soyulmamasıdır. Boyutuna kadar soymanız gerekir.

Bu komutu kullanın:

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

Bu, boyutu önemli ölçüde azaltacaktır. Yukarıdaki komutu yürüttükten sonra, initramfs / initrd oluşturmaya devam edebilirsiniz.


Vay canına, modülleri soymanın initrdgörüntünün boyutunu 10'a böldüğünü asla düşünemezdim ... Çok teşekkürler, iyi çalıştı!
Mart'ta perror

Arasında bir boşluk olmalıdır {}ve +.
phk

15

Modülleri elimine etmenin en iyi yolunun ne olduğunu bilmek için sorun hakkında biraz araştırma yaptım ve işte bulduğum tam süreç (yine de SHW cevabı getirdi ama bulduğum süreç bir şekilde daha standart hale geldi):

  1. Kaynakları indirin www.kernel.orgve açın.

  2. Öncekinizi .configkaynaklara kopyalayın make menuconfigve yeni seçenekleri izlemek ve yapılandırmayı çekirdeğin yeni ilkesine göre değiştirmek için a yapın.

  3. Sonra derleyin:

    $> make -j 4
    
  4. Son olarak yükleyin:

    $> su -c 'make INSTALL_MOD_STRIP=1 modules_install && make install'
    
  5. Birkaç testten sonra, eski çekirdeği /bootve /lib/modulesdizinleri kaldırın .

INSTALL_MOD_STRIPAyarlandığında 1bir ekleme strip --strip-debugölçüde boyutunu azaltmak için yeterlidir modülü, yüklerken.

Bkz: INSTALL_MOD_STRIP içinde Documentation/kbuild/kbuild.txt.


7

Ayrıca cihazınızın yapılandırmasını da değiştirebilirsiniz. initramfs.conf

Dosyayı şurada bulun: /etc/initramfs-tools/initramfs.conf

MODULES=mostBunun, initrd resminizi örten modüllerin çoğunu içerdiğini söyleyen bir ayar var .

Bunu değiştirmek MODULES=dep, initramfs üretecinin hangi modüllerin dahil edileceğini tahmin etmesini sağlar.

İnitramfs.conf için manpage göz atın burada .

NOT 1: Yukarıdaki adımları uyguladıktan sonra initramfs görüntümün boyutu 282 MB'dan 99 MB'ye düşürüldü. (Bu hala yeterince büyük ama önemli bir gelişme)

NOT 2: Ben de çekirdek modüllerini sıyırmaya çalıştım /lib/modules/<kernel version>. İşletim sistemi güncellemeleri tarafından sağlanan modüller çıkarılır (boyut = 211 MB) ve dolayısıyla ilgili intiramfs görüntüsü yaklaşık 15 MB'dir. Kendimi derlediğim vanilya çekirdeğinin modüllerini soyduktan sonra klasörün boyutu 185 MB ve intramfs görüntüsü 16 MB idi. Yani tüm optimizasyonlardan sonra boyut 282 MB'dan 16 MB'a indi! Sıyırma için bu kodu kullanın

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

Yukarıdaki kodda <kernel_release>, modülleri çıkarmak istediğiniz çekirdek sürümüyle değiştirin .

Daha fazla tartışma için bu bağlantıyı görüntüleyin .

Yukarıdaki kod sudoveya olarak çalıştırılmalıdır.su

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.