EFI স্টাব (ইফিস্টাব) লোডার ব্যবহার করে কার্নেলটি লোড করবেন কীভাবে?


14

আমার উবুন্টু 14.04 কেবলমাত্র অপারেটিং সিস্টেম হিসাবে ইউইএফআই মোডে চলছে, এখানে কোনও ডুয়াল-বুট নেই। কার্নেল সংস্করণটি 3.13.0-24-জেনেরিক। একটি EFI পার্টিশন আছে। এই ক্ষেত্রে EFI পার্টিশনটি ডিফল্ট /dev/sda1নয় তবে /dev/sda3কারণ আমি BIOS মোডকে EFI মোডে রূপান্তর করেছি । আমি grub-efi-amd64প্যাকেজটি ব্যবহার করেছি , যদিও এটি ইউইএফআই ফার্মওয়্যার বুট মেনু (ইউইএফআই বুট লোড \EFI\ubuntu\grubx64.efi) থেকে GRUB বুট মেনু লোড করে ।

আমি সেই ডাবল বুট মেনু লোডিং পদক্ষেপটি এড়িয়ে যেতে এবং সরাসরি ইউইএফআই থেকে সরাসরি কার্নেলের মধ্যে বুট করতে চাই। উবুন্টু কার্নেলের 12.10 যেহেতু আছে "কার্নেল আপনি EFI শহরের উপর অসম্পূর্ণ নিবন্ধ লোডার" বৈশিষ্ট্য।

আমি জানি আমার উবুন্টু কার্নেলটি EFI পার্টিশনে (সম্ভবত পুনরায় নামকরণ) অনুলিপি করতে হবে এবং ইউইএফআই বুট মেনুতে (যেমন ব্যবহার করার জন্য efibootmgr) একটি এন্ট্রি তৈরি করা দরকার । কোন সঠিক টার্মিনাল কমান্ড এটি করা প্রয়োজন?

উত্তর:


14

নীচের কমান্ডগুলি কেবল কার্নেল সংস্করণ 3.13.0-35 এর জন্য আরও জেনেরিক।

1. efi পার্টিশনটি মাউন্ট করুন এবং সেখানে কার্নেল ফাইলগুলি অনুলিপি করুন

$ mount /dev/sda3 /boot/efi

$ mkdir -pv /boot/efi/EFI/ubuntu/

$ cp -uv /boot/vmlinuz-* /boot/initrd.img-* /boot/efi/EFI/ubuntu/
'/boot/vmlinuz-3.13.0-35-generic' -> '/boot/efi/EFI/ubuntu/vmlinuz-3.13.0-35-generic'
'/boot/initrd.img-3.13.0-35-generic' -> '/boot/efi/EFI/ubuntu/initrd.img-3.13.0-35-generic'

২. কার্নেলের ফাইলের নাম পরিবর্তন করুন

অপসারণ করে কার্নেল ফাইলের নাম সংক্ষিপ্ত করুন -genericকারণ মনে হচ্ছে 39 ক্যারেক্টরের দৈর্ঘ্যের পাথ সীমা রয়েছে এবং কার্নেল ফাইলের পুনরায় নামকরণ করতে হবে .efi, এটি বেশিরভাগ সিস্টেমে সামঞ্জস্যতা নিশ্চিত করে

