যা ঘটছে তা হ'ল আপনি "অপ্রচলিত" উপায়ে লিনাক্স বুট করার চেষ্টা করছেন। সেই initrd
স্থানেই একটি র্যামডিস্ক একটি সংক্ষেপিত সিপিও আর্কাইভের বিপরীতে র্যামফসে কর্নেল দ্বারা প্যাকবিহীন এবং শেষ ডিভাইসে স্যুইচ করার পুরানো উপায় সহ।
এই মোডে, কার্নেল ডিস্ক.আইএমগকে একটি র্যামডিস্ক হিসাবে রুট ফাইল সিস্টেম হিসাবে মাউন্ট করে এবং তারপরে /linuxrc
সেখানে চালায় । আপনার ক্ষেত্রে সম্ভবত এটির কোনও ফাইল নেই। যখন /linuxrc
(যা আসল রুট ফাইল সিস্টেমের জন্য ব্লক ডিভাইসটি আনার জন্য যা কিছু করা প্রয়োজন বলে মনে করা হয়) বেরিয়ে যায়, তখন কার্নেলটি আসল রুট ফাইল সিস্টেমকে মাউন্ট করে।
উপরের বার্তাগুলি দেখায় যে এটি র্যাম ডিস্কটি সফলভাবে মাউন্ট করেছে (1,0: 1 এর জন্য ram
, তাই /dev/ram0
) তবে আসল রুট ফাইল সিস্টেম / ডিভ / এসডিএ নয় (8,1: 8 হ'ল sd
, 1 হ'ল a1
)। সম্ভবত আপনি যে কোনও কার্নেল কমান্ড লাইন ( -append
) নির্দিষ্ট করেন নি , এটি /dev/sda1
কার্নেল সংকলনের সময় বা ব্যবহারের সময় পাস হওয়া CONFIG_CMDline থেকে এসেছে rdev
।
যদি আপনার ডিস্ক.আইএমজি মানে একটি ছোট লিনাক্স ডিস্ট্রিবিউশন /sbin/init
... এর মূল ফাইল সিস্টেম থাকে ... তবে আপনি সম্ভবত এটির পরিবর্তে এটি লিখতে চান:
kvm -kernel kernel.img -initrd disk.img -append 'root=/dev/ram0`
তারপরে, কার্নেলটি রাম ডিস্কটিকে আসল রুট ফাইল সিস্টেম হিসাবে বিবেচনা করবে (যদিও আপনি এখনও pivot_root
অন্যটিতে যেতে পারেন)।
কার্নেল বার্তাগুলি আরও সহজে দেখতে পাওয়ার জন্য, আমি সিরিয়াল আউটপুট ব্যবহার করার পরামর্শ দেব:
kvm -kernel kernel.img -initrd disk.img -nographic -append "root=/dev/ram0 console=ttyS0"
বিকল্প হিসাবে আপনি একটি র্যামডিস্কের পরিবর্তে একটি ডিএম র্যামফ ব্যবহার করতে পারেন:
mkdir -p RAMFS/{bin,dev}
cd RAMFS/bin
cp /bin/busybox .
"$PWD/busybox" --install .
cd ..
cp -a /dev/{null,tty,zero,console} dev
printf '%s\n' "#! /bin/sh" "exec /bin/sh" > init
chmod +x init
find . | cpio -oHnewc | gzip > ../initramfs.gz
cd ..
kvm -kernel kernel.img -initrd initramfs.gz
( busybox
এটি স্ট্যাটিকালি লিঙ্কযুক্ত সংস্করণ হিসাবে প্রদান করা হয়েছে) এবং আপনি সেই কার্নেলের মধ্যে একটি শেল এবং অন্যান্য ব্যস্তবক্সের ইউটিলিটি পাবেন get
নোট করুন যে কার্নেলটি এখন সেই মোডের /init
বিপরীতে /linuxrc
বা তার বিপরীতে চলে /sbin/init
।