.Img ফাইলটিতে গ্রাব কীভাবে ইনস্টল করবেন?


26

আমি নিম্নলিখিতগুলি করেছেন:

  1. ডিডি সহ একটি খালি .img ফাইল তৈরি করেছে
  2. এটি হারানোর সাথে / dev / loop0 এর সাথে যুক্ত করে
  3. fdisk দিয়ে এতে একটি পার্টিশন তৈরি করেছে
  4. mke2fs এর সাথে এ জাতীয় পার্টিশন ফর্ম্যাট করা হয়েছে
  5. এই পার্টিশনে একটি কাস্টম জিএনইউ / লিনাক্স সিস্টেম অনুলিপি করেছেন

এখন আমি তার এমবিআর এবং / বুট ডিরেক্টরিতে গ্রাব ইনস্টল করে .img ফাইলটিকে বুটেবল করতে চাই। আমার লক্ষ্য qimu দিয়ে .img ফাইলটি লোড করা। গ্রাব লিগ্যাসির পরিবর্তে গ্রাব 2 ব্যবহার করা ভাল better

ধন্যবাদ।


উত্তর:


24

এটি গ্রুব-পিসি সংস্করণ 1.98 + 20100804-5ubuntu3 (ম্যাভেরিক মেরক্যাট) সহ।

গ্রুব 2 ইনস্টলারটি লুপব্যাক ডিভাইসগুলিতে ইনস্টল করতে পারে তবে আপনি ডিভাইস ম্যাপার ব্যবহার করে মাউন্ট করলে এটি বিভ্রান্ত হয়ে পড়বে এবং বিশ্বাস করবে যে আপনার কোনও এলভিএম স্কিম রয়েছে, এটি অনুপস্থিত বিমূর্ত সম্পর্কে অভিযোগের সাথে রহস্যজনকভাবে ব্যর্থ হয়েছিলেন।

পরিবর্তে, আপনাকে নিজেরাই পার্টিশনের জন্য লুপব্যাক ডিভাইসটি সেটআপ করা উচিত, "/ dev / লুপ [0-9]" এর সাথে প্যাটার্নের সাথে অবশ্যই মেলে, অর্থাত্ কোনও পার্টিশন ডিজাইনার ছাড়াই:

kpartx -v -a /dev/loop0
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 /mnt

(মনে রাখবেন যে আপনি যদি এই ভলিউমটি চালানোর জন্য গ্রুব-এমকনফিগ / আপডেট-গ্রুব চান তবে পার্টিশন লুপব্যাকটি অবশ্যই ডিভের অধীনে ডিস্ক লুপব্যাকের সাথে সংযুক্ত থাকতে হবে এবং সরাসরি চিত্র ফাইলে না )।

যেহেতু আপনি চিত্রটি বিভাজনের জন্য fdisk ব্যবহার করেছেন, আপনার একটি এমএসডস- স্টাইল পার্টিশন টেবিল (ওরফে লেবেল) রয়েছে, এবং একটি বিআইওএস ব্যবহার করে বুট করুন। এমবিআর তে মঞ্চ 1 / boot.img লাগানোর পাশাপাশি, মঞ্চ 1.5 / কোর.আইএমজি একটিতে রাখা হবে স্থান (!) এ এমবেডিং এবং এর জন্য অবশ্যই স্থান থাকতে হবে।

কৌশলটি এখন গ্রুব 2 ইনস্টলারটিকে একটি ডিভাইস মানচিত্রের মাধ্যমে বলতে হবে যে কীভাবে আপনার লুপব্যাক সেটআপটি ভার্চুয়াল মেশিনের BIOS ড্রাইভে মানচিত্র করবে। (গ্রুব 1 উত্তরাধিকারে এটি সরাসরি শেলের মধ্যে সম্পন্ন হয়েছিল)। আপনি সম্ভবত এই চিত্রটি প্রথম ডিস্ক হিসাবে বুট করার পরিকল্পনা করছেন, সুতরাং আমার ধারণা উপযুক্ত ম্যাপিংটি হ'ল:

mkdir -p /mnt/boot/grub
cat > /mnt/boot/grub/device.map <<EOF
(hd0)   /dev/loop0
(hd0,1) /dev/loop1
EOF

