روی اغلب هارددیسکها دهها هزار فایل میتوان پیدا کرد که مربوط به سيستمعامل و برنامهها هستند. فایلهای بیشتری هم روی هارددیسکها وجود دارند که شامل اسناد و اطلاعات شخصی میشوند که در طول روزها و ماهها توسط کاربر ایجاد شدهاند.
همانگونه که شما ممکن است برای دستهبندی اسناد و فایلهای خود از روشی خاص استفاده کنید، کامپیوترها هم باید هارددیسک را به نحوی سازماندهی کنند.
کامپیوتر بدون ساختار مناسب نمیتواند تشخیص دهد که فایلها را کجا پیدا کند، چه چیزی داخل فایلهاست و یا حتی کدام بخشهای دیسک برای ذخیرهسازی فایلهای جدید در دسترس هستند. سيستمفايل دیسک برای ردگیری دادهها ضروری است، اما به نحوی هم باید باشد که برای کاربران کامپیوتر دست کم به صورت ظاهری قابل درک باشد.
بلوکهای ذهنی
پیش از آنکه به نحوه سازمانیابی دادهها روی هارددیسک توجه کنیم، بهتر است به یاد بیاوریم که دیسکهای مغناطیسی رایج چگونه کار میکنند (در ادامه به موضوع ذخیرهسازی درایوهای حالت جامد میرسیم).
این درایوها اطلاعات را روی صفحاتی (پلاترهایی) ذخیره میکنند که با جریان برق مرتب به دور خود میچرخند. سطح هر صفحه با مادهای مغناطیسی پوشیده شده که تعدادي هد خواندن و نوشتن (که روی بازوهایی قرار گرفتهاند) بين اين لایههای مغناطیسی قرار گرفتهاند؛ چیزی که تا حدی یادآور گرامافون و سوزن آن است.
هنگامی که این پوشش زیر فشار میدانی مغناطیسی قرار بگیرد که به اندازه کافی قدرتمند باشد، مغناطیسی شده و به همین ترتیب میماند. این کار به این ترتیب انجام میشود که هدها، میدان مغناطیسی را به صورت نقطهای به پلاتر اعمال میکنند و از این ویژگی برای ذخیرهسازی اطلاعات استفاده میشود. با تغییر جهت میدان مغناطیسی میتوان مقدار بیت ذخیره شده را تغییر داد. به این ترتیب میتوان به میزان تقریبا نامحدودی بیتها را روی سطح صفحات نوشت و خواند، بدون آنکه مشکلی پیش بیاید.
پیش از آنکه کامپیوتر بتواند دادهای را بخواند، نیاز به اطلاعاتی دارد تا بداند چه چیزی روی دیسک نوشته شده و کجا میتوان این دادهها را یافت. این وظیفهای کلیدی برای سيستمفايل است، اما مشکلی وجود دارد: اگر دیسک بخواهد جای تکتک بیتها را به یاد داشته باشد، ذخیرهسازی به مشکل برمیخورد و به اندازه فضای مورد نیاز برای ذخیرهسازی، احتیاج به فضایی برای حفظ آدرسها هم داریم.
در عمل، کنترلر دیسک، فضای دیسک را به چندین سکتور (قطاع) تقسیم میکند و آدرس هر قطاع را نگه میدارد. این سکتورها در دیسکهای مدرن به صورت لیستی از بلوکهای شمارهگذاری شده و پشت سر هم به سيستمعامل معرفی میشوند، صرف نظر از این که روی کدام پلاتر قرار گرفتهاند.
هرچند دیسکها در سطح پایین (low-level)، یعنی در سطح سختافزاری و در کارخانه به سکتورهای مختلف تقسیم میشوند، اما سيستمعامل و البته سيستمفايل که تصمیم میگیرد چگونه فایلها را در سکتورها پخش کند و آنها را پیگیری کند.
سيستمفايل شاید گاهی سکتورها را به صورت مجزا آدرسدهی کند، اما در کل سکتورها را گروهبندی میکند و چند سکتور را در یک واحد بزرگتر قرار میدهد. به این واحدها، کلاستر گفته میشود و آنها کوچکترین بخش دیسک هستند که میتوان در یک عملیات منفرد اطلاعات را از آنها بخواند یا در آنها ذخیره کرد.
مزیت داشتن کلاسترها برای آدرسدهی این است که فضای مورد نیاز برای ذخیره آدرس فایلهای بزرگ بسیار کمتر میشود و میتوان با سرعت بسیار بیشتری خواند و نوشت. البته این کار در ذخیرهسازی فایلهای کوچکتر از اندازه کلاستر ايرادي دارد؛ اگر بخواهید فایلی دو کیلوبایتی را روی دیسکی مدرن ذخیره کنید که اندازه کلاستر آن 4 کیلوبایت است، نیمی از فضای کلاستر به هدر میرود.
این کار باعث اتلاف فضای دیسک میشود اما به هر حال امروزه اغلب فایلهای کامپیوتری حداقل چند کلاستر فضا اشغال میکنند. مثلا فرض کنید فایلی دارید که 202 کیلوبایت دارد. این فایل 50 کلاستر کامل 4 کیلوبایتی را میگیرد و نیمی از کلاستر پنجاه و یکم را به هدر میدهد. این جا تنها یک درصد ظرفیت کلاسترها هدر رفته است.
جداولی برای فایلها
چندین سيستمفايل رایج وجود دارد، از جمله سیستمهایی که برای رسانههایی مانند دیسکهای نوری یا درایوهای حالت جامد ساخته شدهاند. ما در این مقاله به انواع سیستمفایل هارددیسکها میپردازیم و با FAT شروع میکنیم.
سيستمفايل FAT که نامش را از جدول تخصیص فایل (File Allocation Table) گرفته، در سال 1977 معرفی شد و بعدتر به سيستمفايل استاندارد داس تبدیل شد. از آن هنگام تاکنون این سيستمفايل مرتبا بهتر شده و همراه با افزایش هرروز حجم هارددیسکها پيش رفته است. امروزه بيشتر سیستمعاملها از این سيستمفايل پشتیبانی میکنند و اغلب از آن در کارتهای حافظه استفاده میشود.
هارددیسکی که با سیستم FAT فرمت شده باشد، رکورد راهانداز اصلی (MBR) آن را دارد. در این رکورد کدهایی ذخیره شده که بایوس بلافاصله پس از آمادهسازی سیستم برای بوت آن را میخواند. پس از این رکورد، سکتور بوت قرار دارد که شامل اطلاعات بیشتری درباره دیسک فیزیکی و تعداد سکتورهای هر کلاستر میشود.
پس از اطلاعات بوت نوبت به خود جدول تخصیص فایل میرسد. سیستم از این جدول استفاده میکند تا ببیند هر کلاستر به کدام فایل اختصاص داده شده، کدام کلاستر خالی است و کدام کلاستر ممکن است خراب (بد) شده باشد.
هر کلاستری که استفاده نشده باشد به عنوان فضای خالی، فضای رزرو شده یا فضای «بد» در نظر گرفته میشود. مورد آخر را تنها برنامههای مدیریت دیسک میتوانند تشخیص دهند و روی دیسک علامتگذاری کنند. هر سطر این جدول که مربوط به کلاسترهای استفاده شده است، یا به کلاستر بعدی در این زنجیره اشاره میکند یا نشان میدهد که این آخرین کلاستر در این زنجیره است. سایر فضای دیسک هم برای ذخیرهسازی دادهها استفاده میشود.
جداول تخصیص فایل برای ردگیری محتویات دیسک به حدی مهم هستند که از آنها یک کپی دیگر هم نگهداری میشود تا در صورت بروز حادثه مشکلی پیش نیاید. آنها البته تنها این را ثبت میکنند که فایلها کجا هستند؛ نه اینکه محتویات فایلها چیست و چه زمانی ذخیره شده است و امثال این اطلاعات.
در عوض، هر پوشه (Directory) روی دیسک جدول پوشه (Directory Table) خود را دارد که در بخش دادههای هارددیسک ذخیره میشود. هر مدخل جدول پوشهها شامل نام فایل و پسوند آن، صفات فایل مانند Read Only یا Hidden بودن، زمان ایجاد و زمان آخرین تغییر، و از همه مهمتر، آدرس اولین کلاستر در زنجیره فایل میشود.
هنگامی که سيستمعامل میخواهد به فایلی دسترسی پیدا کند، سطر مربوط به آن را در جدول پوشهها مییابد و از سطرهای FAT استفاده میکند تا زنجیره کلاسترهایی را که فایل را میسازند تشخیص داده و به فایل دستیابی داشته باشد.
مهم است که سطرهای FAT از دادههای واقعی مجزا باشند. هنگامی که فایلی پاک میشود، دادههای آن روی دیسک باقی میماند اما FAT به نحوی آپدیت میشود که کلاسترهای مربوط به فایل به وضعیت آزاد و آماده برای بازنویسی بروند. به همین ترتیب، هنگامی که فایلی روی یک درایو از یک پوشه به پوشه دیگری منتقل میشود، تنها تغییری که روی میدهد این است که مدخل مرتبط با آن از جدول پوشه مبدأ حذف شده و به جدول پوشه مقصد منتقل میشود، در حالی که دادههای آن روی دیسک سر جای خود باقی میمانند. در هر دو حالت، این روند باعث میشود کار سریعتر انجام گیرد.