আপনার কার্নেলটি সংকলন করার সময় কীভাবে আরআরআরডিটির আকার হ্রাস করবেন?


13

আমি যখন আমার নিজস্ব কার্নেল সংকলন করি তখন মূলত আমি যা করি তা নিম্নলিখিত:

  1. আমি www.kernel.org থেকে উত্সগুলি ডাউনলোড করি এবং এটি সঙ্কুচিত করি।

  2. আমি আমার পূর্ববর্তী .configউত্সগুলিতে অনুলিপি করেছি এবং make menuconfigনতুন বিকল্পগুলি দেখার জন্য এবং কর্নেলের নতুন নীতি অনুসারে কনফিগারেশনটি সংশোধন করতে চাই।

  3. তারপরে, আমি এটি সংকলন করছি: make -j 4

  4. অবশেষে, আমি এটি ইনস্টল করুন : su -c 'make modules_install && make install'.

  5. কয়েকটি পরীক্ষার পরে, আমি পুরানো কার্নেলটি সরিয়ে নিয়েছি ( /bootএবং থেকে /lib/modules) এবং সম্পূর্ণরূপে নতুনটির সাথে চলি (এই শেষ পদক্ষেপটি আমার জীবনকে বেশ কয়েকবার বাঁচায়! এটি প্রো-টিপ !)।

সমস্যাটি হ'ল আমি সর্বদা /boot/initrd.img-4.x.xআমার ডিস্ট্রিবিউশনের সাথে তুলনা করে একটি বিশাল পাই । /boot/উদাহরণ হিসাবে আমার বর্তমান ডিরেক্টরিটির বিষয়বস্তু এখানে :

# 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

আপনি যেমন খেয়াল করেছেন, আমার initrd.imgফাইলগুলির আকার আমার বিতরণ করা ফাইলগুলির চেয়ে প্রায় 10 গুণ বড় bigger

সুতরাং, আমার কার্নেলটি সংকলন করার সময় আমি কি কিছু ভুল করব? এবং, আমি কীভাবে আমার আকারটি হ্রাস করতে পারি initrd.img?


wiki.gentoo.org/wiki/… এবং দেখুন যে এটিকে এত বিশাল করে তুলছে । এটি হয় প্রচুর কার্নেল মডিউল বা লাইব্রেরি ... বা সম্পূর্ণ অন্য কিছু হতে পারে। আপনি যদি সংরক্ষণাগারটির বিষয়বস্তুগুলি না দেখে থাকেন তবে এটি কেবল অনুমান করা।
frostschutz

উত্তর:


19

কারণ সমস্ত কার্নেল মডিউলগুলি ছিঁড়ে যায়নি। এটির আকার কমিয়ে আনার জন্য আপনাকে এটিকে ফালা করতে হবে।

এই আদেশটি ব্যবহার করুন:

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

এটি আকারকে মারাত্মকভাবে হ্রাস করবে। উপরের কমান্ডটি কার্যকর করার পরে, আপনি initramfs / initrd তৈরি করতে এগিয়ে যেতে পারেন


বাহ, আমি মডিউলগুলি ছাঁটাই initrd10 দ্বারা চিত্রের আকার বিভক্ত হবে যদিও আমি কখনও না ... অনেক অনেক ধন্যবাদ, এটি দুর্দান্ত কাজ করেছে!
আতঙ্কিত

এর মধ্যে {}এবং এর মধ্যে একটি স্থান হওয়া উচিত +
পিএইচকে

15

মডিউলগুলি ছিনিয়ে নেওয়ার সর্বোত্তম উপায় কী তা জানার জন্য আমি সমস্যাটি সম্পর্কে কিছু অতিরিক্ত গবেষণা করেছি এবং আমার পাওয়া সম্পূর্ণ প্রক্রিয়াটি এখানে রয়েছে (এখনও এসএইচডাব্লু উত্তরটি নিয়ে এসেছিল তবে আমি যে প্রক্রিয়াটি পেয়েছি তা একরকম আরও মানসম্পন্ন):

  1. উত্সগুলি ডাউনলোড করুন www.kernel.orgএবং এটি সঙ্কুচিত করুন।

  2. আপনার পূর্ববর্তী .configউত্সগুলিকে অনুলিপি make menuconfigকরুন এবং নতুন বিকল্পগুলির জন্য নজর রাখুন এবং কার্নেলের নতুন নীতি অনুসারে কনফিগারেশনটি পরিবর্তন করুন।

  3. তারপরে, এটি সংকলন করুন:

    $> make -j 4
    
  4. শেষ পর্যন্ত, এটি ইনস্টল করুন:

    $> su -c 'make INSTALL_MOD_STRIP=1 modules_install && make install'
    
  5. কয়েকটি পরীক্ষার পরে, পুরানো কার্নেল /bootএবং /lib/modulesডিরেক্টরিগুলি থেকে সরান ।

INSTALL_MOD_STRIPযখন সেট 1একটি যোগ strip --strip-debugযখন মডিউল দেখবেন, যার আয়তন বহুলাংশে আকার হ্রাস যথেষ্ট ইনস্টল।

দেখুন: INSTALL_MOD_STRIP in Documentation/kbuild/kbuild.txt


7

আপনি আপনার কনফিগারেশন পরিবর্তন করতে পারেন initramfs.conf

ফাইলটি এখানে সন্ধান করুন /etc/initramfs-tools/initramfs.conf

একটি সেটিং রয়েছে যা বলেছে MODULES=mostএটিতে আপনার আরআরআরডি চিত্রের বেশিরভাগ মডিউল অন্তর্ভুক্ত রয়েছে।

এটিকে এটিকে পরিবর্তন করা MODULES=depসূচনা দেয় যা জেনারেটরের অনুমান করে যে কোন মডিউলগুলি অন্তর্ভুক্ত করা উচিত।

Initramfs.conf এর জন্য ম্যানপেজটি এখানে দেখুন

দ্রষ্টব্য 1: উপরের পদক্ষেপগুলি সম্পাদন করার পরে আমার initramfs চিত্রের আকারটি 282 এমবি থেকে কমিয়ে 99 এমবি হয়েছে ((এটি এখনও যথেষ্ট বড় তবে এটির একটি উল্লেখযোগ্য উন্নতি)

দ্রষ্টব্য 2: আমি এখানে কার্নেল মডিউলগুলি সরিয়ে দেওয়ার চেষ্টা করেছি /lib/modules/<kernel version>। ওএস আপডেট দ্বারা সরবরাহিত মডিউলগুলি (আকার = 211 মেগাবাইট) কেটে ফেলা হয় এবং এইভাবে সম্পর্কিত ইনটিরামস চিত্রটি প্রায় 15 এমবি হয়। ভ্যানিলা কার্নেলের মডিউলগুলি সরিয়ে নেওয়ার পরে যে আমি নিজেরটি ফোল্ডারটির আকারটি 185 এমবি এবং ইন্ট্রামফেসের চিত্রটি 16 এমবি ছিল। সুতরাং সমস্ত অপ্টিমাইজেশনের পরে আকারটি 282 এমবি থেকে 16 এমবিতে নেমে এসেছিল !! স্ট্রিপিংয়ের জন্য এই কোডটি ব্যবহার করুন

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

উপরের কোডটিতে <kernel_release>কার্নেল সংস্করণটি প্রতিস্থাপন করুন যা থেকে আপনি মডিউলগুলি সরাতে চান।

আরও আলোচনার জন্য এই লিঙ্কটি দেখুন

উপরের কোড হিসাবে চালানো হতে হবে sudoবাsu

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.