فایل سیستم ها چطور کار میکنن؟ - قسمت 2 - MBR partition entries
داستان از این کنجکاوی شروع شد که هارد درایو ها چطور پارتیشن بندی میشن و بعدش راجب MBR صحبت کردیم و رسیدیم به اینجا که داخل رکورد های MBR چهارتا partition entry هر کدوم به اندازه 16 بایت ذخیره میشه. حالا بریم برای ادامش.
هر Partition Entry به شکل زیره:
بایت اول - Boot Signature
اگه برابر با 0x00 باشه یعنی میشه سیستم رو از این پارتیشن بوت کرد اگه برابر با 0x80 باشه یعنی نمیشه، بقیه مقادیر معتبر نیستن.//
بایت 2 تا 4 - CHS Start Address
چیز مسخره ایه 3 تا بایت که به یک روش عجیبی به نقطه شروع پارتیشن اشاره میکنن. در ادامه میبینیم که با یک فیلد دیگه جایگزین شده ولی هنوز توی پروتوکول مونده.
یکچیزایی راجبش مینویسم، اگه نخواستین نخونین.
این 3 بایت که در واقع 24 تا بیت دارن به 3 تا عدد 8 بیتی، 6 بیتی و 10 بیتی تقسیم میشن. که یک فضای حالت 16777216 تایی درست میکنن ( 2 به توان 24 ) ولی از اونجایی که عدد 8 بیتی 1 indexed عه حداکثر میتونه 63 حالت ایجاد کنه نه 64 تا که یعنی فضای حالت به 16515072 کاهش پیدا میکنه.
حالا این عدد به شماره یک سکتور اشاره میکنه ( و هر سکتور 512 بایته ) که میشه 8455716864 بایت تقریبا معادل 7.88 گیگابایت.
اگه احساس میکنین خیلی پیچیده بود، درست حس میکنین و واقعا هم مهم نیست :) فراموشش کنین.
خلاصه کنم براتون: اون ها این روش رو توسعه دادن و فقط میشد نهایتا یک دیسک 8 گیگابایتی رو باهاش پارتیشن بندی کرد. بنابراین بعدا به این پروتکل چیزای دیگه ای اضافه کردن و کلا این قسمت CHS رو به فراموشی سپردن.
بایت 5 - Partition Type
این مقدار داره میگه که نوع این پارتیشن چیه. چیزای جالبی میشه اینجا پیدا کرد مثلا
0x0B معادل FAT32 عه یا 0x07 معادل NTFS عه. چندتا از مهم هاشون رو میزارم براتون.0x07 - ntfs
0x0C - FAT32 ( lba )
0x83 - ext2/3/4
جالبه نه؟ اگه یک فلش مموری دارین احتمالا اینجا
0x0C داره، درایو c ویندوزتون 0x07 و گوشی اندرویدتون 0x83.بایت 6 تا 8 - CHS end address
به همون روش CHS آدرس انتهای پارتیشن رو نشونه گذاری میکنه.
بایت 8 تا 12 - LBA start
این روش جایگزین CHS شده. یک عدد 32 بیتی عه. به یک سکتور اشاره میکنه.
دیگه میدونیم که سکتور ها 512 بایتی ان. پس یک حساب کتاب ساده میکنیم
2^32 * 512 میشه معادل 2 ترابایت. یعنی با این روش بدون درد میشه 2 ترابایت هارد رو آدرس دهی کرد. اگه اندازه سکتور هارو بیشتر کنیم بیشترهم میشه.
بایت 12 تا 16 - Sector count
یک عدد 32 بیتی دیگه اینجا داریم. این میگه که این پارتیشن چندتا سکتور داره. ( برخلاف CHS که نفطه شروع و پایان رو نشانه گذاری میکنه اینجا نقطه شروع و اندازه رو نشانه گذاری میکنیم. )
اینجوریه که هر هارد mbr میتونه 4 تا پارتیشن primary داشته باشه و بوت لودر هم روی خود دیسک نصب میشه. بگذریم یک ماجرای جالبی هم درباره CHS و LBA وجود داره. اون اوایلی که این داستان ها درست شده کلا LBA وجود نداشته و نرم افزار ها همه CHS رو میشناختن. قضیه اونجایی بقرنج میشه که اشاره کنیم منظورمون از نرم افزار یعنی سیستم عامل ها، ابزارهای پارتیشن بندی و BIOS! بعد از یک مدت دیگه این پروتکل از سرعت پیشرفت سخت افزار جا میمونه و جاش رو به LBA میده و تا مدت ها این اکوسیستم ها از هردو پشتیبانی میکردن. یعنی وقتی مثلا شما پارتیشن بندی رو ادیت میکردین اون موقع هم LBA و هم CHS اعمال میشدن. ولی بعد از یک مدت کم کم نرم افزار ها CHS دراپ کردن و نتیجش این میشه ممکنه روی یک هارد OS بریزین و ببرینش روی یک سیستم قدیمی و BIOS اون سیستم کلا اون رو نشناسه! 😂
قضیه اینه که این ماجرا حتی درست حسابی هم داکیومنت نشده و اونقدر این مشکل قدیمیه که نسل امروز فراموشش کرده