লিনাক্স কীভাবে পৃথক / বুট বিভাজন নিয়ে কাজ করে?


11

লিনাক্স কীভাবে পৃথক পৃথক বুট পার্টিশন ব্যবহার করে সে সম্পর্কে জানতে আগ্রহী। আমি আসলে এটি করতে আগ্রহী নই , তবে আমি জানতে চাই কীভাবে এটি হুডের নীচে কাজ করে।

একটি হার্ড ড্রাইভ বিবেচনা করুন sda, যার দুটি পার্টিশন রয়েছে sda1এবং sda2। ধরা যাক sda2এটি rootপার্টিশন /যা লিনাক্স ওএস ধারণ করে।

আমার বোঝাটি GRUB2হ'ল বুটলোডারটি মাউন্ট হয় /boot। ডিরেক্টরিটি যখন /bootপৃথক পার্টিশনে থাকে sda2, তবে /বাস্তবে মাউন্ট হওয়ার আগে এটি কীভাবে ঘটতে পারে ?

এক্ষেত্রে কীভাবে BIOS, মাস্টার বুট রেকর্ড এবং GRUB (বা ফাইলগুলি /boot) এর মধ্যে মিথস্ক্রিয়া সফলভাবে ঘটে? এটি কি এই যে প্রাথমিকভাবে প্রাথমিক পর্যায়ে থাকা ডেটাগুলি ফাইল সিস্টেমে /bootমাউন্ট করা হয় না /?

দ্রষ্টব্য: এই প্রশ্নটি মূল পার্টিশন মাউন্ট করার বিষয়ে আলোচনা করে তবে পৃথক বুট বিভাজন নিয়ে আলোচনা করে না।

উত্তর:


18

আপনার বুঝতে সমস্যা এখানে:

আমার বোঝাটি হ'ল বুটলোডার GRUB2, / বুটে মাউন্ট হয়।

GRUB বুটে "মাউন্ট" হয় না। GRUB- র করা হয় ইনস্টল করার /boot, এবং হয় লোড মাস্টার বুট রেকর্ড কোড থেকে। এখানে একটি এমবিআর / বিআইওএস (জিপিটি / ইউইএফআই নয়) দিয়ে একটি জিএনইউ / লিনাক্স বিতরণ ধরে ধরে আধুনিক বুট প্রক্রিয়াটির একটি সরলিকৃত সংক্ষিপ্ত বিবরণ রয়েছে:

  1. বিআইওএস লোড হয়।
  2. বিআইওএস মাষ্টার বুট রেকর্ডে থাকা কোডের ছোট্ট অংশটি লোড করে।
  3. মাস্টার বুট রেকর্ডের আকার, GRUB 440 বাইটে ফিট করে না। সুতরাং, লোড হওয়া কোডটি আসলে পার্টিশন টেবিলটিকে বিশ্লেষণ করে, পার্টিশনটি খুঁজে পায় /boot(যা আমি বিশ্বাস করি আপনি যখন মাস্টার বুট রেকর্ডে GRUB ইনস্টল করেন তখন নির্ধারিত হয়) এবং ফাইল সিস্টেমের তথ্য পার্স করে। এরপরে এটি স্টেজ 2 GRUB লোড করে। (সরলকরণ এখানে আসে))
  4. পর্যায় 2 GRUB GRUB কনফিগারেশন সহ প্রয়োজনীয় সমস্ত কিছু লোড করে, তারপরে একটি মেনু উপস্থাপন করে (বা ব্যবহারকারীর কনফিগারেশনের উপর নির্ভর করে)।
  5. একটি বুট ক্রম চয়ন করা হয়। এটি একটি সময়সীমা, ব্যবহারকারী দ্বারা মেনু এন্ট্রি নির্বাচন করে বা কমান্ড তালিকা বুট করার মাধ্যমে হতে পারে।
  6. বুট ক্রম চালানো শুরু হয় uting এটি বেশ কয়েকটি কাজ করতে পারে - উদাহরণস্বরূপ, কার্নেল লোড করা, অন্য বুটলোডারকে চেইনলোড করা - তবে ধরা যাক বুট ক্রমটি স্ট্যান্ডার্ড জিএনইউ / লিনাক্স।
  7. GRUB লিনাক্স কার্নেলটি লোড করে।
  8. GRUB প্রাথমিক ramdisk লোড করে ।
  9. প্রাথমিক র‌্যামডিস্ক মাউন্টস (সম্ভবত ক্রিপ্টোগ্রাফিকভাবে এটি আনলক করা) এর /নীচে u/new_root
  10. প্রাথমিক র‌্যামডিস্ক pivot_rootইউটিলিটিটিকে /new_rootআসল হিসাবে সেট করতে ব্যবহার করে /
  11. initশুরু হয়। পার্টিশনগুলি মাউন্ট হবে, ডেমোন শুরু হবে এবং সিস্টেম বুট হবে।

