আইওনড, এলবিএ, লজিকাল ভলিউম, ব্লক এবং সেক্টরগুলির সম্পর্ক কী?


19

আমি এই প্রশ্নটি জিজ্ঞাসা করতে কিছুটা বিব্রত বোধ করছি তবে আমি একটি চিত্র দেখতে চাই যা নীচের বিষয়গুলি কীভাবে সম্পর্কিত তা দেখায়। ডায়াগ্রামে পাশাপাশি বিভিন্ন স্তরগুলির মধ্যে মানচিত্রের জন্য প্রয়োজনীয় কোনও রূপান্তর অন্তর্ভুক্ত করা ভাল।

আমি এটি যেভাবে বুঝতে পেরেছি, আমি বিশ্বাস করি যে তারা নিম্নলিখিত পদ্ধতিতে সম্পর্কিত but তবে আমি নিশ্চিত নই যে আমার বোঝার 100% নির্ভুল।

                           .-----------------.
                           |      inode      |
                           '-----------------'
                                    |
                           .-----------------.
                           |      EXT4       |
                           '-----------------'
                                    |
                         .---------------------.
                         | logical volume (LV) | --- part of LVM
                         '---------------------'
                                    |
                          .-------------------.
                          | volume group (VG) |  --- part of LVM
                          '-------------------'
                                    |
                            .---------------.
                            | /dev/<device> |
                            '---------------'
                                    |
                   .--------------------------------.
                   | Logical Block Addressing (LBA) |
                   '--------------------------------'
                                    |
                           .-----------------.
                           | blocks/sectors  |
                           '-----------------'
                                    |
                                   HDD     
                                _.-----._  
                              .-         -.
                              |-_       _-|
                              |  ~-----~  |
                              |           |
                              `._       _.'
                                 "-----"   

তথ্যসূত্র

উত্তর:


18

উপায় tl; ডা

আপনার চিত্রটি মূলত সঠিক।

/dev/<device> নথি পত্র

আমি মনে করি আপনার প্রশ্নের উত্তর দেওয়া শুরু করার সবচেয়ে প্রাথমিক উপায় হ'ল /dev/<device>ফাইলগুলি কী। বলুন আপনার একটি হার্ড ডিস্ক আছে। এই হার্ড ডিস্কটিতে একটি এমবিআর ভিত্তিক পার্টিশন টেবিল রয়েছে এবং এতে দুটি পার্টিশন রয়েছে, একটি ফর্ম্যাট করা এক্সট 4 এর সাথে কয়েকটি ফাইল রয়েছে এবং অন্যটি এলভিএমের জন্য সেটআপ করে। মনে রাখবেন যে এই উত্তরটি ফ্লাই ডিভাইস ফাইল তৈরির বিষয়ে কথা বলে, যা বোঝায় যে আপনি একটি লিনাক্স কার্নেল ব্যবহার করছেন। অন্যান্য ইউনিয়নে বিষয়গুলি কিছুটা আলাদা

আপনি যখন এই হার্ড ডিস্কটি প্লাগ করবেন (বা সিস্টেমটি বুট-টাইমে এটি সনাক্ত করবে) ডিরেক্টরিতে একটি ডিভাইস ফাইল তৈরি করা হবে /dev- সাধারণত হয় /dev/sd*বা বলা হয় /dev/hd*(ড্রাইভটি সংযোগ করতে কোন নিয়ামক ব্যবহৃত হয় তার উপর নির্ভর করে) - * একটি চিঠি. ডিভাইস ফাইলে থাকা বাইটগুলি মূলত শারীরিক ডিস্কের বাইটগুলিতে রৈখিকভাবে ম্যাপ করা হয়: আপনি যদি ডিভাইস ফাইলের শুরুতে কোনও সরঞ্জাম ব্যবহার করেন, তবে সেই তথ্যটি দৈহিক ডিস্কের শারীরিক শুরুতেও লেখা হবে।

এখন, সিস্টেমটি এমবিআর এবং জিপিটিগুলির মতো পার্টিশন সারণীগুলিও বোঝে। প্রাথমিক ডিভাইস ফাইলটি একবার তৈরি হয়ে গেলে, এটিতে একটি বিভাজন সারণী রয়েছে কিনা তা নির্ধারণ করার জন্য এটি পড়তে হবে। যদি এটি হয় তবে এই পার্টিশনগুলিকে উপস্থাপনকারী ডিভাইস ফাইল তৈরি করা হবে। সুতরাং ধরে নিলাম যে আসল ডিভাইস ফাইলটি বলা হয়েছিল /dev/sda, একটি ডিভাইস ফাইল তৈরি করা /dev/sda1হবে (প্রথমটি, ext4 ফর্ম্যাট করা পার্টিশন প্রতিনিধিত্ব করে), পাশাপাশি একটি /dev/sda2ডিভাইস (দ্বিতীয় LVM পার্টিশনের প্রতিনিধিত্ব করে) তৈরি করা হবে। এটি সম্পূর্ণ ড্রাইভের মতো একইভাবে তাদের নিজ নিজ পার্টিশনের সাথে রৈখিকভাবে ম্যাপ করা হয় - অর্থাৎ, আপনি যদি কোনও সরঞ্জাম ব্যবহার করেন (উদাহরণস্বরূপ) শুরুতে লেখার জন্য /dev/sda2, লিখিত তথ্যগুলি দ্বিতীয় পার্টিশনের শুরুতে শারীরিকভাবে লেখা হবে , যা আসলে মাঝখানে পুরো ডিস্কের, কারণ এখানেই দ্বিতীয় বিভাজন শুরু হয়।

ব্লক এবং সেক্টর

ব্লক এবং সেক্টর সম্পর্কে কথা বলার জন্য এটি একটি সুবিধাজনক সময়: এগুলি কেবল একটি শারীরিক ডিস্কে স্থান পরিমাপ, এর চেয়ে বেশি কিছুই নয় (অন্তত আমি সঠিকভাবে বুঝতে পারলে)। একটি খাত একটি হার্ড ড্রাইভে একটি শারীরিক অঞ্চল; এটি সাধারণত 512 বাইট - নতুন হার্ড ড্রাইভে 4 কেবি। একটি ব্লকও পরিমাপের একক, এটি প্রায় সর্বদা 8 কেবি। যখন কেউ ব্লকগুলি পড়তে এবং লেখার বিষয়ে কথা বলেন, তার অর্থ হ'ল পৃথকভাবে প্রতিটি বাইটের ডেটা পড়ার পরিবর্তে তারা 8 কেবি এর অংশে ডেটা পড়ে এবং লেখেন।

ফাইল সিস্টেম এবং ইনোড

এরপরে, ফাইল সিস্টেম এবং ইনোডগুলি। একটি ফাইল সিস্টেম একটি মোটামুটি সহজ ধারণা: ফাইল সিস্টেম যেখানে থাকে সেই অঞ্চলের শুরুতে (এই অঞ্চলটি সাধারণত একটি পার্টিশন), ফাইল সিস্টেমে অনেকগুলি তথ্য রয়েছে। এই শিরোনামটি (সুপারব্লক হিসাবেও পরিচিত, আমি বিশ্বাস করি) প্রথমে কোন ফাইল সিস্টেমে ড্রাইভার ফাইল ফাইল পড়ার জন্য ব্যবহার করা উচিত তা নির্ধারণ করতে ব্যবহৃত হয় এবং তারপরে ফাইলগুলি পড়ার জন্য এটি নির্বাচিত ফাইল সিস্টেম ড্রাইভার দ্বারা ব্যবহৃত হয়। এটি অবশ্যই একটি সরলকরণ, তবে এটি মূলত দুটি জিনিস সঞ্চয় করে (যা fs টাইপের উপর নির্ভর করে ডিস্কে দুটি স্বতন্ত্র ডেটা স্ট্রাকচার হিসাবে সংরক্ষণ করা যেতে পারে বা নাও থাকতে পারে): ডিরেক্টরি গাছ এবং ইনোডের একটি তালিকা। ডিরেক্টরি গাছ হ'ল আপনি যখন কোনও lsবা একটি করেন তখন আপনি যা দেখেনtree। ডিরেক্টরি ট্রিতে বলা হয় যে কোন ফাইল এবং ডিরেক্টরিগুলি অন্য ডিরেক্টরিগুলির সন্তান are ফাইল / ডিরেক্টরি প্যারেন্ট-চাইল্ড রিলেশনশিপ ইউনিক্স ডিরেক্টরি ট্রি তৈরি করে যা আমরা জানি।

তবে ডিরেক্টরি ট্রিটিতে কেবল নাম অন্তর্ভুক্ত থাকে। এই নামগুলি অতিরিক্তভাবে ইনোড সংখ্যার সাথে যুক্ত। একটি ফাইলের টুকরা যেখানে ডিস্কে শারীরিকভাবে সংরক্ষণ করা হয় তার মতো একটি ইনোড নম্বর রয়েছে। নিজেই একটি ইনোড হ'ল নামহীন "একটি ফাইল"; একটি ইনোড ডিরেক্টরি গাছের মাধ্যমে একটি নামের সাথে যুক্ত। আরও দেখুন সুপারব্লক, ইনোড, ডেন্ট্রি এবং একটি ফাইল কী?

এ পর্যন্ত, আমরা নিম্নলিখিত ব্যাখ্যা আছে: /dev/sd*ফাইল হার্ড ড্রাইভ ম্যাপ, /dev/sd*#ফাইল পার্টিশন সংখ্যা ম্যাপ #উপর /dev/sd*। একটি ফাইল সিস্টেম ডিস্কের একটি ডেটা স্ট্রাকচার যা ডিরেক্টরি গাছের ট্র্যাক রাখে; এটি সাধারণত একটি বিভাজনে রাখা হয় ( /dev/sd*#)। একটি ফাইল সিস্টেমে ইনোড থাকে; আইওনড হ'ল এমন ফাইল যা প্রতিনিধিত্ব করে সেই ফাইলগুলির সাথে সম্পর্কিত ডেটার পাশাপাশি (ডিরেক্টরি ট্রিতে তাদের নাম এবং অবস্থান বাদে) represent

এটি লক্ষণীয় যে ফাইল সিস্টেমগুলি সাধারণত ব্লকগুলিতে ডেটা রাখে। সাধারণত, ডিরেক্টরি ট্রি এবং ইনোডের তালিকাটি বাইটগুলিতে নয়, ব্লকগুলিতে সংরক্ষণ করা হয় এবং আইওডগুলি ডিস্কের ব্লকগুলিতে, বাইটগুলিতে নয় point (এটির ফলে সমস্যাগুলি দেখা দিতে পারে যেখানে সাধারণত ফাইলগুলি অর্ধেক ব্লক জায়গার অপচয় করে, কারণ ফাইল সিস্টেম একটি সম্পূর্ণ ব্লক বরাদ্দ দেয় তবে ফাইলটির শেষ অংশের জন্য পুরো ব্লকটি ব্যবহার করার প্রয়োজন ছিল না))

ডিভাইস ম্যাপার

ধাঁধাটির চূড়ান্ত অংশটি লিনাক্স কার্নেলের একটি অত্যন্ত গুরুত্বপূর্ণ মডিউল যা ডিভাইস ম্যাপার বলে (এটি দিয়ে লোড করুন modprobe dm)। ডিভাইস ম্যাপারটি মূলত আপনাকে /dev/mapperডিরেক্টরিতে অন্য একটি ডিভাইস ফাইল তৈরি করতে দেয় । তারপরে সেই ডিভাইস ফাইলটি অন্য কোনও উত্সে ম্যাপ করা হয়, সম্ভবত প্রক্রিয়াটিতে রূপান্তরিত হয়। সহজ উদাহরণটি হ'ল কোনও ফাইলের একটি অংশ পড়া।

বলুন আপনার একটি পূর্ণ-ডিস্ক চিত্র রয়েছে, পার্টিশন টেবিল দিয়ে সম্পূর্ণ complete আপনাকে চিত্রটির একটি পার্টিশন থেকে তথ্য পড়তে হবে, তবে আপনি কেবলমাত্র সেই পার্টিশনটিতে পৌঁছাতে পারবেন না , কারণ এটি একটি একক-পার্টিশনের চিত্রের পরিবর্তে ফুল-ডিস্ক চিত্র। সমাধানটি আপনার ইমেজটিতে আপনার পার্টিশনটি কোথায় তা খুঁজে বের করা এবং তারপরে ডিস্ক চিত্রের সেই অংশটিতে একটি নতুন ডিভাইস ফাইল ম্যাপিং তৈরি করতে হবে। এখানে একটি চিত্র রয়েছে:

.-------------------.
|  /dev/mapper/foo  | <- This is the device file created with the device mapper
.___________________.
\                   /
 \                 /
  \               /   <- This is a small section of the image being mapped to
   \             /         the new device file
    \           /
     \         /
 .------------------.
 |  diskimage.img   | <- This is the full-disk image. It's a regular file.
 .__________________.     Notice how the mapping goes to _part_ of the file.

এটিকে ভাবার আর একটি উপায় হ'ল রূপান্তর পাইপলাইনের মতো (কার্নেলের অভ্যন্তরীণভাবে যা ঘটছে তার জন্য এটি আরও সঠিক রূপক)। একটি পরিবাহক বেল্ট কল্পনা করুন। একটি অনুরোধ - একটি পঠন, একটি লিখন, ইত্যাদি - কনভেয়র বেল্টের এক প্রান্তে, ডিভাইস ম্যাপার দিয়ে তৈরি একটি ডিভাইস ফাইলে শুরু হয়। অনুরোধটি ডিভাইস ম্যাপারকে উত্স ফাইলে রূপান্তর করার মাধ্যমে ভ্রমণ করে। উপরের উদাহরণে, এই উত্স ফাইলটি একটি নিয়মিত ফাইল diskimage.img,। চিত্রটি এখানে:

Read operation goes onto
device mapper conveyor belt

read()                                      The device mapper transforms the read         The modified read request finally
  \                                         request by moving the requested region        reaches the source file, and the data
   \         Beginning of conveyor belt     to read forward by some number of bytes.      is retrieved from the filesystem.
    \     
     \       .-------------------.          .--------------------------.                  .------------------------.
      \      |  /dev/mapper/foo  |          |   Transformation logic   |                  | /path/to/diskimage.img |
       \     .___________________.          .___+_____+_____+_____+____.                  .________________________.
        \-->                                             
             ---------------------------------------------------------------------------------------------------------------
             o          o          o          o          o          o          o          o          o          o          o

ডায়াগ্রামে দেখুন কীভাবে, ডিভাইস ম্যাপারের সাথে রূপান্তরিত যুক্তিটি সংযুক্ত করা হয়েছে, পাঠকের +অনুরোধটি চালিত করার জন্য সামান্য সরঞ্জাম ( গুলি) রয়েছে যা এটি কনভেয়ার বেল্টের উপর দিয়ে চলেছে।

এখন, আমি বিশেষভাবে সেই চিত্রটি অনুলিপি করে এবং এটি LVM- র জন্য সংশোধন করার মতো মনে করি না, তবে মূলত, রূপান্তর অংশটি যে কোনও কিছু হতে পারে - কেবল বাইট সীমাটি এগিয়ে না নিয়ে। এলভিএম এইভাবে কীভাবে কাজ করে: একটি এলভিএম ফিজিক্যাল এক্সট্যান্ট হ'ল এলভিএমের অংশ যা ডিস্কে বসে থাকে এবং ডেটা কোথায় তা ট্র্যাক করে। এটিকে LVM এর ফাইল সিস্টেমের মতো ভাবুন। কনভেয়র বেল্ট রূপকটিতে, একটি ফিজিকাল এক্সটেন্ট হ'ল উত্স ফাইলগুলির মধ্যে একটি, এবং রূপান্তরটি এলভিএম হ'ল কাজটি করে, একটি লজিকাল ভলিউমের (যা কনভেয়ার বেল্টের বামতম আইটেমটি) ডিস্কের প্রকৃত ডেটাতে ম্যাপিং করে। যার কথা ...

আমি আমার এলভিএম ধারণাগুলিতে কিছুটা মরিচা, তবে আইআইআরসি, একটি ভলিউম গ্রুপ মূলত এলভিএমের ডিস্কের মতো। আবার আইআইআরসি, রেড স্তর ইত্যাদি ভলিউম গ্রুপে পরিচালিত হয়। একটি লজিকাল ভলিউম, ঠিক তখনই একটি পার্টিশনের মতো, এবং লজিকাল ভলিউমগুলি আসলে ডিভাইস ফাইলগুলিকে প্রতিনিধিত্ব করে। আপনি লজিকাল ভলিউমে ফাইল সিস্টেম এবং স্টাফ রেখেছেন।

ডিভাইস ম্যাপার সম্পর্কে দুর্দান্ত জিনিস হ'ল এটির সাথে নির্মিত যুক্তিটি নির্বিচারে ডেটা স্ট্যাকের মধ্যে .োকানো যেতে পারে - আপনাকে যা করতে হবে তা হল ডিভাইসের নাম পরিবর্তন করা যা আপনি পড়ছেন change এটি এনক্রিপ্ট করা পার্টিশনগুলি কীভাবে কাজ করে ( এনক্রিপশন স্কিমগুলি না যা ফাইল স্তরে কাজ করে - যারা FUSE ব্যবহার করে), এবং এভাবেই LVM কাজ করে। আমি এই মুহূর্তে অন্য কোনও উদাহরণের কথা ভাবতে পারি না তবে বিশ্বাস করুন, ডিভাইস ম্যাপারটি বেশ খারাপ।

লজিকাল ব্লক ঠিকানা

আমি এটি সম্পর্কে কখনও শুনিনি, তাই আমি এটি সম্পর্কে কোনও তথ্য দিতে পারি না। আশা করি কেউ এসে এই উত্তরটি সম্পাদনা করবেন।


প্রয়াসের জন্য +1 তবে আমি মনে করি যে @slm বিভিন্ন স্তরের একে অপরের সাথে কীভাবে যোগাযোগ করে সে সম্পর্কে আরও বিশদ খুঁজছেন। উদাহরণস্বরূপ, কীভাবে ইনোডগুলি সেক্টরগুলিতে মানচিত্র দেয়? তারা কি?
terdon

@terdon আহ। আমি নিশ্চিত ছিলাম না, যেহেতু আমি তাকে
আড্ডায়

প্রচেষ্টার জন্যও +1। তাড়াতাড়ি ফিরে না পেয়ে দুঃখিত। এটি হজম করার জন্য সময় প্রয়োজন। @ টার্ডনের ডানদিকে, আমি বিভিন্ন স্তরগুলির মধ্যে কীভাবে মানচিত্র তৈরি করতে পারি তার বিশদটি আরও জানার চেষ্টা করতে এবং প্রকাশ করতে চেয়েছিলাম। আমি ভাবছি যে আমি একটি একক প্রশ্নে খুব বেশি জিজ্ঞাসা করছি, তবে ইন্টারনেটে এটি খারাপভাবে ধরা পড়ে না বলে আমি একক প্রশ্নোত্তর এ সমস্ত কিছু করতে চেয়েছিলাম। বিটিডাব্লু, আমি ডিএম এর বর্ণনা পছন্দ করি।
slm

@slm হাঁ আমি সম্পাদনাগুলি যে কিছু যোগ করার চেষ্টা করেছেন
strugee

নোট: আমি গিলেজ যেহেতু এই তার পর্যালোচনায় বলেন যে যোগ LBA, তথ্য সত্যিই সঠিক ছিল না ঘূর্ণিত
strugee
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.