আমি এখানে গেস্ট ডিস্ক চিত্রের অভ্যন্তরে ডিভাইসটির মানচিত্র রেখেছি, যাতে আপনি বুট কনফিগারেশন ফাইলটি grub.cfg তৈরি করতে পারেন:

mount --bind /dev /mnt/dev
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg

(সাবধান! গ্রাব-পিসি প্যাকেজ পরবর্তী পোস্টার একটি প্রোব চালাবে যা ডিভাইসের মানচিত্র (!) ওভাররাইট করে, তাই আপনাকে এটি লিখতে হবে পরবর্তী পোস্টারটি ইনস্টলেশনের পরে এবং নিজেই গ্রুব-এমকনফিগ / আপডেট-গ্রাব চালাতে হবে)।

গেস্ট ইনস্টলেশন থেকে ইশারা করে হোস্ট থেকে ইনস্টলারটি চালান :

grub-install --no-floppy --grub-mkdevicemap=/mnt/boot/grub/device.map --root-directory=/mnt /dev/loop0

অবশেষে, আপনার ইমেজে কিউমু শুরু করার আগে এখানে সেট আপ করা সমস্ত কিছু আনমাউন্ট করুন:

umount /mnt/dev
umount /mnt
losetup -d /dev/loop1
kpartx -v -d /dev/loop0

কি দারুন! কেন আমি মাউন্ট-লুপেড, ক্রোয়েটেড ইমেজ ফাইলটি আপডেট-গ্রাব করতে পারি না তা বোঝার চেষ্টা করার সময় আমি কেবল আপনার উত্তরে গিয়েছিলাম। এটি আমার সমস্যার ক্ষেত্রে প্রয়োগ করতে পারে কিনা তা আমি দেখতে যাচ্ছি তবে এটি অবশ্যই একটি আকর্ষণীয় ট্র্যাক এবং আমার উত্সাহের পক্ষে খুব মূল্যবান। ধন্যবাদ!
ফিলোফেল

1
উত্তম উত্তর, দুর্ভাগ্যক্রমে chroot /mnt grub-mkconfig -o /boot/grub/grub.cfgব্যর্থ হয়েছে কারণ grub-mkconfig.img ডিস্কে সেই বিষয়ে কোনও বা বাইনারি নেই এবং /mntইতিমধ্যে মাউন্ট করা হয়েছে। আপনি যদি ধাপে ধাপে ধাপে ধাপে সমস্ত বিবরণ / কমান্ড লিখেন তবে দুর্দান্ত হবে।
ফ্ল্যাভিয়াস

@ রোলকাউ: এই দুর্দান্ত ডকুমেন্টেশনের জন্য আপনাকে ধন্যবাদ! একসাথে নীচে টো এর সংশোধনগুলির সাথে এটি ক্রোটেড পরিবেশের মধ্যে থেকে এম্বেড করার সময় গ্রাবের সাথে আমার বহু বছরের সমস্যাগুলি সমাধান হয়েছিল।
স্পার্কি

1
losetup -Pএকটি একক পার্টিশন মাউন্ট করার আরেকটি ভাল উপায়: স্ট্যাকওভারফ্লো.com
সিওরো সান্তিলি

আমি পাচ্ছি: /usr/sbin/grub-probe: warning: the device.map entry 'hd0,1' is invalid. Ignoring it. Please correct or delete your device.map.সুতরাং এই উত্তরটি অকেজো।
কলমারিয়াস

11

এই ব্যাখ্যার জন্য অনেক ধন্যবাদ। আমি আপনার সমাধানটি আমার নিজের লিপিগুলিতে নিম্নলিখিত সংশোধনগুলির সাথে সংহত করেছি (আপনার স্বরলিপি / ভেরিয়েবলগুলিতে অনুবাদ করা):

modprobe dm_mod
kpartx -va /root/rootfs.img # *.img is setup elsewhere
# normally you now would mount /dev/loop0p1 directly. BUT
# grub specialists didn't manage to work with loop partitions other than /dev/loop[0-9]
losetup -v -f --show /dev/mapper/loop0p1
mount /dev/loop1 /mnt
mkdir -p /mnt/boot/grub