লক্ষ্য করুন যে কীভাবে কার্নেলটি কেবলমাত্র পদক্ষেপ at এ লোড করা হয় this এর কারণে, ধাপ 7 না হওয়া পর্যন্ত মাউন্ট করার কোনও ধারণা নেই । এই কারণেই /bootGRUB এটি ইতিমধ্যে ব্যবহার করেছে যদিও 9 ম পদক্ষেপে আবার মাউন্ট করতে হবে।

এটি GRUB তে উইকিপিডিয়া পৃষ্ঠার GRUB 2 বিভাগটি দেখার জন্যও ব্যবহার হতে পারে ।


আপনি আমার বিভ্রান্তি ঠিক লিখেছেন। এটিই আমি যা খুঁজছিলাম। সুতরাং প্রাথমিকভাবে /bootমূল বিভাজনে মাউন্ট করা ডিরেক্টরিটির কথা উল্লেখ করা হচ্ছে না?
jII

@ জেসটার আমি দুর্দান্ত! সেক্ষেত্রে, ভোটের তীরের ঠিক নীচে চেকমার্কটি ক্লিক করে আপনি কি এই উত্তরটি মানতে চান?
strugee

7
এমবিআর কোড একটি ফাইল সিস্টেম পার্স করতে পারে না। এটি প্রথম পার্টিশনের আগে এমবিআর অনুসরণ করে অব্যবহৃত ক্ষেত্রগুলি থেকে গ্রাব কোর চিত্রটি লোড করে এবং গ্রাড কনফিগারেশন ফাইল, অতিরিক্ত মডিউল এবং আপনার কার্নেলগুলি সন্ধান করার জন্য / বুট পার্টিশনটি কীভাবে সন্ধান করতে এবং মাউন্ট করতে হয় তা কোডটি বুঝতে পারে। এছাড়াও পিভট_রূটকে একটি নোংরা হ্যাক হিসাবে বিবেচনা করা হয়েছিল এবং প্রতিস্থাপন করা হয়েছে run-initযার সাহায্যে ইন্ট্রামফের সমস্ত ফাইল মুছে ফেলা হয় এবং তারপরে রুট ফাইল সিস্টেমে ক্রট করা হবে।
psusi

আধুনিক বুট প্রক্রিয়াটি এখন আরও বেশি বেশি জনপ্রিয় হওয়া হিসাবে লেগ্যাসি বুট প্রক্রিয়া হওয়া উচিত UEFI;-) @ মাসিক
কিউই

