क्या हो रहा है कि आप "अप्रचलित" तरीके से लिनक्स को बूट करने की कोशिश कर रहे हैं। यह वह जगह है जहां initrd
एक रैमडिस्क एक संपीड़ित cpio संग्रह के विपरीत है जो कर्म्फ द्वारा एक रैमफ्स में अनपैक्ड है, और अंतिम डिवाइस पर स्विच करने के लिए पुराने तरीके के साथ है।
उस मोड में, कर्नेल डिस्क की नकल करता है। एक रैमडिस्क के रूप में रूट फाइल सिस्टम के रूप में और फिर /linuxrc
वहाँ निष्पादित होता है। आपके मामले में सबसे अधिक संभावना है, ऐसी कोई फ़ाइल नहीं है। जब /linuxrc
(जो कि वास्तविक रूट फाइलसिस्टम के लिए ब्लॉक डिवाइस को लाने के लिए जो कुछ भी आवश्यक हो) बाहर निकलता है, तो कर्नेल वास्तविक रूट फाइल सिस्टम को मापता है।
ऊपर दिए गए संदेश बताते हैं कि यह रैम डिस्क को सफलतापूर्वक माउंट करता है (1,0: 1 के लिए है ram
, इसलिए /dev/ram0
) लेकिन वास्तविक रूट फाइल सिस्टम / देव / sda1 (8,1: 8 है sd
, 1 है a1
) नहीं। मुमकिन है क्योंकि आपने कर्नेल कमांड लाइन ( -append
) निर्दिष्ट नहीं की थी , जो कि /dev/sda1
कॉनफ़ाइल संकलन के समय या उपयोग किए गए CONFIG_CMDLINE से आती है rdev
।
यदि आपका disk.img एक छोटे लिनक्स वितरण के साथ कहने के लिए रूट फाइल सिस्टम को समाहित करने के लिए है /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"
एक विकल्प के रूप में आप एक init ramdisk के बजाय एक init ramfs का उपयोग कर सकते हैं:
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
स्टैटिकली लिंक्ड वर्ज़न है) और आपको उस कर्नेल में एक शेल और अन्य बिजीबॉक्स यूटिलिटीज़ मिलेंगी)।
ध्यान दें कि कर्नेल अब उस मोड में या उसके /init
विपरीत चलता है।/linuxrc
/sbin/init