# change into chrooted environment. all remaining work will be done from here. this differs from the howto above.
LANG=C chroot /mnt /bin/bash
set -o vi
mount -t sysfs sysfs /sys
mount -t proc  proc  /proc
# avoid grub asking questions
cat << ! | debconf-set-selections -v
grub2   grub2/linux_cmdline                select   
grub2   grub2/linux_cmdline_default        select   
grub-pc grub-pc/install_devices_empty      select yes
grub-pc grub-pc/install_devices            select   
!
apt-get -y install grub-pc
# don't setup device.map prior to this point. It will be overwritten by grub-pc install
#corrected the /mnt/boot/grub/device.map to /boot/grub/device.map
cat > /boot/grub/device.map << !
(hd0)   /dev/loop0
(hd0,1) /dev/loop1
!
# install here to fill /boot/grub for grub-mkconfig (update-grub)
grub-install /dev/loop0
# generate /boot/grub/grub.cfg
update-grub

এটি কমপক্ষে ডেবিয়ান স্কিজে কাজ করে। নির্ভুলতার জন্য '/boot/grub/grub.cfg' দেখুন।


1
করা উচিত cat > /mnt/boot/grub/device.mapchrooted পরিবেশে সম্পন্ন করা? যদি তাই হয়, পথটি হওয়া উচিত /boot/grub/device.map
cbliard

0

কীউএমইউ ডিস্ক চিত্রটিতে GRUB ম্যানুয়ালি ইনস্টল করা এবং বুট করা যায় সে সম্পর্কে এখানে একটি দ্রুত পদক্ষেপ walk আমি এটি গ্রুব.এফ.জি. এর সাথে পরবর্তী পদক্ষেপে নিয়ে যাইনি, তবে আমি ধরে নিই যে এই মূল সেটআপটি শেষ হয়ে গেলে এটি বেশ সোজা।

অনুমিতি:

  • 'গ্রাব-ইনস্টল - রূপান্তর' হ'ল "গ্রুব-ইনস্টল (GRUB) ২.০২ ~ বিটা ২-৩6উবন্টু ৩.২"
  • 'qemu-system-x86_64 --version' হ'ল "কিউইএমইউ এমুলেটর সংস্করণ 2.5.0 (দেবিয়ান 1: 2.5 + dfsg-5ubuntu10.6), কপিরাইট (সি) 2003-2008 ফ্যাব্রিস বেলার্ড"
  • বর্তমান ডিরেক্টরিতে "ডিস্ক 1" নামে একটি ডিস্ক চিত্র
  • / dev / loop0 এর "ডিস্ক্লেবেল টাইপ: ডস" রয়েছে (যেমন fdisk সহ)
  • / dev / loop0p1 একটি বুটযোগ্য পার্টিশন, ইতিমধ্যে ext4 দিয়ে ফর্ম্যাট করা হয়েছে

গ্রুম মেনুতে আমি কীমুকে বুট করেছিলাম:

    # losetup -fP disk1
    # ls /dev/loop0*
    /dev/loop0  /dev/loop0p1  /dev/loop0p2  /dev/loop0p3
    # mount /dev/loop0p1 /mnt
    # cat > loop0device.map <<EOF
    (hd0) /dev/loop0
    EOF
    # grub-install --no-floppy --grub-mkdevicemap=loop0device.map \
    --modules="part_msdos" --boot-directory=/mnt /dev/loop0 -v
    # umount /mnt
    # losetup -d /dev/loop0
    # qemu-system-x86_64 -m 512 -curses -hda disk1 -enable-kvm

তারপরে GRUB শেলটি উপস্থিত হবে:

                        GNU GRUB  version 2.02~beta2-36ubuntu3.2

       Minimal BASH-like line editing is supported. For the first word, TAB
       lists possible command completions. Anywhere else TAB lists possible
       device or file completions.


    grub> ls
    (hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1) (fd0)
    grub>

আপনি যদি কার্নেল এবং র্যাম ডিস্কটি / dev / loop0p1 তে অনুলিপি করে থাকেন তবে আপনি এটি বুট করতে পারেন:

    grub> linux (hd0,msdos1)/vmlinuz
    grub> initrd (hd0,msdos1)/initrd
    grub> boot

এবং এখানে ডিফল্ট লিনাক্স শেল রয়েছে (কারণ এই ক্ষেত্রে কোনও / sbin / init উপলব্ধ ছিল)

    BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash)
    Enter 'help' for a list of built-in commands.

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