1
@ ম্যাগজি, ইউজ-লিনাক্স মেলিং তালিকার আলোচনার পরে মনে হচ্ছে যে আমার স্মৃতিচারণ কিছুটা বন্ধ ছিল: তারা বাস্তবের মূলগুলিতে পিভট_রূটকে অনুমতি দেওয়া বন্ধ করে দিয়েছে, এ কারণেই কেউ বুটের সময় আর এটি ব্যবহার করে না। সিস্টেমড এটি শাটডাউনে যদিও এটি ব্যবহার করে, আসল আরআরডিটিতে ফিরে আসার জন্য নয় (যা আসল রুটে স্যুইচ করার সময় নিজেকে মুছে ফেলে), তবে নতুনভাবে লোড হওয়াতে স্যুইচ করতে পারে। Marc.info/?l=util-linux-ng&m=139100788306216&w=2
psusi

6

প্রশ্ন 1

আমার বোঝাটি হ'ল বুটলোডার GRUB2, / বুটে মাউন্ট হয়। ডিরেক্টরি / বুট পৃথক পার্টিশন sda2-এ থাকে, তবে, এটি / আসলে মাউন্ট করার আগে এটি কীভাবে ঘটে?

আমি বুঝতে পারি না যে আপনি বুঝতে পারছেন এখানে ঠিক আছে। থেকে গনুহ গ্রাব উইকিপিডিয়া পৃষ্ঠা :

উদ্ধৃতাংশ

যখন একটি কম্পিউটার চালু করা হয়, কম্পিউটারের বায়োস কনফিগার প্রাথমিক বুটেবল ডিভাইস (সাধারণত কম্পিউটার এর হার্ড ডিস্ক) এবং লোড খুঁজে পায় এবং প্রাথমিক executes বুটস্ট্র্যাপ থেকে প্রোগ্রামটি মাস্টার বুট রেকর্ড (MBR)। এমবিআর হ্যান্ড ডিস্কের প্রথম সেক্টর , এবং এটির সংখ্যা 0 (সেক্টর গণনা 0 থেকে শুরু হয়)। দীর্ঘদিন ধরে, একটি সেক্টরের আকার 512 বাইট হয়েছে, তবে ২০০৯ সাল থেকে ৪০৯6 বাইটের সেক্টরের আকার সহ হার্ড ডিস্ক পাওয়া যায়, যাকে অ্যাডভান্সড ফরম্যাট ডিস্ক বলে। অক্টোবর ২০১৩ পর্যন্ত, এই জাতীয় হার্ড ডিস্কগুলি এখনও 512-বাইট সেক্টরে 512e এমুলেশন ব্যবহার করে অ্যাক্সেস করা হয়

ইন গ্রাব সংস্করণ 2 নিম্নলিখিত সঞ্চালিত:

উদ্ধৃতাংশ

কম্পিউটার বুট করা হচ্ছে

