আমি কেন একটি ইউইউডি দিয়ে আমার রুট এফএস নির্দিষ্ট করতে পারি না?


29

আমার GRUB 2 কনফিগারেশনে এটির সাথে আমার সিস্টেম বুট হয়ে গেছে:

linux   /bzImage root=/dev/sda2 init=/usr/lib/systemd/systemd ro

তবে যদি আমি /dev/sda2সংশ্লিষ্ট ইউআইডি দিয়ে প্রতিস্থাপন করি :

linux   /bzImage root=UUID=666c2eee-193d-42db-a490-4c444342bd4e init=/usr/lib/systemd/systemd ro

তারপরে এটি বুটের সময় ব্যর্থ হয়:

kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0)

ইউআইডি সঠিক বলে মনে হচ্ছে:

# blkid
/dev/sda1: UUID="97ac3744-39de-4d6d-9a81-e3a3ea08a8bb" TYPE="ext2" 
/dev/sda2: UUID="666c2eee-193d-42db-a490-4c444342bd4e" TYPE="ext4" 

কেন এটি কাজ করে না? এটি কি কারণ আমি কোনও ইনি্রামফ ব্যবহার করছি না?

এটি x86_64 কার্নেল 3.10.7 সহ জেন্টু লিনাক্স। আমি একটি এমবিআর পার্টিশন টেবিল চালু sdaএবং একটি জিআইডি পার্টিশন টেবিল ব্যবহার করছি sdb


unknown-block(0,0)আমার কাছে গ্রাব ডিভাইসের মতো দেখাচ্ছে। আমার অনুমান যে GRUB কোনও কারণে সেই ইউআইডি ব্যবহার করতে পারে না।
strugee

@ মাসজি, আমি মনে করি না GRUB কার্নেল কমান্ড লাইনটি মোটেও ব্যাখ্যা করার চেষ্টা করে। (গ্রাব থেকে কার্নেল লোড হচ্ছে sda1আমি কনফিগ সেই অংশে প্রদর্শন করা হয়নি।।)
cjm

আমি রাজি হতে ঝোঁক। এটি অত্যন্ত অদ্ভুত, যদিও ইউনিক্স ডিভাইসের পরিবর্তে ডিভাইসটি GRUB ডিভাইসের মতো দেখাচ্ছে।
strugee

@ গিলস, প্রশ্নটি গ্রুব সম্পর্কে নয়। এটি কেবলমাত্র আমি যে বুটলোডারটি ব্যবহার করছি তা হ'ল। এটি একটি লিনাক্স কার্নেলের প্রশ্ন।
সিজেএম

এটি কার্নেল সম্পর্কে কোনও প্রশ্ন নয় - এটি সম্পর্কে একটি প্রশ্ন init
মাইকজার্ভ

উত্তর:


22

UUIDকার্নেলের হার্ড ড্রাইভ সনাক্ত করার একমাত্র নির্ভরযোগ্য উপায় কেবলমাত্র স্পষ্ট করে বলা। দুটি প্রকার রয়েছে: ইউআইডি, যা ফাইল সিস্টেমে সঞ্চিত থাকে এবং বুট-সময়ে কার্নেলের কাছে পাওয়া যায় না, এবং পার্টুউইউড, যা পার্টিশন টেবিলের মধ্যে সংরক্ষণ করা হয় এবং বুট সময়ে পাওয়া যায়। সুতরাং আপনি ব্যবহার করতে হবে

root=PARTUUID=SSSSSSSS-PP

যেমন /dev/sd??ডিভাইসের সাথে পরিবর্তন করতে পারেন প্লাগ / সংযুক্ত।

করতে ভুলবেন না পুঁজিতে হেক্সাডেসিমেল সংখ্যাকে SSSSSSSS-PPআপনি থেকে পাওয়া blkid!

ব্যবহার করা আরও সহজ

root=LABEL=
root=UUID=

initramfsএই শনাক্তকারীদের কেবল এটির সাথেই কাজ করুন ।

সুতরাং, আপনি যদি একটি খালি ব্যবহার করেন না initramfs, আপনি তিনটি থাকতে পারে! একটি খালি সঙ্গে initramfs, আপনি কেবল আছে PARTUUID


বোঝাবেন কে তখন বুট = -আরগারমেন্ট ব্যবহার করছেন? আমি এই লাইনটি কেবল একটি আর্চলিনাকর্মের ইনস্টলেশনের জন্য ব্যবহার করেছি যার আরআরডি নেই, এবং যেখানে আমি বুট = LABEL বা বুট = ইউআইডি ব্যবহার করতে পারি না।
ইনিটি