$ for f in /boot/efi/EFI/ubuntu/vmlinuz-*-generic; do mv -uv -- "$f" "${f//-generic/}.efi"; done
'/boot/efi/EFI/ubuntu/vmlinuz-3.13.0-35-generic' -> '/boot/efi/EFI/ubuntu/vmlinuz-3.13.0-35-generic.efi'`

উপরে নাম কার্নেল ফাইল নাম কমা না জন্য যথেষ্ট dpkgইনস্টল মেইনলাইন কার্নেল কারণ উদাহরণস্বরূপ, /EFI/ubuntu/vmlinuz-3.16.0-031600rc6.efiছাড়া -genericএখনো কমপক্ষে 40 অক্ষরের দীর্ঘ।

3. EFI বুট মেনুতে নতুন এন্ট্রি যুক্ত করুন

3.13.0-35আপনার নির্দিষ্ট কার্নেল সংস্করণ দিয়ে এই উদাহরণে প্রতিস্থাপন করুন

$ kv=3.13.0-35;efibootmgr -c -p 3 -L $kv -l \EFI\ubuntu\vmlinuz-$kv.efi -u root=/dev/sda1 initrd=\\EFI\\ubuntu\\initrd.img-$kv-generic ro rootfstype=ext4 debug ignore_loglevel libata.force=dump_id crashkernel=384M-:128M

এই নতুন বুট মেনু এন্ট্রিটি আপনার ডিফল্ট নতুন বুট পছন্দ হয়ে উঠবে।

আপনি অতিরিক্ত ডিবাগ পরামিতি প্রয়োজন নাও হতে পারে debug, ignore_loglevel, libata.force=dump_idএবং crashkernel=384M-:128MInitrd"এ সময় উপস্থিত, অন্যথায় বুট হ্যাং হওয়া আবশ্যক clocksource টিএসসি পাল্টানো হয়েছে। " কারণ root ডিভাইস, sda1 খোলা যাবে না।


আমি জানি না আপনি কীভাবে এটি বের করেছেন তবে আপনি আশ্চর্য। এই পরিষ্কার বৈশিষ্ট্যটির চারপাশে আশ্চর্যজনকভাবে খুব কম ডক রয়েছে।
ব্যবহারকারী 3549648

ক্ষেত্রে এটি আপনার পক্ষে কাজ করছে না যদি আপনি যুক্তিগুলি -lএবং -uডাবল উদ্ধৃতিতে রাখার চেষ্টা করেন (বা ম্যানুয়ালি ব্যাকস্ল্যাশ এড়ানোর জন্য )। আপনি যদি efibootmgr -vEFI বুট মেনুতে নতুন এন্ট্রি যুক্ত করার পরে এটি কার্যকর করে পরীক্ষা করে দেখতে পারেন । এছাড়াও, আপনার মেশিনে একাধিক ডিস্ক রয়েছে (একটি এসএসডি এবং এইচডিডি বলুন) তারপরে আপনাকে -d/dev/sdaman efibootmgr
কোনওটি

5

দেবিয়ান উইকির মতে, এটি কয়েকটি সাধারণ পদক্ষেপে করা যেতে পারে যা কার্নেল আপডেটে টিকে থাকবে

দ্রষ্টব্য: এটি ধরে নেয় যে আপনার একটি EFI পার্টিশন মাউন্ট হয়েছে /boot/efi

  1. /etc/kernel/postinst.d/zz-update-efistubনিম্নলিখিত বিষয়বস্তু দিয়ে তৈরি করুন :

    #!/bin/sh
    cp /vmlinuz /initrd.img /boot/efi/EFI/ubuntu/
    

    এটি এমন একটি হুক যা সর্বশেষতম কার্নেল চিত্রটি অনুলিপি করতে এবং কার্নেল আপডেটে উপযুক্ত স্থানে চালিত হবে। তারপরে এটিকে সম্পাদনযোগ্য করে তুলুন এবং চালনা করুন:

    sudo chmod +x /etc/kernel/postinst.d/zz-update-efistub
    sudo /etc/kernel/postinst.d/zz-update-efistub
    
  2. বুট এন্ট্রি যুক্ত করুন:

    sudo efibootmgr -c -d /dev/sdb -p 1 -L "Ubuntu (efistub)" -l /EFI/ubuntu/vmlinuz -u "root=/dev/sdb2 rw initrd=/EFI/ubuntu/initrd.img quiet splash"
    

    আপনার EFI সিস্টেম পার্টিশনটি কোথায় রয়েছে তার উপর নির্ভর করে যুক্তিগুলি -dএবং -pযুক্তিগুলি পরিবর্তন করতে ভুলবেন না । আমার ক্ষেত্রে এটি / dev / sdb1, তবে এটি আপনার পক্ষে পৃথক হতে পারে। আপনাকে সম্ভবত root=কার্নেল সেমিডলাইনের মানটি আপনার মূল বিভাজনে পরিবর্তন করতে হবে ।

    ( -Lপ্যারামিটার পরিবর্তন করে আপনি নিজের লেবেলটিকে যে কোনও কিছুতে পরিবর্তন করতে পারেন ))

    আপনি সবে যুক্ত বুট এন্ট্রি ডিফল্ট এন্ট্রি হয়ে যাবে। এবং এটি কার্নেল আপডেটের পরে ভাঙবে না, যেহেতু হুক নিশ্চিত করবে vmlinuzএবং initrd.imgসর্বদা আপডেট থাকবে।


আমার এইচপি ল্যাপটপটিতে যখন এটি চেষ্টা করা হয় তখন এটি নিরাপদ বুট দিয়ে কাজ করার
কোনও উপায়ই

দেখে মনে হচ্ছে আপনাকে প্রথমে কার্নেলটিতে স্বাক্ষর করতে ক্রিপ্টবুট এবং কিছু সরঞ্জাম ব্যবহার করতে হবে । বিশেষত আপনি যদি আর্চ ব্যবহার করছেন না (যেমন কোনও ব্যবহারের জন্য প্রস্তুত সরঞ্জাম নেই) তবে এটি কেবলমাত্র নিরাপদ বুটটি অক্ষম করব।
লায়ো লাম

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