যখন পাওয়ার চালু হয়, নিম্নলিখিতটি ঘটে:

  • হার্ডওয়্যার সূচনা করে, সিপিইউটিকে আসল মোডে সেট করে (কোনও ভার্চুয়াল মেমরি নেই) এবং স্থির স্থানে 0xFFFF0 (সিপিইউ সার্কিটগুলিতে হার্ডওয়্যারড) লাফ দেয়
  • কোনও রোমে রক্ষিত বিআইওএস কোড বা সেই স্থানে ফ্ল্যাশ-মেমরি ম্যাপ করা তাই কার্যকর করা হয়।
  • কোন বুট ডিভাইস তা দেখতে BIOS কোডটি BIOS কনফিগারেশন ডেটা দেখে। এই BIOS কনফিগারেশন ডেটাটি সাধারণত পাওয়ার চালু করার পরে কিছু বিশেষ কী-সিকোয়েন্স টিপে সম্পাদনা করা যায়, যার ফলে BIOS কনফিগারেশন প্রোগ্রামটি চালিত হয়। অন্যান্য জিনিসের মধ্যে বুট ডিভাইসটি এখানে সাধারণত নির্বাচন করা যায়।
  • বিআইওএস কোড বুট ডিভাইসের এমবিআরটি র‌্যামে লোড করে। মনে রাখবেন যে একটি এমবিআর মাত্র 512 বাইট! লোড হওয়া ডেটা অবশ্যই প্রোগ্রাম এবং ডেটা যা গ্রুব-ইনস্টল গতিশীলভাবে তৈরি করা হয়েছিল এবং গ্রু-ইনস্টল প্রোগ্রামটি সম্পাদন করার সময় সেখানে লেখা হয়েছিল।
  • BIOS কোডটি লোড হওয়া এমবিআর (যেমন গ্রাব কোডটি পাওয়ার-অন হওয়ার পরে প্রথমবারের জন্য কার্যকর করা হয়) এর সূচনার ঠিকানায় চলে যায়।
  • গ্রাবের এমবিআর কোড এমন একক সেক্টর লোড করে যার ঠিকানাটি এমবিআর ব্লকে শক্ত ওয়্যার্ড রয়েছে। এরপরে এটি সেই সেক্টরের (ঠিকানা, লেন) জোড়গুলির উপর দিয়ে ডিস্ক থেকে সমস্ত ডেটা মেমরিতে লোড করে (যেমন ফাইলের বিষয়বস্তু /boot/grub/core.imgবা তার "এমবেডেড" অনুলিপি লোড করে )। এমবিআর কোডটি তখন লোড কোডটিতে লাফ দেয়, অর্থাৎ প্রোগ্রামটিকে "চালিত করে" core.img
  • "ইনস্টলিং গ্রুব" বিভাগে বর্ণিত হিসাবে, কাঁচা ডিস্ক ব্লক ঠিকানাগুলি এম্বেড করার এই কৌশলটি core.imgপার্টিশনে নেই এমন জায়গায় সংরক্ষণ করতে সক্ষম করে এবং এটিকে কখনও ফাইল সিস্টেম হিসাবে ফর্ম্যাট করা হয়নি ("এম্বেডিং")। এবং এই ক্ষেত্রে, যদি core.imgসংশোধন করা হয়, যতক্ষণ না একই সংস্করণে নতুন সংস্করণটি "এম্বেড করা" থাকবে, এমবিআর কোডটি আপডেট করার দরকার নেই need
  • বিকল্পভাবে, core.imgএকটি বাস্তব ফাইল সিস্টেমের অভ্যন্তরে থাকা এবং গ্রুবার পক্ষে core.imgফাইল সিস্টেমের জন্য ড্রাইভার না করে ফাইলের বিষয়বস্তু পড়া সম্ভব হয়। তবে এই ক্ষেত্রে, যদি core.imgসংশোধন করা হয় তবে ফাইলের প্রথম ব্লকে ভালভাবে ডিস্কে একটি নতুন ঠিকানা দেওয়া যেতে পারে; যদি এটি ঘটে থাকে তবে এই নতুন অবস্থানে নির্দেশ করতে এমবিআর অবশ্যই আপডেট করা উচিত। তবুও, core.imgগ্রাব-ইনস্টল চালিয়ে যেমন আপডেট করা হয় তেমনি এটি সাধারণত কোনও সমস্যা হয় না।
  • লক্ষ্য করুন তাত্ত্বিক, যদি core.imgউপস্থিত MBR তুলনায় বিভিন্ন ডিভাইস চালু থাকা, এবং নতুন হার্ডওয়্যার তারপর যোগ করা হয় grub-উত্পন্ন করা MBR রেকর্ড সঠিকভাবে লোড করতে সক্ষম হতে পারেন core.imgফাইল; যে ডিভাইস-আইডিটির প্রথম সেক্টরটি core.imgসন্ধান করা হবে তা এমবিআর -তে শক্ত ওয়্যার্ড, অনুসন্ধান করা হয়নি। তবে এর কোনও সমাধান নেই; গ্রাব "অনুসন্ধান" কমান্ডের সমতুল্য 512-বাইট এমবিআর এম্বেড করার কোনও উপায় নেই। এই সমস্যা যদিও সম্ভবত না; সাধারণত core.imgএমবিআর হিসাবে একই ডিভাইসে এম্বেড করা হয়। এবং একবার core.imgলোড হয়ে গেলে এটি সমস্ত /boot/grubফাইল সন্ধান করতে অনুসন্ধান.মোড ব্যবহার করতে পারে এবং তাই হার্ডওয়্যার পুনরায় সাজানো থেকে প্রতিরোধক।
  • এক্সিকিউটেড core.imgকোড এখন এটির মধ্যে নির্মিত সমস্ত মডিউলকে আরম্ভ করে (এতে লিঙ্কযুক্ত core.img); এই মডিউলগুলির মধ্যে একটি হ'ল একটি ফাইল-সিস্টেম ড্রাইভার থাকবে যেটি ডিরেক্টরিতে /boot/grubথাকে সেই ফাইল সিস্টেমটি পড়তে সক্ষম ।
  • এটি বিল্ট-ইন কমান্ডগুলির একটি সেটও রেজিস্টার করে: সেট, আনসেট, এলএস, ইনসোড।
  • যদি কোনও "কনফিগারেশন ফাইল" এর সাথে লিঙ্ক করা core.imgথাকে তবে এটি প্রক্রিয়াজাতকরণের জন্য খুব সাধারণ বিল্ড-ইন স্ক্রিপ্ট পার্সারে স্থানান্তরিত হয়। কনফিগ ফাইলে স্ক্রিপ্টিং কমান্ডগুলি কেবল অন্তর্নির্মিত বা লিংকড ইন কমান্ডের জন্য আবেদন করতে পারে। সাধারণ পরিস্থিতি (যেমন স্থানীয় ড্রাইভ থেকে একটি সাধারণ ডেস্কটপ কম্পিউটার বুট করা) কোনও কনফিগার ফাইলের প্রয়োজন হয় না; এই সুবিধাটি প্যাক্সে, রিমোট এনএফএস বা এলভিএম ডিভাইসে থাকা অবস্থায় বুট করার মতো জিনিসের জন্য ব্যবহৃত /boot/grubহয়।
  • Core.imgএখন “/boot/grub/normal.mod”ডিস্ক থেকে ফাইলটি গতিশীলভাবে লোড করে এবং তার প্রবেশ ফাংশনে লাফ দেয়। নোট করুন যে এই ধাপটির জন্য উপযুক্ত ফাইল সিস্টেম ড্রাইভার স্থাপন করা প্রয়োজন (যেমন বিল্ট-ইন)।

     ss বুট প্রক্রিয়া