1
আপনি ঠিক বলেছেন - আমি বুটটি রুটে সংশোধন করেছি, দুঃখিত! আশা করি এটি এখন আরও সার্থক হয়ে উঠবে।
ইনিটি

1
আমার বুঝতে (আর্চলিনাক্সর্মের ফোরামে একদিনের পরে) এটি হ'ল আর্চলিনাক্সার্মে কোনও আরআরডিড (বা ইনি্রামাফস নেই , তবে কার্নেল.আর / ডক / ডকুমেন্টেশন / চ্যানেল- পরিমাপ.টেক্সট এটিকে ইআরআরড বলে)। উবুন্টু এবং এই জাতীয়টিতে আমি আরআরআরডিকে একটি পয়েন্টার দিই, তবে (আমার বোঝার মতো) আর্চলিনাক্সর্মের উপরে নয়।
অস্তিতি

1
আর্চলিনাক্সর্ম আলোচনা নন ইআরআরডি সম্পর্কে: আর্চলিনাক্সর্ম.আর.ফর্ম
ভিউটোপিক.পিপি ?

1
এই লিঙ্কটি চেষ্টা করুন। এবং এই এক। এবং সম্ভবত এই এক। initramfs -র হয় না initramfs -র ইমেজ - যা সাধারণত একটি সংকুচিত সংরক্ষণাগার একটি ধারণকারী হয় cpioকার্নেল unpacks যে সংরক্ষণাগার /বুটে। initramfs একটি ফাইল সিস্টেম - এটি সর্বদা প্রথম /মাউন্ট হয় এবং যেখান থেকে কার্নেল কল করে init। আপনি কার্নেলের মধ্যে সামগ্রীগুলি সঙ্কলন করতে পারেন বা বুটে আনপ্যাক করতে পারেন - এটি দুটি বিকল্প।
মাইকজার্ভ

16

ইউইউডি থেকে বুট করতে আপনাকে যে প্যারামিটারটি দিতে হবে তা হ'ল PARTUUID। সুতরাং এটি হওয়া উচিত root=PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e

ডকুমেন্টেশন ব্যাখ্যা করে কেন এটি নিয়ে ফিরে আসছে unknown-block(0,0):

কার্নেল-পরামিতি। txt :

    রুট = [কেএনএল] রুট ফাইল সিস্টেম
            Init / do_mounts.c এ নাম_ থেকে_দেব_ত মন্তব্য দেখুন।

init / do_mounts.c :

/ *
 * একটি নামকে ডিভাইস সংখ্যায় রূপান্তর করুন। আমরা নিম্নলিখিত রূপগুলি গ্রহণ করি:
 *
 * 1) হেক্সাডেসিমালে থাকা ডিভাইস নম্বরটি নিজেকে উপস্থাপন করে
 * 2) / dev / nfs রুট_এনএফএস (0xff) উপস্থাপন করে
 * 3) / dev / <ডিস্ক_নাম> ডিস্কের ডিভাইস সংখ্যাটি উপস্থাপন করে
 * 4) / dev / <ডিস্ক_নাম <<ডিসিমাল> ডিভাইস নম্বরটি উপস্থাপন করে
 পার্টিশনের * - ডিস্কের ডিভাইস সংখ্যা এবং পার্টিশন নম্বর
 * 5) / dev / <ডিস্ক_নাম> পি <ডিসিমাল> - উপরের মতই, সেই ফর্মটি
 পার্টিশনযুক্ত ডিস্কের ডিস্কের নামটি একটি অঙ্কে শেষ হয়ে গেলে * ব্যবহৃত হয়।
 * 6) পার্টউইউড = 00112233-4455-6677-8899 -এএবিবিসিসিডিডিইডিএফ প্রতিনিধিত্ব করছে
 পার্টিশনের টেবিলটি সরবরাহ করলে পার্টিশনের অনন্য আইডি।
 * ইউইউডি হয় হয় একটি ইএফআই / জিপিটি ইউআইডি হতে পারে, বা একটি এমএসডিওএসের উল্লেখ করতে পারে
 * এসএসএসএসএসএসএস-পিপি ফর্ম্যাট ব্যবহার করে পার্টিশন, যেখানে এসএসএসএসএসএসএস শূন্য-
 * 32-বিট "এনটি ডিস্ক স্বাক্ষর", এবং পিপি-র পূর্ণ হেক্স্স উপস্থাপনা
 * হল 1-ভিত্তিক পার্টিশন সংখ্যার শূন্য-ভরা হেক্স্স উপস্থাপনা।
 *)) পার্টউইউড = <UUID> / পার্টনরোফ = <ইন্ট> এর সাথে একটি পার্টিশন নির্বাচন করতে
 * একটি পরিচিত অনন্য আইডি সহ একটি পার্টিশন।
 *
 * যদি উপরের বিভাগগুলির মধ্যে নাম না পড়ে, আমরা ফিরে (0,0)।
 * block_class কিছু ডিস্কের নাম কিনা তা পরীক্ষা করতে ব্যবহৃত হয়। যদি ডিস্ক
 * নামটিতে স্ল্যাশ রয়েছে, ডিভাইসের নামটি তাদের সাথে প্রতিস্থাপন করেছে
 * ব্যাংস
 * /

