ঠিক আছে, তাই, মূলত, আমি জেন্টুকে ডাব্লুউবিআইয়ের মতো পদ্ধতিতে বুট করার চেষ্টা করছি; আমার এক্সট্র-ফর্ম্যাটযুক্ত লুপব্যাক ফাইলটিতে একটি ইনস্টলেশন রয়েছে, উইন্ডোজ বুটলোডারের অধীনে ইনস্টল করা বিআরজি এবং বুটিংয়ের জন্য উপলব্ধ কার্নেল / ইনিশ্রামফ রয়েছে। বুটিংয়ে এখনও কিছু সমস্যা রয়েছে (যাদের আমি মনে করি যে আমি কাজ করতে পারি, সেগুলি বেশিরভাগ প্রোগ্রামগুলির সাথে নিজেরাই ছোট সমস্যার কারণে হয়) তবে আমার কাছে প্রাথমিক ধারণাটি নীচে রয়েছে:
- ব্যস্তবক্স সেট আপ করুন এবং এমডেভির সাথে ডিভাইসগুলি পান
- কমান্ড লাইন বিকল্পগুলি পার্স করুন, প্রকৃত রুট বা লুপ রুটের জন্য জিজ্ঞাসা করছেন কিনা তা নির্ধারণ করুন
- যদি আসল রুট হয় তবে এটিকে মাউন্ট করুন
/root
এবং রুটটি স্যুইচ করুন, কার্যকর করুন/sbin/init
। - লুপ রুট হলে মাউন্ট হোস্ট পার্টিশনটি চালু করুন
/host
। - মাউন্ট লুপব্যাক (
/host/${LOOP}
) চালু/root
- হোস্টের মাউন্টপয়েন্টটি সরান (ব্যস্তবক্সের
mount -o move /host /root/host
জন্য) - রুটে স্যুইচ করুন
/root
এবং কার্যকর করুন/sbin/init
আমি init
এখানে স্ক্রিপ্ট পেয়েছি :
#!/bin/sh
# Rescue shell in case of error.
rescue_shell() {
echo "Something went wrong. Dropping you to a shell."
exec /bin/sh
}
parse_opt() {
case "$1" in
*\=*)
echo "$1" | cut -d= -f2-
;;
esac
}
# Set up BusyBox...
busybox --install -s
# Mount the /proc and /sys filesystems.
mount -t proc none /proc
mount -t sysfs none /sys
# Populate /dev
echo ":: Populating /dev..."
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
# Get command line options...
for x in ${CMDLINE}
do
case "${x}" in
root\=*)
ROOT=`parse_opt "${x}"`
;;
# Loadloop
loop\=*)
LOOP=`parse_opt "${x}"`
;;
ntfsroot)
NTFSROOT=1
;;
esac
done
if [ "${NTFSROOT}" != 1 ]
then
# Mount the root filesystem, plain and simple.
echo ":: Mounting real root..."
mount -o ro "${ROOT}" /mnt/root || rescue_shell
else
# Load up an NTFS-based root.
echo ":: NTFS Root mount requested. Mounting..."
ntfs-3g "${ROOT}" /host
if [ -f "/host/${LOOP}" ]
then
mount -o loop,ro "/host/${LOOP}" /root || rescue_shell
echo ":: Mounted. Moving host..."
mount -o move /host /root/host || rescue_shell
echo ":: Mounted."
else
"!! ERROR: Invalid/nonexistant loop given!"
rescue_shell
fi
fi
# Clean up.
umount /proc
umount /sys
# Boot the real thing.
echo ":: Switching to root and calling init..."
exec switch_root /root /sbin/init
আসলে কিছুই জটিল নয়। এনটিএফএস-থ্রি স্পষ্টতই ব্যস্তবক্স বাস্তবায়ন mount
এবং স্টাফগুলির সাথে একমত নয় (এটি কোনও কারণে প্যারামিটার যুক্ত করে, এবং ntfs-3g
ক্রেপস আউট করে), সুতরাং আমি কেবল coreutils
বাস্তবায়ন বা কোনও কিছু অনুলিপি করার বিষয়টি বিবেচনা করছি । এটি, এবং লুপব্যাক পার্টিশনগুলি মাউন্ট করার জন্য আমার কী প্রয়োজন তা পরীক্ষা করা দরকার (যখন আমি নিজে লুপব্যাকটি মাউন্ট করার চেষ্টা করি তখন এটি "ফাইল খুঁজে পাওয়া যায় নি" এর মতো একটি ত্রুটি দেয়)। তবুও, আমি মনে করি এগুলি আমার নিজের থেকে বের করার পক্ষে যথেষ্ট সহজ।
যাইহোক, আমি যা সম্পর্কে ধরণের ভাবছি তা হ'ল শাটডাউন। একবার switch_root
সম্পূর্ণ হয়ে গেলে , সিস্টেমটি একটি /
লুপব্যাক-মাউন্ট করা ফাইল এবং /dev/sda2
(এটি একটি উইন্ডোজ 7 ইনস্টল) চালু থাকবে /host
। এখন, আনমাউন্ট করার কোনও উপায় নেই /host
, এটি ব্যবহৃত হিসাবে। যাইহোক, /
রুটে একটি উপ-ডিরেক্টরিতে মাউন্ট করা ফাইল সিস্টেম থাকা অবস্থায় কেউ আনমাউন্ট করতে পারে না । ডাব্লুউবি-ভিত্তিক উবুন্টু ইনস্টলেশনগুলির অবশ্যই একই দ্বিধাদ্বন্দ্বের মুখোমুখি হতে হবে। কীভাবে কেউ এই বিষয়টিকে কাটিয়ে উঠতে পারে? এটি একটি মুরগি এবং ডিমের সমস্যা এবং এটি আমাকে সত্যিই বিরক্ত করে।
আমি একটি বুট স্ক্রিপ্টের লাইন ধরে এমন কিছু বিবেচনা করছিলাম যা একটি মৌলিক, মৌলিক মূলের জন্য (ইনি্রামফের মতো, তবে অন্যভাবে) ফাইলগুলির অস্থায়ী ক্যাশে ধারণ করে। এটি সর্বশেষে সঞ্চালিত হবে, কোনও টিএমপিএফ-তে ফাইলগুলি অনুলিপি করে, মূলটিকে পিভোটিং করা, সম্ভবত এটির সাহায্যে ডিগ্রিফের মূল বিন্যাসে ফিরে আসবে। আমি মূলত এটি করছিলাম:
- একটি মাউন্ট
tmpfs
এ/tmp/shutdown/
বা কিছু। - শাটডাউন ফাইলগুলি অনুলিপি করুন (সম্ভবত
/usr/share/shutdown/
বা কিছু) pivot_root
/loop
tmpfs এ রুটটি এবং ক্রুটটি স্থানান্তর করতে ।mount --move
/loop/host
থেকে/host
- আনমাউন্ট
/loop
- আনমাউন্ট
/host
- পরিষ্কারভাবে বন্ধ করুন, যেহেতু সমস্ত পার্টিশন আনমাউন্ট করা হয়নি।
যাইহোক, আমি জেন্টুকে এত বেশি কখনও পরিবর্তন করিনি। ইনসক্রিপ্ট দিয়ে এটি কি সম্ভব? আমি চাই না যে এটি বেসলেআউট বা যে-ই-বিল্ডের যেকোন আপডেটের দ্বারা আপডেট হওয়া উচিত, যেহেতু এটি আমাকে ভাঙ্গা শাটডাউন কার্যকারিতা দিয়ে চলে যাবে (এবং আমি সত্যিই হোস্ট পার্টিশনটি হারাতে চাই না)। জেন্টুর ইনিশ সিস্টেম এমনকি এর মতো কিছু সমর্থন করে কিনা তাও জানার সমস্যা রয়েছে। এটি যথেষ্ট পরিষ্কার বলে মনে হচ্ছে (যদি কিছুটা হ্যাকিশ হয়) তবে আমি এটি সম্পর্কে খুব বেশি নিশ্চিত নই। আমি জানতে চাই যে উবুন্টু এটি অন্যভাবে করে কিনা, এবং যদি তা হয় তবে কীভাবে? কোন পরামর্শ সহায়ক হবে।
সম্পাদনা :
আমি বুট কাজ পেয়েছি। coreutils
সংস্করণটি ব্যবহার করার mount
মতো বিষয় যেমন আমি ভেবেছিলাম। যদিও শাটডাউন করার সময় আমার প্রত্যাশা ত্রুটিগুলি রয়েছে, যদিও; লুপব্যাক এফএস দিয়ে ফাইল সিস্টেম আনমাউন্ট করতে অক্ষম হওয়ার সাথে ত্রুটি এবং জার্নিংয়ের ত্রুটি। কীভাবে এখনও এটি ঠিক করা যায় তা আমার কোনও ধারণা নেই।
সম্পাদনা 2:
ঠিক আছে, ভাল, আমি কিছু যে কিছু ছিল ... কাজের বাছাই। আমি মূলত সম্পাদনা করেছি /etc/init.d/{halt.sh,reboot.sh,shutdown.sh}
এবং নিম্নলিখিতগুলি করেছি:
- যোগ করা হয়েছে
/host
থেকেRC_NO_UMOUNTS
পরিবর্তনশীল, যা জার্নালিং ত্রুটি সম্পর্কে আপ বিষম থেকে EXT4 মডিউল স্টপ - যোগ করা হয়েছে
-o `pidof ntfs-3g`
opts করার জন্যkillall5
(নিশ্চিত করুন যে এটি মেরে ফেলেনি NTFS-3G করতে) - শাটডাউন.শ এবং রিস্টার্ট.শকে সংশোধন করে / বুট / শাটডাউনফসে একটি টিএমপিএস মাউন্ট করতে এবং সেখানে কয়েকটি থ্রাইমার্ফ ফাইলের অনুলিপি করতে, মূলটিকে পিভট করুন, তারপরে ক্রোট করুন / হয় / ডাউন বা / পুনরায় আরম্ভ করুন।
- এই দুটি স্ক্রিপ্টগুলি মূলত কিছু দ্রুত এবং নোংরা / প্রোক এবং / সিস্ট সেটআপ করে, / রুট / হোস্টকে / হোস্টে সরিয়ে দেয়, তারপরে অলস আনমাউন্টিং করে। আমি কাজ করার জন্য নিয়মিত আনমাউন্টগুলি পেলাম না (ফাইল সিস্টেমটি এখনও ব্যস্ত থাকবে), তবে কমপক্ষে এটি ফাইল সিস্টেমগুলিকে পুরোপুরি বমি থেকে বিরত করবে বলে মনে হচ্ছে।
এই সমাধানটি এখনও সাব্পার, সুতরাং কোনও সাহায্যের প্রশংসা করা হবে।