দ্রষ্টব্য: আপনি যখন সাধারণ GRUB2 মেনুটি দেখেন যেখানে আপনি কোন ওএস / কার্নেলটি বুট করতে হবে তা নির্বাচন করেন, আপনি /boot/grubএই মুহুর্তে সিস্টেমের ডিরেক্টরিটি উল্লেখ করছেন ।

                                         গ্রাব টুই এর এসএস

তথ্যসূত্র


কারওর সেই উইকিপিডিয়া প্রবেশকে সংশোধন করা উচিত কারণ এটি ভুল wrong মঞ্চ 1 / 1.5 / 2 কেবলমাত্র উত্তরাধিকার গ্রাবের জন্য প্রযোজ্য। এগুলি গ্রুব 2 পুনর্লিখনের সাথে সম্পূর্ণরূপে শেষ হয়ে গেছে এবং আপনি সরকারী গ্রাব 2 ডকুমেন্টেশনে এই পদগুলির কোনও রেফারেন্স পাবেন না।
psusi

@ স্পুসী - স্পষ্ট করার জন্য ধন্যবাদ। আমি সেখানে তাদের উল্লেখ করা দেখে কিছুটা বিভ্রান্ত হয়ে পড়েছিলাম, যেহেতু আমি একই কথা শুনেছি, যে 1 / 1.5 / 2 চলে গেছে। আমি জানতাম না কে উইকিপিডিয়া নিবন্ধগুলি সম্পাদনা করতে বলবে, আমি এই জাতীয় পোস্ট সম্পাদনা করতে যোগ্য বোধ করব না। সম্ভবত GRUB2 টিমকে সতর্ক করা পরবর্তী সেরা জিনিস হবে?
slm