শেষের বিটটি বলে যে এটি মান বুঝতে না পারলে এটি ফিরে আসে (0,0), সুতরাং আপনার ত্রুটি।


1
এটি কেবল আংশিকভাবে সঠিক। একটি পার্টিশন ইউআইইউড ফাইল সিস্টেমের ইউআইডি থেকে সম্পূর্ণ আলাদা, সুতরাং PARTUUID=666c2eee-193d-42db-a490-4c444342bd4eকাজ করে না। তবে, আমি ব্যবহার করতে সক্ষম হয়েছি PARTUUID=SSSSSSSS-02(যেখানে এসএসএসএসএসএসএসটি ত্রুটি বার্তার ঠিক আগে এনটি ডিস্ক স্বাক্ষর দেখানো হয়েছে)।
সিজেএম

6
তাই আমি অনুমান যে বাস্তব উত্তর যে কার্নেল সমর্থন করে না হয় root=UUIDশুধুমাত্র root=PARTUUID। আপনি যদি কোনও ফাইল সিস্টেম ইউইউডি ব্যবহার করতে চান তবে আমি অনুমান করি যে আপনার এমন একটি ডিআইআরএমফ দরকার যা ইউইউডি দ্বারা মাউন্টিং ফাইল সিস্টেমগুলি পরিচালনা করতে পারে।
সিজেএম

@ সিজেএম আমার grubবুটগুলির সাথে বেশ আনন্দের সাথে root=UUID
টেরডন

3
@ ইটারডন, আমি বাজি ধরব আপনার একটি ইআর্রামফ বা আরআরআরডিআরড আছে। (এটি পৃথক ফাইল না হয়ে আপনার কার্নেলের সাথে যুক্ত হতে পারে))
সিজেএম

4

এটি একটি 5 বছরের পুরানো থ্রেড। তবে এখনও এটি পুরোপুরি উত্তর দেওয়া হয়নি। একটি ছোট্ট উদাহরণ অনুপস্থিত। এটা এখানে:

এই উদাহরণে:

/dev/sda3 = /
/dev/sda2 = swap

... জিপিটি পার্টিশন ব্যবহার করা হচ্ছে। এমবিআর (ডস পার্টিশন) দিয়ে পার্টুয়েডগুলি ছোট হয় তবে পদ্ধতিটি একই ...

ব্লকিডের সাথে পার্টিউইউড পান:

blkid -s PARTUUID -o value /dev/sda3 # root
77fd7830-faa2-4e99-a48b-337ad9eded28
blkid -s PARTUUID -o value /dev/sda2 # swap
5b63167a-6fd2-4e72-948c-90832372956c

/boot/grub/grub.cfg:

search --no-floppy --part-uuid --set=root 77fd7830-faa2-4e99-a48b-337ad9eded28

menuentry "GNU/Linux, KERNEL 4.12.7-lfs-8.1" {
  linux /boot/vmlinuz-4.12.7-lfs-8.1 root=PARTUUID=77fd7830-faa2-4e99-a48b-337ad9eded28 net.ifnames=0 ipv6.disable=1 ro rootwait rootfstype=ext4
}

/ Etc / fstab ফাইলের /:

PARTUUID=77fd7830-faa2-4e99-a48b-337ad9eded28 / ext4 noatime,nodiratime,errors=remount-ro 0 1
PARTUUID=5b63167a-6fd2-4e72-948c-90832372956c swap swap pri=1 0 0

এটি lfs8.1 (কার্নেল 4.12.7) দিয়ে ওয়ার্কের কাছে পরিচিত, তবে আমি মনে করি এটি অন্যান্য কার্নেলের সাথেও কাজ করা উচিত (পুরানো এবং নতুন ...)

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