@ স্পুসী - এখানে রেফারেন্স রয়েছে। পর্যায়ক্রমে বন্ধ করা হচ্ছে। GRUB2: gnu.org/software/grub/manual/grub.html ... এর জন্য ডকস ... "GRUB তৈরি করা চিত্র ফাইলগুলি (চিত্রগুলি দেখুন) পুনর্গঠিত হয়েছে; প্রথম পর্যায় 1, পর্যায় 1.5 এবং দ্বিতীয় পর্যায় আর নেই" "
slm

6

আপনার কতগুলি বুট পার্টিশন রয়েছে তা লিনাক্স (কার্নেল) যত্ন করে না। ডিস্ক থেকে কার্নেল লোড করা হচ্ছে বুট-লোডার (যেমন এর কাজ grub, grub2, lilo) এবং এই সরঞ্জামগুলি এছাড়াও অবস্থানে একটি কার্নেল অবস্থিত করা যেতে পারে সংখ্যা যত্ন সম্পর্কে না। তারা কেবল নির্দিষ্ট অবস্থান সম্পর্কে যত্নশীল।

উদাহরণস্বরূপ, আমার বুট পার্টিশনটি হ'ল /dev/md1এটি একটি m دادm RAID মিরর যা শারীরিক পার্টিশন /dev/sde1এবং দ্বারা সমর্থিত /dev/sdf1। আমি চাইলে এগুলি পৃথকভাবে মাউন্ট করতে পারি এবং যেমন প্রযুক্তিগতভাবে দুটি বুট পার্টিশন থাকার হিসাবে গণনা করা যায়, যদিও তাদের একই ডেটা থাকা উচিত।

আমার জন্য / বুটের জন্য দুটি পার্টিশন থাকা একটি প্রাপ্যতা বিষয়, তবে সেগুলি সমানভাবে পৃথক / বুট পার্টিশন হতে পারে। পরবর্তী পদক্ষেপটি কীভাবে বুটলোডার জানে? এটি এখানে:

menuentry 'Linux 3.10.17 (sde) kernel-3.10.17-g' {
        root=hd0,1
        linux /boot/kernel-3.10.17-g domdadm dolvm root=/dev/md3
        initrd /boot/initrd-3.10.17-g
}

menuentry 'Linux 3.10.17 (sdf) kernel-3.10.17-g' {
        root=hd1,1
        linux /boot/kernel-3.10.17-g domdadm dolvm root=/dev/md3 
        initrd /boot/initrd-3.10.17-g
}

এটি একটি grub2কনফিগারেশনের একটি সংক্ষিপ্তসার এবং আপনি লক্ষ করবেন যে কেবলমাত্র পার্থক্য রয়েছে root=hd0,1এবং root=hd1,1কোন এন্ট্রিটি উল্লেখ করে কোন বুট পার্টিশনটি সেট করে।


এখন আপনাকে বুট করার পরেও হাঁটাতে আপনি বুঝতে পারবেন যে এখানে কী চলছে।

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

বুটলোডার আপনার কতগুলি বুট পার্টিশন রয়েছে সেগুলি যত্ন করে না, এটি কেবল সেগুলি কোথায় তা যত্নশীল করে তোলে এবং আপনাকে অবশ্যই এই তথ্যটি জানান tell

কার্নেলটি আপনার কতগুলি বুট পার্টিশন রয়েছে সেগুলি যত্ন করে না, কারণ এটি কখনই দেখার প্রয়োজন হয় না (উদাহরণস্বরূপ নতুন কার্নেল যুক্ত করার জন্য আপনার কেবল এটি উপলব্ধ থাকা দরকার)।

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