سیستم فایل کامپیوتر fat ntfs است. سیستم های فایل ساختار فایل سیستم سیستم های فایل FAT

قبل از ظهور سیستم عامل مایکروسافت ویندوز NT، کاربران کامپیوترهای شخصی به ندرت مشکل انتخاب سیستم فایل را داشتند. همه دارندگان سیستم عامل (OS) MS-DOS و Microsoft Windows از یکی از انواع سیستم فایل به نام FAT (FAT-12، FAT-16 یا FAT-32) استفاده می کنند.

اکنون شرایط تغییر کرده است. هنگام نصب سیستم عامل Microsoft Windows NT/2000/XP، هنگام قالب بندی دیسک، باید بین سه سیستم فایل - FAT-16، FAT-32 یا NTFS انتخاب کنید.

در این مقاله، ما در مورد ساختار داخلی فایل سیستم های ذکر شده صحبت خواهیم کرد، معایب و مزایای ذاتی آنها را در نظر خواهیم گرفت. با داشتن این دانش، می توانید انتخابی آگاهانه به نفع یک سیستم فایل خاص برای مایکروسافت ویندوز داشته باشید.

مختصری در مورد سیستم فایل FAT

سیستم فایل FAT در ابتدای توسعه رایانه های شخصی ظاهر شد و در ابتدا برای ذخیره فایل ها بر روی فلاپی دیسک در نظر گرفته شد.

اطلاعات بر روی دیسک ها و فلاپی دیسک ها در بخش هایی با حجم 512 بایت ذخیره می شود. کل فضای یک فلاپی دیسک به مناطقی با طول ثابت تقسیم می شود که خوشه نامیده می شود. یک خوشه ممکن است شامل یک یا چند بخش باشد.

هر فایل یک یا چند خوشه را اشغال می کند که احتمالاً به هم پیوسته نیستند. نام فایل ها و سایر اطلاعات مربوط به فایل ها، مانند اندازه و تاریخ ایجاد، در قسمت اولیه فلاپی دیسک اختصاص داده شده به دایرکتوری ریشه قرار دارند.

علاوه بر دایرکتوری ریشه، دایرکتوری های دیگری را می توان در سیستم فایل FAT ایجاد کرد. آنها همراه با دایرکتوری ریشه، درختی از دایرکتوری ها را تشکیل می دهند که حاوی اطلاعاتی درباره فایل ها و دایرکتوری ها است. در مورد مکان خوشه های فایل روی دیسک، این اطلاعات در ناحیه اولیه دیسکت، به نام جدول تخصیص فایل (جدول تخصیص فایل، FAT) ذخیره می شود.

برای هر خوشه، جدول FAT سلول جداگانه خود را دارد که اطلاعات مربوط به نحوه استفاده از این خوشه را ذخیره می کند. بنابراین، جدول تخصیص فایل یک آرایه حاوی اطلاعاتی در مورد خوشه ها است. اندازه این آرایه با تعداد کل خوشه های روی دیسک تعیین می شود.

دایرکتوری شماره اولین خوشه اختصاص داده شده به یک فایل یا زیر شاخه را ذخیره می کند. اعداد خوشه های باقی مانده را می توان با استفاده از جدول تخصیص فایل FAT پیدا کرد.

هنگام توسعه فرمت جدول FAT، وظیفه صرفه جویی در فضا بود، زیرا فلاپی دیسک حجم بسیار کمی دارد (از 180 کیلوبایت تا 2.44 مگابایت). بنابراین، تنها 12 رقم باینری برای ذخیره اعداد خوشه ای اختصاص داده شد. در نتیجه، جدول FAT آنقدر محکم بسته شد که فقط یک بخش از فلاپی دیسک را اشغال کرد.

جدول FAT حاوی اطلاعات مهمی در مورد مکان دایرکتوری ها و فایل ها است. اگر جدول FAT در نتیجه خرابی سخت افزار، نرم افزار یا بدافزار خراب شود، دسترسی به فایل ها و دایرکتوری ها از بین خواهد رفت. بنابراین، به منظور شبکه ایمنی، معمولاً دو نسخه از جدول FAT روی دیسک ایجاد می شود.

نسخه های مختلف FAT

پس از ظهور هارد دیسک های با ظرفیت بالا (در آن روزها دیسک های 10-20 مگابایتی بزرگ به حساب می آمدند)، تعداد خوشه ها افزایش یافت و 12 بیت برای ذخیره تعداد آنها کافی نبود. فرمت جدول تخصیص فایل 16 بیتی جدید ایجاد شد که در آن دو بایت برای ذخیره تعداد یک خوشه اختصاص داده شد. سیستم فایل قدیمی طراحی شده برای فلاپی دیسک به FAT-12 معروف شد و سیستم جدید FAT-16 شد.

جدول بزرگ شده FAT-16 دیگر در یک بخش قرار نمی گیرد، با این حال، با حجم بالای دیسک، این اشکال نقش مهمی ایفا نمی کند. مانند قبل، برای بیمه، دو نسخه از جدول FAT روی دیسک ذخیره شد.

با این حال، هنگامی که حجم دیسک در صدها مگابایت و حتی در گیگابایت اندازه گیری شد، سیستم فایل FAT-16 دوباره ناکارآمد شد. برای اینکه اعداد کلاستر در 16 رقم قرار گیرند، هنگام قالب بندی دیسک های بزرگ، باید اندازه خوشه را به 16 کیلوبایت یا حتی بیشتر افزایش دهید. هنگامی که نیاز بود تعداد زیادی فایل کوچک روی دیسک ذخیره شود، این مشکل ایجاد می کرد. از آنجایی که فضای ذخیره سازی فایل به صورت خوشه ای اختصاص داده می شود، حتی یک فایل بسیار کوچک نیز باید فضای دیسک زیادی را اختصاص دهد.

در نتیجه، ظاهراً آخرین تلاش دیگری برای بهبود سیستم فایل FAT انجام شد - اندازه سلول جدول تخصیص فایل به 32 افزایش یافت. این امر امکان قالب بندی دیسک های صدها مگابایتی و واحدهای گیگابایتی را با استفاده از یک اندازه خوشه نسبتا کوچک فایل سیستم جدید با نام FAT-32 شناخته شد.

استاندارد 8.3

قبل از ظهور مایکروسافت ویندوز 95، کاربران کامپیوترهای شخصی مجبور بودند از "استاندارد 8.3" بسیار ناخوشایند برای نامگذاری فایل ها استفاده کنند که در آن نام فایل باید از 8 کاراکتر به اضافه 3 کاراکتر پسوند تشکیل می شد. این محدودیت نه تنها توسط رابط برنامه نویسی سیستم عامل MS-DOS، بلکه توسط ساختار ورودی دایرکتوری سیستم فایل FAT اعمال شد.

پس از اصلاح ساختار ورودی های دایرکتوری، محدودیت تعداد کاراکترها در نام فایل عملا حذف شد. نام فایل در حال حاضر می تواند تا 255 کاراکتر طول داشته باشد که بدیهی است در بیشتر موارد کافی است. با این حال، این سیستم فایل FAT اصلاح شده با سیستم عامل MS-DOS و همچنین با پوسته مایکروسافت ویندوز نسخه 3.1 و 3.11 در حال اجرا در محیط آن ناسازگار شد.

در مقاله ما "بازیابی اطلاعات در پارتیشن های چربی" منتشر شده در این سایت، می توانید در مورد فرمت های ساختارهای چربی داخلی اطلاعات بیشتری کسب کنید.

محدودیت های سیستم فایل FAT

هنگام تصمیم گیری در مورد استفاده از سیستم فایل FAT برای فرمت کردن درایو، باید از محدودیت های ذاتی آن آگاه باشید. این محدودیت ها اول از همه به حداکثر اندازه یک درایو FAT و همچنین حداکثر اندازه یک فایل موجود در این درایو مربوط می شود.

حداکثر اندازه یک درایو منطقی FAT-16 4 گیگابایت است که با استانداردهای مدرن بسیار کوچک است. با این حال، مایکروسافت ایجاد دیسک های FAT-16 بزرگتر از 200 مگابایت را توصیه نمی کند بنابراین فضای دیسک بسیار ناکارآمد استفاده خواهد شد.

از نظر تئوری، حداکثر اندازه یک درایو FAT-32 می تواند 8 ترابایت باشد که برای استقرار هر برنامه مدرن کافی است. این مقدار با ضرب حداکثر تعداد خوشه ها (268,435,445) در حداکثر اندازه خوشه مجاز در FAT-32 (32 KB) به دست می آید.

با این حال، در عمل وضعیت کمی متفاوت به نظر می رسد.

به دلیل محدودیت های داخلی، ابزار ScanDisk در مایکروسافت 95/98 قادر به کار با دیسک های بزرگتر از 127.53 گیگابایت نیست. یک سال پیش، چنین محدودیتی مشکلی ایجاد نمی کرد، اما امروزه دیسک های ارزان قیمت 160 گیگابایتی قبلاً در بازار ظاهر شده اند و به زودی حجم آنها حتی بیشتر خواهد شد.

در مورد سیستم عامل های جدید Microsoft Windows 2000/XP، آنها قادر به ایجاد پارتیشن های FAT-32 بزرگتر از 32 گیگابایت نیستند. اگر به پارتیشن هایی با این اندازه یا بیشتر نیاز دارید، مایکروسافت به شما پیشنهاد می کند که از سیستم فایل NTFS استفاده کنید.

یکی دیگر از محدودیت های قابل توجه FAT-32 بر روی اندازه فایل ها اعمال می شود - نمی تواند بیش از 4 گیگابایت باشد. این محدودیت، برای مثال، هنگام ضبط کلیپ‌های ویدیویی روی دیسک یا هنگام ایجاد فایل‌های پایگاه داده بزرگ تأثیر خواهد گذاشت.

دایرکتوری FAT-32 می تواند حداکثر 65534 فایل را ذخیره کند.

معایب FAT

علاوه بر محدودیت هایی که در بالا به آنها اشاره شد، سیستم فایل FAT دارای معایب دیگری نیز می باشد. ظاهراً مهمترین آنها فقدان کامل ابزارهای کنترل دسترسی و همچنین امکان از دست دادن اطلاعات در مورد مکان همه پرونده ها پس از تخریب یک جدول FAT نسبتاً فشرده و کپی آن است.

با بوت کردن کامپیوتر از یک فلاپی دیسک سیستم، مهاجم می تواند به راحتی به فایل های ذخیره شده روی دیسک با سیستم فایل FAT دسترسی پیدا کند. پس از آن کپی کردن این فایل ها در یک دستگاه ZIP یا سایر رسانه های ذخیره سازی خارجی برای او دشوار نخواهد بود.

هنگام استفاده از FAT بر روی دیسک های سرور، ارائه تمایز قابل اعتماد و قابل انعطاف دسترسی کاربر به فهرست ها غیرممکن است. به همین دلیل و همچنین به دلیل تحمل خطای پایین آن، FAT معمولاً در سرورها استفاده نمی شود.

وجود جداول تخصیص فایل فشرده FAT این سیستم فایل را به یک هدف آسیب پذیر برای ویروس های رایانه ای تبدیل می کند - کافی است قطعه اولیه یک دیسک FAT را از بین ببرید و تقریباً تمام داده ها از بین می روند.

سیستم فایل NTFS

فایل سیستم مدرن NTFS که توسط مایکروسافت برای سیستم عامل Microsoft Windows NT توسعه یافته است، فاقد محدودیت ها و معایب FAT است. از زمان آغاز به کار، سیستم فایل NTFS در حال ظهور دستخوش چندین پیشرفت شده است که جدیدترین آنها (در زمان نگارش این مقاله) در مایکروسافت ویندوز XP ساخته شده است.

در سیستم فایل NTFS، تمام ویژگی‌های فایل (نام، اندازه، محل وسعت فایل روی دیسک و غیره) در فایل مخفی سیستم $MFT ذخیره می‌شوند. برای ذخیره اطلاعات مربوط به هر فایل (و دایرکتوری) در $MFT از یک تا چند کیلوبایت تخصیص داده می شود. با تعداد زیادی فایل ذخیره شده روی دیسک، حجم فایل $MFT می تواند به ده ها یا حتی صدها مگابایت برسد.

فایل های کوچک (به ترتیب صدها بایت) مستقیماً در $MFT ذخیره می شوند که دسترسی به آنها را به طور قابل توجهی سرعت می بخشد.

البته توجه داشته باشید که سربار NTFS برای ذخیره اطلاعات سیستم، اگرچه از سربار FAT بیشتر است، اما در مقایسه با حجم دیسک های مدرن هنوز خیلی زیاد نیست. با توجه به این واقعیت که فایل $MFT معمولا نزدیکتر به وسط دیسک قرار دارد، تخریب اولین آهنگ های یک دیسک NTFS منجر به عواقب مرگباری مانند تخریب مناطق اولیه یک دیسک FAT نمی شود.

سیستم فایل NTFS دارای ویژگی های بسیاری است که در FAT یافت نمی شوند. آنها به شما امکان می دهند در مقایسه با FAT به انعطاف پذیری، قابلیت اطمینان و امنیت بسیار بیشتری دست یابید.

بیایید برخی از جالب ترین ویژگی های NTFS در نسخه های مدرن را فهرست کنیم.

ابزارهای کنترل دسترسی

ابزارهای کنترل دسترسی NTFS کاملاً منعطف هستند و به شما امکان می دهند دسترسی را در سطح فایل ها و دایرکتوری های فردی کنترل کنید و دسترسی به آنها را برای کاربران یا گروه های مختلف کاربران فراهم کنید (یا مسدود کنید).

اگرچه در نگاه اول ممکن است به نظر برسد که ابزارهای کنترل دسترسی فقط برای سرورهای فایل مورد نیاز هستند، اما اگر چندین کاربر به یک رایانه دسترسی داشته باشند نیز مورد نیاز خواهند بود.

رمزگذاری فایل

اگر دیسک فیزیکی NTFS به دست مهاجم بیفتد، ابزارهای کنترل دسترسی ذکر شده در بالا بی فایده خواهند بود. با استفاده از ابزارهای مدرن، محتویات چنین دیسکی را می توان به راحتی در هر محیط سیستم عامل - DOS، مایکروسافت ویندوز یا لینوکس خواند.

به منظور محافظت از فایل های کاربر در برابر دسترسی غیرمجاز، سیستم عامل های Microsoft Windows 2000/XP رمزگذاری اضافی فایل های ذخیره شده در پارتیشن های NTFS را فراهم می کند. و اگرچه قدرت چنین رمزگذاری ممکن است خیلی زیاد نباشد، در بیشتر موارد کاملاً کافی است.

RAID نرم افزاری

با استفاده از NTFS می توانید یک آرایه نرم افزاری به اصطلاح RAID 1 (Mirrored set) ایجاد کنید. این آرایه که از دو دیسک فیزیکی یا منطقی با اندازه یکسان تشکیل شده است، به شما امکان می‌دهد فایل‌ها را کپی (یا به قول خودشان «آینه») کنید.

چنین آرایه ای می تواند فایل های شما را در صورت خرابی فیزیکی یکی از دیسک های تشکیل دهنده آرایه ذخیره کند، بنابراین اغلب برای افزایش قابلیت اطمینان سیستم دیسک استفاده می شود.

مجموعه های حجم

سیستم فایل NTFS به شما امکان می دهد چندین پارتیشن واقع در یک یا چند دیسک فیزیکی را در یک حجم منطقی ترکیب کنید. این ممکن است لازم باشد، به عنوان مثال، برای ذخیره فایل های پایگاه داده بزرگ که بر روی یک دیسک فیزیکی قرار نمی گیرند، یا ایجاد یک فهرست با حجم کل فایل هایی که از اندازه دیسک فیزیکی بیشتر است.

مجموعه هایی که از چندین پارتیشن یا دیسک فیزیکی ایجاد می شوند Volume Set (در اصطلاح مایکروسافت ویندوز NT) یا Spanned Volume (در اصطلاحات Windows 2000/XP) نامیده می شوند.

بسته بندی فایل ها

برای صرفه جویی در فضای دیسک، می توانید از قابلیت NTFS برای بسته بندی (فشرده سازی) فایل ها استفاده کنید. علاوه بر این، NTFS به شما امکان می دهد فایل هایی به اصطلاح پراکنده (sparse) ایجاد کنید که حاوی مناطقی از داده های پوچ هستند. چنین فایل هایی می توانند بزرگ باشند اما فضای دیسک کمی را اشغال می کنند زیرا فقط بایت های قابل توجه فایل در واقع ذخیره می شوند.

توجه داشته باشید که بسته بندی فایل ها باعث کاهش سرعت می شود. با این حال، این شرایط همیشه مهم نخواهد بود. به عنوان مثال، اسناد اداری را می توان بدون کاهش قابل توجه سرعت بسته بندی کرد، اما این را نمی توان در مورد فایل های پایگاه داده که تعداد زیادی از کاربران به طور همزمان به آنها دسترسی دارند، گفت. با دیسک‌های نسبتا ارزان و با ظرفیت بالا در بازار، رسانه‌های بسته‌بندی باید فقط در صورت نیاز مورد استفاده قرار گیرند. با این حال، این مورد برای سایر ویژگی های NTFS نیز صدق می کند.

فایل های چند رشته ای

در صورت لزوم، چندین جریان اطلاعات را می توان در یک فایل ضبط شده روی یک دیسک NTFS ذخیره کرد. این امکان به ویژه فراهم کردن فایل های سند با اطلاعات اضافی، ذخیره چندین نسخه از اسناد در یک فایل (به عنوان مثال، به زبان های مختلف)، ذخیره کد برنامه و داده ها در جریان های جداگانه یک فایل و غیره را فراهم می کند.

روابط سخت

لینک های سخت (لینک های سخت) به شما این امکان را می دهند که با قرار دادن این نام ها (یعنی پیوندهای فایل) در دایرکتوری های مختلف، چندین نام مختلف را به یک فایل فیزیکی اختصاص دهید. حذف یک پیوند، خود فایل را حذف نمی کند. تنها زمانی که تمام لینک های فایل از بین برود، خود فایل حذف می شود.

توجه داشته باشید که چنین ویژگی هایی برای سیستم های فایل مورد استفاده در سیستم عامل های مشابه یونیکس، به عنوان مثال، در لینوکس، FreeBSD، و غیره معمول است.

لغو امتیاز

اشیاء سیستم NTFS مانند Reparse points به شما این امکان را می دهد که هر فایل یا دایرکتوری را نادیده بگیرید. در این مورد، برای مثال، فایل‌ها یا دایرکتوری‌هایی که به ندرت استفاده می‌شوند را می‌توان روی نوار مغناطیسی ذخیره کرد و فقط در صورت لزوم روی دیسک بارگذاری کرد.

انتقال ها

با استفاده از انتقال NTFS، می توانید دیگری را سوار کنید HDDیا سی دی این ویژگی در ابتدا در سیستم های فایل سیستم عامل های مشابه یونیکس وجود داشت.

سهمیه فضای دیسک

سیستم فایل NTFS، که در مایکروسافت ویندوز 2000/XP استفاده می‌شود، به شما امکان می‌دهد فضای دیسک در دسترس کاربران را نقل قول یا محدود کنید. این ویژگی به ویژه هنگام ایجاد سرورهای فایل مفید است.

ورود به سیستم را تغییر دهید

در طول کار خود، سیستم عامل اقدامات مختلفی را بر روی فایل ها انجام می دهد (ایجاد، اصلاح، حذف). همه این تغییرات در یک مجله ویژه ایجاد شده در یک حجم NTFS ذخیره می شوند و می توانند توسط برنامه ها استفاده شوند کپی رزرو کنید، سیستم های نمایه سازی و غیره ثبت تغییرات قابلیت اطمینان سیستم فایل را افزایش می دهد و در برخی موارد اجازه می دهد تا پس از خرابی های غیر مهم سیستم عامل و سخت افزار به کار ادامه دهد. اگرچه، البته، بیشتر خرابی های جدی منجر به نیاز به بازیابی اطلاعات از یک نسخه پشتیبان یا استفاده از ابزارهای ویژه بازیابی اطلاعات می شود.

محدودیت های NTFS

با وجود ویژگی های فراوان، سیستم فایل NTFS محدودیت هایی نیز دارد. با این حال، در بیشتر موارد آنها نقش مهمی ایفا نمی کنند.

حداکثر اندازه یک درایو منطقی NTFS تقریباً 18446744 ترابایت است که بدیهی است برای همه برنامه های مدرن و همچنین برنامه هایی که در آینده نزدیک ظاهر می شوند کافی است. حداکثر اندازه فایل حتی بزرگتر است، بنابراین این محدودیت نیز قابل توجه نیست.

هیچ محدودیتی برای تعداد فایل های ذخیره شده در یک دایرکتوری NTFS وجود ندارد، بنابراین این مزیت نسبت به FAT نیز دارد.

مقایسه NTFS و FAT برای سرعت دسترسی به فایل

از نظر آینده، عملکرد، امنیت و قابلیت اطمینان، NTFS بسیار جلوتر از FAT است. با این حال، مقایسه عملکرد این فایل سیستم ها نتیجه روشنی به دست نمی دهد، زیرا عملکرد به عوامل مختلفی بستگی دارد.

از آنجایی که FAT در عملکرد و ساختارهای داخلی بسیار ساده تر از NTFS است، FAT احتمالاً در هنگام کار با دایرکتوری های کوچک سریعتر است. با این حال، اگر محتویات دایرکتوری به قدری کوچک باشد که به طور کامل در یک یا چند ورودی فایل $MFT قرار گیرد، یا برعکس، اگر دایرکتوری بسیار بزرگ باشد، NTFS "برنده" خواهد شد.

هنگام جستجوی فایل‌ها یا دایرکتوری‌های موجود (زیرا نیازی به اسکن کامل محتویات دایرکتوری ندارد)، هنگام دسترسی به فایل‌های کوچک (به ترتیب صدها بایت)، کف دست به احتمال زیاد به NTFS می‌رود. در صورت تکه تکه شدن شدید دیسک

برای افزایش کارایی NTFS، می‌توانید اندازه کلاستر را افزایش دهید، اما این می‌تواند منجر به استفاده بیهوده از فضای دیسک در هنگام ذخیره تعداد زیادی فایل بزرگتر از 1-2 کیلوبایت و ده‌ها کیلوبایت شود. با افزایش اندازه کلاستر به 64 کیلوبایت، می توانید حداکثر بهبود عملکرد را داشته باشید، اما باید از بسته بندی فایل ها و استفاده از ابزارهای یکپارچه سازی صرف نظر کنید.

بسته‌بندی فایل‌های واقع در دیسک‌های کوچک (حدود 4 گیگابایت) ممکن است عملکرد را افزایش دهد، در حالی که فشرده‌سازی دیسک‌های بزرگ ممکن است عملکرد را کاهش دهد. در هر صورت بسته بندی باعث بار اضافی بر روی CPU می شود.

بنابراین چه چیزی را انتخاب کنید - FAT یا NTFS؟

همانطور که می بینید، NTFS مزایای بی شماری نسبت به FAT دارد و محدودیت های آن در بیشتر موارد ناچیز است. اگر با انتخاب فایل سیستم مواجه هستید، ابتدا از NTFS و در مرحله دوم از FAT استفاده کنید.

چه موانعی برای جایگزینی FAT با NTFS وجود دارد؟

جدی ترین مانع، نیاز به استفاده از Microsoft Windows NT/2000/XP است. این سیستم عامل به حداقل 64 مگابایت برای اجرای صحیح نیاز دارد. حافظه دسترسی تصادفیو یک پردازنده با فرکانس ساعت حداقل 200-300 مگاهرتز. با این حال، این الزامات تنها توسط رایانه های بسیار قدیمی که قادر به اجرای نسخه های مدرن مایکروسافت ویندوز نیستند، برآورده نمی شوند.

اگر رایانه شما می‌تواند تحت ویندوز مایکروسافت 2000/XP اجرا شود و یک برنامه کاربردی منحصراً برای مایکروسافت ویندوز 95/98/ME طراحی نشده است، توصیه می‌کنیم در اسرع وقت به یک سیستم عامل جدید بروید و این FAT را جایگزین کنید. NTFS.

در عین حال، شما همچنین افزایش قابل توجهی در قابلیت اطمینان کار خواهید داشت، زیرا. پس از نصب تمام سرویس بسته های لازم و همچنین نسخه های صحیح درایورهای دستگاه های جانبی، Microsoft Windows 2000/XP بسیار پایدار کار خواهد کرد.

در برخی موارد، شما باید چندین سیستم فایل را در یک دیسک فیزیکی ترکیب کنید. به عنوان مثال، اگر رایانه شما دارای سه سیستم عامل Microsoft Windows ME، Microsoft Windows XP و Linux است، می توانید سه سیستم فایل ایجاد کنید - FAT، NTFS و Ext2FS. اولین آنها هنگام کار در Microsoft Windows ME و Linux "قابل مشاهده" خواهد بود ، دومی - فقط در Microsoft Windows XP و سومی - فقط در لینوکس (توجه داشته باشید که در LINUX امکان دسترسی به پارتیشن های NTFS نیز وجود دارد).

اما اگر در حال ایجاد یک سرور (فایل، پایگاه داده یا وب) بر اساس Microsoft Window NT/2000/XP هستید، NTFS تنها انتخاب معقول است. تنها در این صورت امکان دستیابی به ثبات، قابلیت اطمینان و امنیت لازم سرور وجود خواهد داشت.

همچنین یک نظر عمومی پذیرفته شده (و به نظر ما اشتباه) وجود دارد که کاربران رایانه خانگی به سیستم عامل Microsoft Window NT/2000/XP یا سیستم فایل NTFS نیاز ندارند.

البته، اگر از رایانه منحصراً برای بازی استفاده می شود، به دلایل سازگاری، بهتر است Microsoft Windows 98/ME را نصب کرده و درایوها را به صورت FAT فرمت کنید. با این حال، اگر نه تنها در دفتر کار، بلکه در خانه نیز کار می کنید، بهتر است از راه حل های مدرن، حرفه ای و قابل اعتماد استفاده کنید. این امر به ویژه به سازماندهی محافظت در برابر نفوذ به رایانه شما از طریق اینترنت، محدود کردن دسترسی به دایرکتوری ها و فایل های دارای داده های حیاتی و همچنین افزایش شانس بازیابی موفقیت آمیز اطلاعات در صورت بروز انواع مختلف خرابی کمک می کند.

ولادیمیر مشکوف

معماری سیستم فایل FAT

مشخصات کلی فایل سیستم FAT. ساختار پارتیشن با فایل سیستم FAT

فایل سیستم FAT (جدول تخصیص فایل) توسط بیل گیتس و مارک مک دونالد در سال 1977 توسعه یافت و در ابتدا در سیستم عامل 86-DOS مورد استفاده قرار گرفت. به منظور دستیابی به قابلیت حمل برنامه ها از سیستم عامل CP/M به 86-DOS، محدودیت های قبلی در نام فایل ها را حفظ کرد. 86-DOS بعداً توسط مایکروسافت خریداری شد و پایه ای برای MS-DOS 1.0 شد که در آگوست 1981 منتشر شد. FAT برای کار با فلاپی دیسک های کوچکتر از 1 مگابایت طراحی شده بود و در ابتدا از هارد دیسک پشتیبانی نمی کرد.

ساختار پارتیشن FAT در شکل نشان داده شده است.

در سیستم فایل FAT، فضای دیسک یک پارتیشن منطقی به دو ناحیه تقسیم می شود - ناحیه سیستم و ناحیه داده (شکل 1 را ببینید). ناحیه سیستم هنگام قالب بندی ایجاد و مقداردهی اولیه می شود و متعاقباً هنگام دستکاری ساختار فایل به روز می شود. ناحیه سیستم فایل سیستم های FAT از اجزای زیر تشکیل شده است:

  • رکورد بوت (رکورد بوت، BR);
  • منطقه ذخیره؛
  • جداول تخصیص فایل؛
  • ناحیه دایرکتوری ریشه (در FAT32 وجود ندارد).

ناحیه داده یک دیسک منطقی شامل فایل ها و دایرکتوری های تابع ریشه است و به بخش هایی با همان اندازه تقسیم می شود - خوشه ها. یک خوشه ممکن است از یک یا چند بخش متوالی روی یک دیسک تشکیل شده باشد. تعداد سکتورها در یک خوشه باید مضربی از 2N باشد و می تواند مقادیری از 1 تا 64 داشته باشد. اندازه خوشه به نوع سیستم فایل مورد استفاده و اندازه دیسک منطقی بستگی دارد.

هدف، ساختار و انواع جدول تخصیص فایل

FAT نام خود را از جدول تخصیص فایل به همین نام گرفته است - جدول تخصیص فایل، FAT. جدول تخصیص فایل اطلاعات مربوط به خوشه های دیسک منطقی را ذخیره می کند. هر خوشه مربوط به یک ورودی در جدول FAT است که حاوی اطلاعاتی در مورد آزاد بودن یا اشغال شدن خوشه توسط داده های فایل است. اگر خوشه توسط یک فایل اشغال شده باشد، آدرس خوشه حاوی قسمت بعدی فایل در عنصر مربوطه جدول تخصیص فایل نشان داده می شود. تعداد خوشه اولیه اشغال شده توسط فایل در ورودی دایرکتوری حاوی ورودی فایل ذخیره می شود. آخرین عنصر لیست خوشه ها حاوی علامت پایان فایل (EOF - End Of File) است. دو عنصر اول FAT محفوظ است.

سیستم فایل FAT همیشه از ابتدا تا انتها فضای خالی دیسک را به صورت متوالی پر می کند. هنگام ایجاد یک فایل جدید یا گسترش یک فایل موجود، به دنبال اولین خوشه رایگان در جدول تخصیص فایل می گردد. اگر در حین کار، برخی از فایل‌ها حذف شدند، در حالی که اندازه برخی دیگر تغییر کرد، خوشه‌های خالی حاصل در سراسر دیسک پراکنده می‌شوند. اگر خوشه های حاوی داده های فایل در یک ردیف نباشند، فایل تکه تکه می شود.

انواع چربی های زیر وجود دارد - FAT12، FAT16، FAT32. نام نوع FAT از اندازه عنصر مشتق شده است: عنصر FAT12 دارای اندازه 12 بیت (1.5 بایت)، FAT16 - 16 بیت (2 بایت)، FAT32 - 32 بیت (4 بایت) است. در FAT32، چهار بیت مهم رزرو شده و در طول عملکرد سیستم عامل نادیده گرفته می شوند.

دایرکتوری ریشه

جداول تخصیص فایل توسط دایرکتوری ریشه دنبال می شوند. هر فایل و دایرکتوری فرعی در دایرکتوری ریشه دارای یک ورودی دایرکتوری 32 بایتی است که شامل نام فایل، ویژگی های آن (بایگانی، مخفی، سیستم و فقط خواندنی) و تاریخ و زمان ایجاد (یا آخرین اصلاح) است. و همچنین اطلاعات دیگر برای سیستم های فایل FAT12 و FAT16، موقعیت دایرکتوری ریشه روی پارتیشن و اندازه آن ثابت است. در FAT32، دایرکتوری ریشه می تواند در هر نقطه از ناحیه داده پارتیشن قرار داشته باشد و اندازه دلخواه داشته باشد.

فرمت های نام فایل

یکی از ویژگی های نسخه های اولیه FAT (FAT12 و FAT16) استفاده از نام فایل های کوتاه است. نام کوتاه از دو فیلد تشکیل شده است - یک فیلد 8 بایتی حاوی نام فایل و یک فیلد 3 بایتی حاوی پسوند (قالب "8.3"). اگر نام فایل وارد شده توسط کاربر کوتاهتر از 8 کاراکتر باشد، با فاصله (کد 0x20) پر می شود. اگر پسوند وارد شده کوتاهتر از سه بایت باشد، با فاصله نیز پر می شود.

ساختار ورودی دایرکتوری برای نام فایل کوتاه در جدول 1 نشان داده شده است.

اولین بایت نام کوتاه، عملکردهای نشانگر اشغال دایرکتوری را انجام می دهد:

  • اگر اولین بایت 0xE5 باشد، ورودی دایرکتوری رایگان است و می تواند هنگام ایجاد یک فایل جدید استفاده شود.
  • اگر اولین بایت 0x00 باشد، ورودی دایرکتوری رایگان است و شروع یک ناحیه دایرکتوری تمیز است (بعد از آن هیچ ورودی فعالی وجود ندارد).

جدول 1. ساختار ورودی دایرکتوری برای نام فایل کوتاه

جانبداری

اندازه (بایت) محتوا
0x00 11 نام فایل کوتاه
0x0B 1 ویژگی های فایل
0x0C 1 برای ویندوز NT رزرو شده است.
0x0D 1 فیلدی که زمان ایجاد فایل را مشخص می کند (شامل ده ها میلی ثانیه است). این فیلد فقط در FAT32 پردازش می شود
0x0E 1 زمان ایجاد فایل این فیلد فقط در FAT32 پردازش می شود
0x10 2 تاریخ ایجاد فایل این فیلد فقط در FAT32 پردازش می شود
0x12 2 تاریخ آخرین باری که فایل برای نوشتن یا خواندن داده ها به آن دسترسی داشت. این فیلد فقط در FAT32 پردازش می شود
0x14 2 کلمه بالای اولین شماره خوشه فایل. این فیلد فقط در FAT32 پردازش می شود
0x16 2 زمان آخرین عملیات نوشتن روی فایل
0x18 2 تاریخی که پرونده آخرین بار در آن نوشته شده است
0x1A 2 کلمه کم اولین شماره خوشه فایل
0x1C 4 اندازه فایل بر حسب بایت

تعدادی محدودیت برای استفاده از کاراکترهای ASCII در یک نام کوتاه وجود دارد:

  • شما نمی توانید از کاراکترهایی با کدهای کمتر از 0x20 استفاده کنید (به جز کد 0x05 در اولین بایت نام کوتاه).
  • کاراکترهای با کدهای 0x22، 0x2A، 0x2B، 0x2C، 0x2E، 0x2F، 0x3A، 0x3B، 0x3C، 0x3D، 0x3E، 0x3F، 0x5B، 0x5C، 0x5C، 0 نمی توانند استفاده شوند.
  • شما نمی توانید از یک کاراکتر فاصله (0x20) در اولین بایت یک نام استفاده کنید.

سیستم های فایل FAT32 و VFAT (FAT مجازی، پسوند FAT16) از نام فایل های طولانی (LFN) پشتیبانی می کنند. نام طولانی در ورودی های دایرکتوری مجاور ورودی اصلی ذخیره می شود. نام فایل نه با کاراکترهای ASCII، بلکه با یونیکد نوشته شده است. حداکثر 13 کاراکتر یونیکد را می توان در یک ورودی دایرکتوری ذخیره کرد. بخش استفاده نشده آخرین قطعه با کدهای 0xFFFF پر شده است. ساختار ورودی دایرکتوری برای نام فایل طولانی در جدول 2 نشان داده شده است.

جدول 2. ساختار ورودی دایرکتوری برای نام فایل طولانی

جانبداری اندازه (بایت) محتوا
0x00 1 شماره قطعه
0x01 10 کاراکترهای 1-5 نام فایل در یونیکد
0x0B 1 ویژگی های فایل
0x0C 1 پرچم گذاری بایت
0x0D 1 جمع چک نام کوتاه
0x0E 12 کاراکترهای 6-11 نام فایل در یونیکد
0x1A 2 تعداد اولین خوشه (پر شده با صفر)
0x1C 4 کاراکترهای 12-13 نام فایل در یونیکد

بخش بوت

بخش اول یک دیسک منطقی FAT شامل بخش بوت و بلوک پارامتر BIOS است. بخش اولیه این بلوک برای همه انواع چربی یکسان است (جدول 3). تفاوت در ساختار بخش های بوت برای انواع مختلف FAT از 0x24 آفست شروع می شود. برای FAT12 و FAT16، ساختار در جدول 4، برای FAT32 - در جدول 5 نشان داده شده است.

جدول 3. بخش اولیه بخش بوت

جانبداری اندازه، بایت شرح
0x00 3 پرش بدون قید و شرط (jmp) به کد بوت
0x03 8 شناسه سازنده
0x0B 2 بایت در هر بخش (512)
0x0D 1 تعداد بخش ها در یک خوشه
0x0E 2 تعداد سکتورهای یدکی در ناحیه یدکی پارتیشن، از اولین سکتور پارتیشن شروع می شود
0x10 1 تعداد جداول FAT (کپی)
0x11 2 برای FAT12/FAT16 - تعداد توصیفگرهای فایل 32 بایتی در دایرکتوری ریشه؛ برای FAT32 این فیلد مقدار 0 دارد
0x13 2 تعداد کل بخش ها در بخش؛ اگر این فیلد حاوی 0 باشد، سپس تعداد سکتورها توسط فیلد در افست 0x20 تنظیم می شود
0x15 1 نوع رسانه. برای هارد دیسک 0xF8 است. برای یک فلاپی دیسک (2 طرف، 18 بخش در هر آهنگ) - 0xF0
0x16 2 برای FAT12/FAT16، این فیلد شامل تعدادی بخش است اشغال شده توسط یک کپی از FAT؛ برای FAT32 این فیلد مقدار 0 دارد
0x18 2 تعداد بخش ها در هر آهنگ (برای وقفه 0x13)
0x1A 2 تعداد سطوح کاری (برای وقفه 0x13)
0x1C 4 تعداد سکتورهای پنهان قبل از پارتیشن
0x20 4 تعداد کل بخش ها در پارتیشن. فیلد در صورتی استفاده می شود که بخش بیش از 65535 بخش، در غیر این صورت فیلد حاوی 0 است.

جدول 4. ساختار بخش بوت FAT12/FAT16

جانبداری اندازه، بایت توضیحات 0x24 1 وقفه درایو شماره 0x13 0x25 1 0x26 1 پرچم رکورد بوت پیشرفته (0x29) 0x27 4 شماره درایو منطقی 0x2B 11 برچسب دیسک 0x36 8 رشته متن با مخفف نوع فایل سیستم

جدول 5. ساختار بخش بوت FAT32

اندازه، بایت توضیحات 4 تعداد سکتورهای اشغال شده توسط یک کپی از FAT 2 شماره FAT فعال 2 شماره نسخه FAT32: بایت بالا - شماره نسخه،جزئی - شماره تجدید نظر. مقدار فعلی 0:0 است 4 شماره خوشه برای اولین خوشه دایرکتوری ریشه 2 شماره بخش ساختار FSINFO در قسمت یدکی دیسک منطقی 2 شماره بخش (در قسمت یدکی درایو منطقی) استفاده می شودبرای ذخیره یک نسخه پشتیبان از بخش بوت 12 رزرو شده (شامل 0)

جانبداری
0x24
0x28
0x2A
0x2C
0x30
0x32
0x34

علاوه بر فیلدهای 2 و 3 فهرست شده در جداول، بخش صفر دیسک منطقی باید حاوی کد 0x55 در بایت با افست 0x1FE و کد 0xAA در بایت بعدی (offset 0x1FF) باشد. دو بایت مشخص شده نشانه درایو بوت است.

بنابراین، بخش بوت دو عملکرد مهم را انجام می دهد: ساختار داده روی دیسک را توصیف می کند، و همچنین به شما اجازه می دهد سیستم عامل را بوت کنید.

در یک دیسک منطقی FAT32، یک ساختار FSIinfo اضافی وجود دارد که در بخش اول منطقه یدکی قرار دارد. این ساختار حاوی اطلاعاتی در مورد تعداد خوشه های آزاد روی دیسک و تعداد اولین خوشه آزاد در جدول FAT است. فرمت ساختار در جدول 6 توضیح داده شده است.

جدول 6. ساختار بخش FSIinfo و بخش بوت پشتیبان FAT32

اندازه، بایت توضیحات 4 مقدار 0x41615252 امضایی است که نشان می دهد این بخش دارای ساختار FSIinfo است. 480 رزرو شده (شامل 0) 4 مقدار 0x61417272 (امضا) 4 شامل تعداد فعلی خوشه های رایگان روی دیسک است. اگر فیلد حاوی مقدار 0xFFFFFFFF باشد، تعداد خوشه‌های آزاد ناشناخته است و باید محاسبه شود. 4 شامل شماره خوشه ای است که درایور دیسک باید از آنجا شروع به جستجو برای خوشه های رایگان کند. اگر فیلد حاوی مقدار 0xFFFFFFFF باشد، جستجو برای خوشه های آزاد باید از خوشه شماره 2 شروع شود. 12 رزرو شده (شامل 0) 4 امضا 0xAA550000 - علامت پایان ساختار FSIinfo

جانبداری
0x000
0x004
0x1E4
0x1E8
0x1EC
0x1F0
0x1FC

برای دسترسی به محتویات یک فایل واقع در یک پارتیشن با سیستم فایل FAT، باید شماره اولین کلاستر فایل را بدست آورید. این شماره، همانطور که قبلاً مشخص کردیم، بخشی از ورودی فهرست حاوی ورودی فایل است. شماره اولین خوشه با ورودی جدول FAT مطابقت دارد که آدرس خوشه حاوی قسمت بعدی فایل را ذخیره می کند. ورودی FAT مربوط به آخرین خوشه در زنجیره حاوی امضای انتهای فایل است. برای FAT12 این مقدار 0xFFF، برای FAT16 0xFFFF، برای FAT32 0xFFFFFFFF است.

بیایید پیاده سازی نرم افزار الگوریتم خواندن برای هر نوع FAT را بررسی کنیم و با FAT16 شروع کنیم.

تمام متون منبع در نظر گرفته شده در مقاله در وب سایت مجله موجود است.

اجرای نرم افزار الگوریتم خواندن فایل از پارتیشن منطقی با سیستم فایل FAT16

بیایید ماژولی ایجاد کنیم که اولین خوشه های N از یک فایل ایجاد شده در یک پارتیشن با سیستم فایل FAT16 را بخواند. پارامتر N (تعداد خوشه برای خواندن) یک متغیر است و توسط کاربر تنظیم می شود. نام فایل از فرمت "8.3" پیروی می کند. کوتاه است. ماژول تحت سیستم عامل لینوکس کار می کند.

فایل های هدر لازم را تعریف کنید:

#عبارتند از

#عبارتند از

#عبارتند از

#عبارتند از

#عبارتند از

#include "split.h"

فایل هدر split.h دارای محتویات زیر است:

#عبارتند از

#define SHORT_NAME 13 // حداکثر طول یک نام فایل کوتاه

ساختار split_name(

U8name; // نام فایل

U8 ext; // فرمت فایل

Int name_len، // طول نام فایل

ext_len; // طول پسوند فایل

ساختار split_name برای ذخیره اجزای یک نام فایل کوتاه (نام و پسوند) و طول آنها طراحی شده است.

فایل هدر انواع ساختاری را تعریف می کند که اجزای اصلی سیستم فایل FAT را توصیف می کند - بخش بوت، بخش FSIinfo، ساختارهای ورودی دایرکتوری برای نام فایل های کوتاه و بلند.

بیایید به طور خلاصه زمینه هایی را که در هر یک از این ساختارها گنجانده شده است، در نظر بگیریم.

    1. ساختار بخش بوت ساختار fat_boot_sector:
      • __s8 system_id- شناسه سیستم؛
      • __u8 sektor_size - اندازه بخش در بایت.
      • __u8 cluster_size- اندازه خوشه در بخش ها
      • __u16 رزرو شده است- تعداد بخش های یدکی در قسمت یدکی پارتیشن؛
      • __u8 چربی- تعداد کپی های FAT؛
      • __u8 dir_entries- تعداد توصیفگرهای فایل 32 بایتی در فهرست اصلی.
      • __u8 بخش- تعداد سکتورها در هر پارتیشن؛ اگر این فیلد 0 باشد، از فیلد total_sect استفاده می شود.
      • __u8media– نوع رسانه ای که فایل سیستم بر روی آن ایجاد شده است.
      • __u16 طول_چربی- اندازه چربی در بخش ها؛
      • __u32 total_sect– اندازه پارتیشن FAT در سکتورها (اگر سکتورها == 0).
      • __u32 fat32_length– اندازه FAT32 در بخش ها
      • __u32 root_cluster– شماره اولین خوشه دایرکتوری ریشه؛
      • __u16 info_sector- تعداد بخش حاوی ساختار FSIinfo.

فیلدهای زیر این ساختار فقط توسط FAT32 استفاده می شود:

  1. ساختار بخش FSIinfo ساختار fat_boot_fsinfo:
    • __u32 امضاء1– امضا 0x41615252;
    • __u32 امضا2– امضا 0x61417272;
    • __u32 خوشه_رایگانتعداد خوشه های آزاد است. اگر فیلد حاوی -1 باشد، جستجو برای خوشه های آزاد باید از خوشه شماره 2 شروع شود.
  2. ساختار ورودی دایرکتوری نام کوتاه ساختار msdos_dir_entry:
    • __s8 نام، قسمت– نام و پسوند فایل؛
    • __u8 attr- ویژگی های فایل؛
    • __u8 ctime_ms– این فیلد زمان ایجاد فایل را تا ms مشخص می کند (فقط FAT32 استفاده می شود).
    • __u16 ساعت- زمان ایجاد فایل (فقط FAT32 استفاده می شود)؛
    • __u16 cdate- تاریخ ایجاد فایل (فقط FAT32 استفاده می شود)؛
    • تاریخ __u16- تاریخ آخرین دسترسی به فایل (فقط FAT32 استفاده می شود)؛
    • __u16 starthi- 16 بیت بالای شماره اولین خوشه فایل (فقط FAT32 استفاده می شود).
    • __u16 ساعت، تاریخ، شروع– زمان و تاریخ ایجاد فایل، شماره اولین خوشه فایل.
    • اندازه __u32- اندازه فایل (به بایت).
  3. ساختار ورودی فهرست نام طولانی:
    • __u8 شناسه- شماره عنصر؛
    • __u8 name0_4- کاراکترهای 1 - 5 نام؛
    • __u8 attr- ویژگی های فایل؛
    • __u8 alias_checksum- جمع چک نام کوتاه؛
    • __u8 name5_10- کاراکترهای 6 - 11 نام؛
    • __u8 name11_12- کاراکترهای 12 - 13 نام.

بیایید بررسی اجرای نرم افزار الگوریتم را ادامه دهیم و نام پارتیشنی را که سیستم فایل FAT16 روی آن ایجاد شده است تعیین کنیم:

#ifndef FAT16_PART_NAME

#define FAT16_PART_NAME "/dev/hda1"

#endif

ساختارهای جهانی:

struct fat_boot_sector fbs; // ساختار بخش بوت

struct msdos_dir_entry dentry; // ساختار عنصر دایرکتوری

متغیرهای جهانی:

U16 * fat16; // جدول FAT16 را اینجا کپی کنید

اندازه_قطعه U16; // اندازه بخش (از FAT16)

U16 dir_entries; // تعداد توصیفگرهای 32 بایتی

// در دایرکتوری ریشه (0 برای FAT32)

بخش های U16؛ // تعداد کل بخش ها در پارتیشن

U32 fat16_size; // اندازه FAT16

U32 root_size; // اندازه دایرکتوری ریشه

U16 byte_per_cluster; // اندازه خوشه بر حسب بایت

U16 next_cluster; // خوشه بعدی در زنجیره

چربی بین المللی؛

بیایید با تابع اصلی شروع کنیم:

int main()

int num;

نام کامل فایلی را که می خواهیم محتوای آن را بخوانیم تنظیم می کنیم. به شما یادآوری می کنم که ما فقط با نام فایل های کوتاه کار می کنیم. روش کار با نام های طولانی در این مقاله پوشش داده نشده است.

U8 *full_path = "/Folder1/Folder2/text.txt";

فایل دستگاه را باز کنید:

سخت = باز (FAT16_PART_NAME، O_RDONLY)؛

اگر (سخت< 0) {

خطا (FAT16_PART_NAME)؛

خروج (-1)؛

10 خوشه اول فایل را خواندیم. خواندن توسط تابع fat16_read_file() انجام می شود. پارامترهای تابع، نام کامل فایل و تعداد خوشه هایی برای خواندن هستند. این تابع تعداد خوشه های خوانده شده یا -1 را در صورت بروز خطا در حین خواندن برمی گرداند:

Num = fat16_read_file(full_path, 10);

اگر (شماره< 0) perror("fat16_read_file");

Else printf("Read %d clusters ", num);

فایل دستگاه را ببندید و خارج شوید:

بستن (سخت)؛

بازگشت 0;

عملکرد خواندن خوشه های فایل به شرح زیر است:

int fat16_read_file(__u8 *full_path، int num)

ساختار split_name sn; // ساختار برای ذخیره اجزای سازنده فایل

U8 tmp_name_buff; // بافر برای ذخیره موقت عناصر ترکیبی مسیر کامل فایل

استاتیک int i = 1;

int n;

U8 *tmp_buff;

U16 start_cluster، next_cluster;

ما هنگام در نظر گرفتن تابع اصلی، پارامترهای تابع را فهرست کردیم.

عملیات آماده سازی - بافر tmp_name_buff و ساختار split_name sn را بازنشانی کنید:

اولین کاراکتر در نام مسیر مطلق یک فایل باید یک اسلش رو به جلو (/) باشد. بگذار چک کنیم:

بخش بوت را از پارتیشن بخوانید:

If(read_fbs()< 0) return -1;

بخش خواندن بوت اکنون در ساختار جهانی fat_boot_sector fbs است. بیایید اندازه بخش، تعداد ورودی ها در فهرست اصلی و تعداد کل بخش های پارتیشن را از این ساختار کپی کنیم:

اندازه خوشه را بر حسب بایت تعیین کنید:

Byte_per_cluster = fbs.cluster_size * 512

بیایید اطلاعات را در بخش بوت نمایش دهیم:

Printf("شناسه سیستم - %s ", fbs.system_id);

Printf("اندازه بخش - %d "، section_size);

Printf("اندازه خوشه - %d ", fbs.cluster_size);

Printf("Reserved - %d ", fbs.reserved);

Printf("تعداد FATs - %d ",fbs.fats);

Printf(" ورودی های Dir - %d "، dir_entries);

Printf("بخش - %d "، بخش);

Printf("رسانه - 0x%X"، fbs.media);

Printf("طول FAT16 - %u ", fbs.fat_length);

Printf("Total sect - %u ", fbs.total_sect);

Printf("بایت در هر خوشه - %d ", byte_per_cluster);

اندازه FAT16 را بر حسب بایت محاسبه کرده و می خوانیم:

fat16_size = fbs.fat_length * 512;

If(read_fat16()< 0) return -1;

خواندن دایرکتوری ریشه:

If(read_root_dentry()< 0) return -1;

نشانگر dir_entry اکنون در ناحیه حافظه حاوی ورودی های دایرکتوری ریشه قرار گرفته است. اندازه این ناحیه حافظه برابر با اندازه دایرکتوری ریشه (root_size) است.

(برای کنترل) محتویات دایرکتوری ریشه را در یک فایل جداگانه ذخیره کنید:

#ifdef DEBUG

بستن (چربی)؛

#endif

شروع ناحیه داده را محاسبه کنید:

data_start = 512 * fbs.reserved + fat16_size * fbs.fats + root_size;

با تمام ورودی های دایرکتوری ریشه، می توانیم به محتویات فایل test.txt برسیم. برای این منظور، ما یک چرخه را سازماندهی می کنیم. در بدنه چرخه، نام کامل فایل را تجزیه می کنیم و عناصر آن را برجسته می کنیم - زیر شاخه ها (دوتا از آنها Folder1 و Folder2 داریم) و نام فایل مورد نظر (test.txt).

در حالی که (1) (

Memset(tmp_name_buff, 0, SHORT_NAME);

Memset((void *)&sn, 0, sizeof(struct split_name));

برای (n = 0 ; n< SHORT_NAME; n++, i++) {

If((tmp_name_buff[n] == "/") || (tmp_name_buff[n] == "؟")) (

I++;

زنگ تفريح؛

tmp_name_buff[n] = "?";

ساختار split_name sn را با اطلاعات مناسب پر می کنیم. پر کردن توسط تابع split_name انجام می شود و نام فایل برای مطابقت با فرمت "8.3" بررسی می شود:

< 0) {

printf("نام معتبر نیست");

بازگشت -1;

برای هر عنصر از نام فایل کامل، خوشه اولیه را تعیین می کنیم. برای انجام این کار، در عناصر دایرکتوری (از ریشه شروع می شود) ورودی مربوط به عنصر نام کامل را جستجو می کنیم و این ورودی را می خوانیم. روال جستجو توسط تابع get_dentry() انجام می شود:

If(get_dentry(&sn)< 0) {

Printf ("هیچ فایلی وجود ندارد!");

بازگشت -1;

بررسی ویژگی های فایل اگر دایرکتوری است، محتویات آن را بخوانید و حلقه را ادامه دهید:

If(dentry.attr & 0x10) (

If(read_directory(dentry.start)< 0) return -1;

ادامه هید؛

اگر این یک فایل است، اولین خوشه های num را می خوانیم. برای کنترل، اطلاعات خوانده شده در یک فایل جداگانه ذخیره می شود:

If(dentry.attr & 0x20) (

Start_cluster = dentry.start;

tmp_buff = (__u8 *)malloc(byte_per_cluster); // محتویات خوشه در اینجا خوانده می شود

N = open("clust", O_CREAT|O_RDWR, 0600); // اطلاعات خوانده شده را در این فایل ذخیره کنید

اگر (n< 0) {

خطا ("باز")؛

بازگشت -1;

برای خواندن خوشه های فایل، یک حلقه سازماندهی می کنیم:

برای (i = 0; i< num; i++) {

محتویات کلاستر را در بافر tmp_buff می خوانیم و آن را در یک فایل جداگانه ذخیره می کنیم:

< 0) return -1;

< 0) {

خطا ("نوشتن");

close(n);

بازگشت -1;

ما از FAT16 تعداد خوشه بعدی اشغال شده توسط این فایل را می خوانیم. اگر این آخرین خوشه باشد، حلقه را شکسته و به تابع اصلی برمی گردیم:

#ifdef DEBUG

Printf ("OK. Read");

Printf("خوشه بعدی فایل - 0x%X .. ", next_cluster);

#endif

If(next_cluster == EOF_FAT16) (

#ifdef DEBUG

Printf("آخرین خوشه.");

#endif

رایگان (tmp_buff)؛

close(n);

بازگشت ++i;

#ifdef DEBUG

printf ("توقف خواندن");

#endif

بازگشت i;

بخش بوت FAT16 توسط تابع read_fbs() خوانده می شود. نتیجه در ساختار fbs جهانی قرار می گیرد:

int read_fbs()

If(read(hard,(__u8 *)&fbs, sizeof(fbs))< 0) return -1;

بازگشت 0;

خواندن جدول تخصیص فایل سیستم فایل FAT16 توسط تابع read_fat16() انجام می شود:

int read_fat16()

جستجوی U64 = (__u64)(fbs.reserved) * 512; // از ابتدای پارتیشن به FAT16 افست شد

Fat16 = (void *)malloc(fat16_size);

If(pred64(hard, (__u8 *)fat16, fat16_size, seek)< 0) return -1;

بازگشت 0;

دایرکتوری ریشه توسط تابع read_root_dentry() خوانده می شود:

int read_root_dentry()

U64 seek = (__u64)fbs.reserved * 512 + fat16_size * fbs.fats; // از ابتدای بخش به دایرکتوری ریشه افست می شود

Root_size = 32 * dir_entries; // اندازه دایرکتوری ریشه را محاسبه کنید

dir_entry = (__u8 *)malloc(root_size);

If(!dir_entry) بازگشت -1;

Memset(dir_entry, 0, root_size);

If(pred64(hard, dir_entry, root_size, seek)< 0) return -1;

بازگشت 0;

خواندن یک کلاستر متعلق به یک فایل توسط تابع read_cluster() انجام می شود. پارامترهای ورودی تابع عبارتند از شماره خوشه cluster_num و یک اشاره گر به بافر __u8 *tmp_buff جایی که نتیجه خواندن باید در آن قرار گیرد. افست به خوشه در پارتیشن با فرمول محاسبه می شود (نگاه کنید به):

SEEK = DATA_START + (CLUSTER_NUM - 2) * BYTE_PER_CLUSTER،

  • جستجو کنید- افست به یک خوشه در یک پارتیشن
  • DATA_START– شروع ناحیه داده
  • CLUSTER_NUM- شماره دنباله ای از خوشه
  • BYTE_PER_CLUSTER- اندازه خوشه بر حسب بایت

int read_cluster(__u16 cluster_num, __u8 *tmp_buff)

U64 seek = (__u64)(byte_per_cluster) * (cluster_num - 2) + data_start; // محاسبه افست به خوشه

< 0) return -1;

بازگشت 0;

تابع read_directory ورودی های یک دایرکتوری (نه ریشه) را می خواند و نتیجه را در ناحیه حافظه ای که با اشاره گر dir_entry به آن اشاره می کند قرار می دهد:

int read_directory (__u16 start_cluster)

Int i = 1;

U16 next_cluster;

برای(; ;i++) (

ما حافظه را برای ذخیره محتویات دایرکتوری اختصاص می دهیم، محتویات خوشه شروع را می خوانیم و مقدار خوشه بعدی را از جدول FAT16 دریافت می کنیم:

If(!dir_entry) بازگشت -1;

< 0) return -1;

Next_cluster = fat16;

بیایید محتویات دایرکتوری را در یک فایل جداگانه (برای کنترل) ذخیره کنیم:

#ifdef DEBUG

Printf("خوشه بعدی - 0x%X"، next_cluster);

Fat = open("dir16", O_CREAT|O_WRONLY, 0600);

Write (fat، dir_entry، root_size);

بستن (چربی)؛

#endif

اگر به آخرین خوشه رسید، از حلقه خارج شوید، در غیر این صورت با افزایش اندازه بافر dir_entry به اندازه یک خوشه دیگر، خواندن دایرکتوری را ادامه دهید:

If(next_cluster & EOF_FAT16) break;

start_cluster = next_cluster;

بازگشت 0;

تابع get_dentry() جستجویی را در محتویات دایرکتوری برای عنصر مربوط به فایل جستجو شده انجام می دهد. پارامترهای ورودی این تابع یک اشاره گر به ساختار split_name *sn است که حاوی عناصر نام فایل کوتاه است:

Int i = 0;

بافر جهانی dir_entry شامل آرایه ای از ورودی های دایرکتوری است که در آن به دنبال یک ورودی فایل (یا دایرکتوری) هستیم. برای جستجو ما یک چرخه سازماندهی می کنیم. در بدنه حلقه، عناصر کاتالوگ را در ساختار جهانی dentry کپی می کنیم و مقدار فیلدهای نام و ext این ساختار را با فیلدهای مربوطه ساختار split_name *sn مقایسه می کنیم. همزمانی این فیلدها به این معنی است که ورودی فایل مورد نظر را در آرایه عناصر دایرکتوری پیدا کرده ایم:

برای (; ; i++) (

If(!(memcmp(dentry.name، sn->name، sn->name_len)) &&

!(memcmp(dentry.ext، sn->ext، sn->ext_len)))

زنگ تفريح؛

اگر (!dentry.name) -1 را برگرداند;

#ifdef DEBUG

Printf("name - %s ", dentry.name);

Printf("start cluster - 0x%X", dentry.start);

Printf("اندازه فایل - %u "، dentry.size);

Printf("file attrib - 0x%X", dentry.attr);

#endif

بازگشت 0;

همه کدهای بالا در پوشه FAT16، فایل fat16.c قرار دارند. برای دریافت ماژول اجرایی، اجازه دهید یک Makefile با محتوای زیر ایجاد کنیم:

INCDIR = /usr/src/linux/include

PHONY=تمیز

Fat16: fat16.o split.o

Gcc -I$(INCDIR) $^ -g -o [ایمیل محافظت شده]

%o: %c

Gcc -I$(INCDIR) -DDEBUG -c $^

تمیز:

Rm -f *.o

Rm -f ./fat16

اجرای نرم افزار الگوریتم خواندن فایل از پارتیشن منطقی با سیستم فایل FAT12

به طور کلی، الگوریتم خواندن فایل از پارتیشن FAT12 با الگوریتم خواندن فایل از پارتیشن FAT16 یکسان است. تفاوت در روش خواندن عناصر از جدول FAT12 نهفته است. جدول FAT16 توسط ما به عنوان یک آرایه ساده از عناصر 16 بیتی در نظر گرفته شد. برای خواندن عناصر جدول FAT12، الگوریتم زیر پیشنهاد شده است:

  • عدد عنصر را در 1.5 ضرب کنید.
  • استخراج یک کلمه 16 بیتی از FAT با استفاده از نتیجه عملیات قبلی به عنوان افست.
  • اگر شماره عنصر زوج است، یک عملیات AND روی کلمه خوانده شده انجام دهید و 0x0FFF را بپوشانید. اگر عدد فرد است، کلمه خوانده شده از جدول را 4 بیت به سمت کم اهمیت ترین بیت ها تغییر دهید.

بر اساس این الگوریتم، تابع خواندن عناصر از جدول FAT12 را پیاده سازی می کنیم:

int get_cluster (__u16 cluster_num)

جستجوی U16;

خوشه U16;

ما افست را در جدول FAT12 محاسبه می کنیم و یک کلمه 16 بیتی را از جدول می خوانیم:

جستجو = (cluster_num * 3) / 2;

Memcpy((__u8 *)&clust, (__u8 *)(fat12 + seek), 2);

اگر عدد خوشه شروع یک عدد زوج باشد، مقدار خوانده شده از جدول را 4 بیت به سمت بیت های پایین تر منتقل می کنیم، اگر فرد باشد، آن را با 0x0FFF اضافه می کنیم:

If(cluster_num % 2) cluster >>= 4;

گروه دیگر &= 0x0FFF;

این قطعه را می توان در اسمبلر نیز پیاده سازی کرد:

" xorw %%ax، %%ax"

"btw $0، %%cx"

"jnc 1f"

"shrw $4، %%dx"

"jmp2f"

"1: andw $0x0FFF، %%dx"

"2: movw %%dx، %%ax"

:"=a" (بعدی)

:"d" (clust)، "c" (cluster_num));

نتیجه را برمی گردانیم:

خوشه بازگشت؛

بیایید نگاهی دقیق تر به خود الگوریتم بیندازیم. فرض کنید یک فایل روی یک پارتیشن FAT12 ایجاد شده است که کلاسترهای نهم و دهم را اشغال می کند. هر عنصر FAT12 12 بیت است. زیرا ما عناصر 16 بیتی را از جدول می خوانیم، سپس افست عنصر نهم برابر با 13 بایت خواهد بود (9 * 1.5 = 13، بقیه را دور بریزید)، در حالی که 4 بیت پایین به عنصر FAT هشتم تعلق دارد. آنها باید دور ریخته شوند و برای این کار کافی است عنصر خوانده شده را 4 بیت به سمت بیت های پایین تر تغییر دهید که توسط الگوریتم ارائه شده است. افست به عنصر دهم 15 بایت خواهد بود و 4 بیت بالا به عنصر یازدهم FAT تعلق دارد. برای دور انداختن آنها لازم است یک عملیات AND روی عنصر دهم و ماسک 0x0FFF انجام شود که با الگوریتم فوق نیز مطابقت دارد.

متون منبع ماژول برای خواندن یک فایل از پارتیشن FAT12 در پوشه FAT12، فایل fat12.c قرار دارد.

اجرای نرم افزار الگوریتم خواندن فایل از پارتیشن منطقی با سیستم فایل FAT32

الگوریتم خواندن فایل از یک پارتیشن با سیستم فایل FAT32 عملاً مانند FAT16 است، با این تفاوت که در FAT32 دایرکتوری ریشه می تواند در هر نقطه از پارتیشن قرار داشته باشد و اندازه دلخواه داشته باشد. بنابراین، برای جالب‌تر کردن آن، اجازه دهید کار را پیچیده‌تر کنیم - فرض کنید ما فقط شماره پارتیشن را با سیستم فایل FAT32 می‌دانیم. برای خواندن اطلاعات از این پارتیشن، ابتدا باید مختصات آن را تعیین کنید - افست پارتیشن از ابتدای دیسک. و برای این کار باید در مورد ساختار منطقی هارد دیسک ایده ای داشته باشید.

ساختار منطقی هارد دیسک

بیایید ساختار منطقی یک هارد دیسک مطابق با استاندارد مایکروسافت - "پارتیشن اصلی - پارتیشن توسعه یافته - پارتیشن های غیر DOS" را در نظر بگیریم.

فضای هارد دیسک را می توان به یک یا چند پارتیشن سازماندهی کرد و پارتیشن ها می توانند شامل یک یا چند درایو منطقی باشند.

روی هارد دیسک در آدرس فیزیکی 0-0-1 رکورد اصلی بوت (Master Boot Record, MBR) قرار دارد. ساختار MBR شامل عناصر زیر است:

  • بوت لودر غیر سیستمی (بوت استرپ غیر سیستمی - NSB)؛
  • جدول توضیحات پارتیشن دیسک (جدول پارتیشن، جدول پارتیشن، PT). در MBR در افست 0x1BE قرار دارد و 64 بایت را اشغال می کند.
  • امضای MBR دو بایت آخر MBR باید دارای عدد 0xAA55 باشد.

جدول پارتیشن مکان و ویژگی های پارتیشن ها را در هارد دیسک توضیح می دهد. پارتیشن های دیسک می توانند دو نوع باشند - اولیه (اولیه، اصلی) و توسعه یافته (گسترده). حداکثر تعداد پارتیشن های اصلی چهار پارتیشن است. وجود حداقل یک پارتیشن اصلی روی دیسک الزامی است. یک پارتیشن توسعه یافته را می توان به تعداد زیادی زیربخش - درایوهای منطقی تقسیم کرد. یک ساختار ساده از MBR در جدول 7 ارائه شده است. جدول پارتیشن در انتهای MBR قرار دارد، 16 بایت برای توصیف پارتیشن در جدول اختصاص داده شده است.

جدول 7. ساختار MBR

جانبداری اندازه، بایت 0 446 0x1BE 16 0x1CE 16 0x1DE 16 0x1EE 16 0x1FE 2

ساختار ورود به جدول پارتیشن در جدول 8 نشان داده شده است.

جدول 8. ساختار ورودی جدول پارتیشن

جانبداری اندازه، بایت محتوا
0x00 1 پرچم فعالیت (بخش 0 غیر فعال است، بخش 0x80 فعال است)
0x01 1 شماره سر دیسک که پارتیشن از آن شروع می شود
0x02 2 شماره سیلندر و شماره بخش که بخش از آن شروع می شود
0x04 1 کد نوع پارتیشن شناسه سیستم
0x05 1 شماره سر دیسک جایی که پارتیشن به پایان می رسد
0x06 2 شماره سیلندر و شماره بخش که قسمت را به پایان می رساند
0x08 4 عدد مطلق (منطقی) بخش اولیه پارتیشن
0x0C 4 اندازه پارتیشن (تعداد سکتورها)

اولین بایت در عنصر بخش، پرچم فعالیت بخش است (0 - غیر فعال، 0x80 - فعال). این برای تعیین اینکه آیا پارتیشن یک پارتیشن بوت سیستم است یا خیر و اینکه آیا هنگام راه اندازی رایانه لازم است سیستم عامل از آن بوت شود یا خیر. فقط یک بخش می تواند فعال باشد. پرچم فعالیت پارتیشن با مختصات ابتدای پارتیشن - سه بایت دنبال می شود که شماره سر، شماره بخش و شماره سیلندر را نشان می دهد. اعداد سیلندر و بخش با فرمت وقفه Int 0x13 آورده شده است. بیت‌های 0-5 حاوی عدد بخش هستند، بیت‌های 6-7 مهم‌ترین دو بیت از عدد سیلندر 10 بیتی هستند، بیت‌های 8-15 کم‌اهمیت‌ترین هشت بیت از شماره سیلندر هستند. سپس شناسه کد System ID را دنبال می کند که نشان می دهد این پارتیشن به یک یا سیستم عامل دیگر تعلق دارد. شناسه یک بایت را اشغال می کند. در پشت شناسه سیستم مختصات انتهای بخش وجود دارد - سه بایت که به ترتیب شامل اعداد سر، بخش و استوانه است. چهار بایت بعدی تعداد سکتورهای قبل از پارتیشن و چهار بایت آخر اندازه پارتیشن در سکتورها هستند.

بنابراین، یک عنصر جدول پارتیشن را می توان با استفاده از ساختار زیر توصیف کرد:

struct pt_struct(

U8 قابل بوت شدن؛ // پرچم فعالیت بخش

U8 start_part; // مختصات ابتدای بخش

U8 type_part; // شناسه سیستم

U8 end_part; // مختصات انتهای بخش

فرقه U32_before; // تعداد سکتورها قبل از پارتیشن

U32 sect_total; // اندازه پارتیشن در سکتورها (تعداد سکتورها در پارتیشن)

عنصر پارتیشن اولیه بلافاصله به بخش بوت دیسک منطقی اشاره می کند (همیشه فقط یک دیسک منطقی در پارتیشن اصلی وجود دارد) و عنصر پارتیشن توسعه یافته به لیستی از دیسک های منطقی اشاره می کند که از ساختارهایی به نام MBR ثانویه (MBR ثانویه، SMBR).

هر دیسک در یک پارتیشن توسعه یافته بلوک SMBR خود را دارد. SMBR ساختاری شبیه به MBR دارد، اما رکورد بوت (پر از صفر) ندارد و از چهار فیلد توصیفگر پارتیشن فقط دو مورد استفاده می شود. عنصر اول پارتیشن به درایو منطقی اشاره می کند، عنصر دوم به ساختار بعدی SMBR در لیست اشاره می کند. آخرین SMBR در لیست حاوی کد بخش صفر در عنصر دوم است.

بیایید به بررسی ماژول برای خواندن یک فایل از یک پارتیشن FAT32 برگردیم.

فایل های هدر:

#عبارتند از

#عبارتند از

#عبارتند از

#عبارتند از

#عبارتند از

امضای MBR:

#define SIGNATURE 0xAA55

فایل دستگاهی که اطلاعات پارتیشن از آن خوانده می شود:

#define DEVICE "/dev/hda"

اندازه ورودی جدول پارتیشن (16 بایت):

#define PT_SIZE 0x10

آرایه ساختارهای زیر کد نوع یک بخش را به نگاشت کاراکتر آن نگاشت می کند:

سیستم های ساختاری (

U8 part_type;

U8 *part_name;

struct systypes i386_sys_types = (

(0x00، "خالی")،

(0x01، "FAT12")،

(0x04، "FAT16<32M"},

(0x05، "گسترش یافته")،

(0x06، "FAT16")،

(0x0b، "Win95 FAT32")،

(0x0c، "Win95 FAT32 (LBA)")،

(0x0e، "Win95 FAT16 (LBA)")،

(0x0f، "Win95 Ext"d (LBA)")،

(0x82، "مبادله لینوکس")،

(0x83، لینوکس)

(0x85، "Linux توسعه یافته")،

(0x07، HPFS/NTFS)

بیایید تعداد عناصر آرایه i386_sys_types را با استفاده از ماکرو PART_NUM تعیین کنیم:

#define PART_NUM (sizeof(i386_sys_types) / sizeof(i386_sys_types))

محدودیتی برای تعداد درایوهای منطقی تعیین کنید:

#define MAX_PART 20

آرایه ساختاری زیر حاوی اطلاعاتی در مورد درایوهای منطقی روی دستگاه (هارد دیسک) خواهد بود:

struct pt_struct(

U8 قابل بوت شدن؛

U8 start_part;

U8 type_part;

U8 end_part;

فرقه U32_before;

U32 sect_total;

)pt_t;

درونی // توصیفگر فایل دستگاه

U8mbr; // MBR را در اینجا بشمارید

شماره پارتیشنی که فایل سیستم FAT32 روی آن ایجاد شده است:

#define FAT32_PART_NUM 5

بخش بوت، بخش FSIinfo و ساختارهای ورودی دایرکتوری (تعریف شده در فایل ):

struct fat_boot_sector fbs;

struct fat_boot_fsinfo fsinfo;

struct msdos_dir_entry dentry;

U32 *fat32 = NULL; // جدول FAT32 را اینجا کپی کنید

اندازه_قطعه U16; // اندازه بخش (از FAT32)

U16 dir_entries; // 0 برای FAT32

بخش های U16؛ // تعداد سکتورها در هر پارتیشن

U32 fat32_size; // اندازه FAT32

U32 data_start; // شروع منطقه داده

U16 byte_per_cluster; // چند بایت در خوشه وجود دارد (اندازه خوشه بر حسب بایت)

U32 next_cluster; // خوشه بعدی در زنجیره

U32 root_cluster; // ROOT Cluster - خوشه اولیه دایرکتوری ریشه

U8 *dir_entry = NULL; // اشاره گر به ورودی های دایرکتوری

U64 start_seek = 0; // شروع آفست به بخش (در بایت)

عملکرد اصلی:

int main()

int num = 0;

int cluster_num = 5; // چند دسته برای خواندن از فایل

U8 *full_path = "/Folder1/Folder2/readme"; // فایل برای خواندن

ما دستگاه را باز می کنیم، اطلاعاتی در مورد جدول پارتیشن روی دستگاه دریافت می کنیم و اطلاعات مربوط به پارتیشن ها را نمایش می دهیم:

سخت = باز (DEV_NAME، O_RDONLY)؛

اگر (سخت< 0) {

خطا (DEV_NAME)؛

خروج (-1)؛

If(get_pt_info(سخت)< 0) {

خطا ("get_pt_info");

خروج (-1)؛

Show_pt_info();

آفست شروع پارتیشن را محاسبه کنید:

Start_seek = (__u64)(pt_t.sect_before) * 512;

خوشه های مربوط به فایل را بخوانید:

Num = fat32_read_file(full_path، cluster_num);

اگر (شماره< 0) perror("fat32_read_file");

Else printf("خواندن %d خوشه\n"، num);

بستن (سخت)؛

بازگشت 0;

اطلاعات مربوط به جدول پارتیشن توسط تابع get_pt_info() خوانده می شود:

int get_pt_info (int hard)

Int i = 0;

U64 به دنبال;

جدول پارتیشن را از MBR می خوانیم و امضا را بررسی می کنیم:

Read_main_ptable(hard);

If(check_sign()< 0) {

Printf("امضای معتبر نیست!\n");

بازگشت -1;

ما به دنبال شناسه بخش توسعه یافته هستیم. اگر وجود داشته باشد، افست پارتیشن توسعه یافته را محاسبه می کنیم و اطلاعات مربوط به درایوهای منطقی را می خوانیم:

برای (;i< 4; i++) {

If((pt_t[i].type_part == 0xF) || \

(pt_t[i].type_part == 0x5) || \

(pt_t[i].type_part == 0x0C)) (

جستجو = (__u64)pt_t[i].sect_before * 512;

Read_ext_ptable (سخت، جستجو)؛

زنگ تفريح؛

بازگشت 0;

تابع خواندن جدول پارتیشن read_main_ptable():

void read_main_ptable (int hard)

If(read(hard, mbr, 512)< 0) {

خطا ("خواندن");

بستن (سخت)؛

خروج (-1)؛

Memset((void *)pt_t, 0, (PT_SIZE * 4));

Memcpy((void *)pt_t، mbr + 0x1BE، (PT_SIZE * 4));

برگشت؛

تابع بررسی امضا check_sign():

int check_sign()

علامت U16 = 0;

Memcpy((void *)&sign, (void *)(mbr + 0x1FE), 2);

#ifdef DEBUG

Printf("امضا - 0x%X\n"، sign);

#endif

If(sign != SIGNATURE) بازگشت -1;

بازگشت 0;

عملکرد خواندن جدول پارتیشن توسعه یافته:

void read_ext_ptable (int hard, __u64 seek)

int num = 4; // با شروع از این موقعیت، آرایه ساختارهای pt_t با اطلاعات مربوط به درایوهای منطقی پر می شود.

U8 smbr;

داده های ورودی:

  • سخت- توصیف کننده فایل دستگاه؛
  • به دنبال- افست به پارتیشن توسعه یافته از ابتدای دیسک (بر حسب بایت).

برای به دست آوردن اطلاعات در مورد دیسک های منطقی، یک حلقه سازماندهی می کنیم:

برای(;;num++) (

ما SMBR واقع در افست جستجو را از ابتدای دیسک می خوانیم:

memset((void *)smbr, 0, 512);

pred64 (hard, smbr, 512, search);

دو عنصر از جدول pt_t را پر می کنیم که از موقعیت شماره شروع می کنیم. عنصر اول به درایو منطقی اشاره می کند و عنصر دوم به ساختار SMBR زیر اشاره می کند:

Memset((void *)&pt_t, 0, PT_SIZE * 2);

Memcpy((void *)&pt_t، smbr + 0x1BE، PT_SIZE * 2);

ما اصلاحیه ای را در قسمت "تعداد بخش اولیه" انجام می دهیم - شمارش معکوس از ابتدای دیسک است:

Pt_t.sect_before += (seek / 512);

اگر کد نوع پارتیشن صفر باشد، دیسک منطقی دیگری وجود ندارد:

If(!(pt_t.type_part)) break;

آفست را به SMBR بعدی محاسبه کنید:

جستجو = ((__u64)(pt_t.sect_before + pt_t.sect_total)) * 512;

برگشت؛

تابع show_pt_info() اطلاعاتی درباره درایوهای منطقی یافت شده در دستگاه نمایش می دهد:

void show_pt_info()

Int i = 0, n;

#ifdef DEBUG

Printf("تعداد پارتیشن های روی دیسک - %d\n"، PART_NUM);

#endif

برای (;i< MAX_PART; i++) {

اگر(!pt_t[i].type_part) break;

Printf("\nنوع پارتیشن %d - ", i);

برای (n = 0; n< PART_NUM; n++) {

If(pt_t[i].type_part == i386_sys_types[n].part_type) (

Printf("%s\n", i386_sys_types[n].part_name);

زنگ تفريح؛

If(n == PART_NUM) printf("نوع ناشناخته\n");

Printf("پرچم بوت - 0x%X\n", pt_t[i].bootable);

Printf("بخش های بخش %d - %d\n"، i، pt_t[i].sect_total);

Printf("بخش های قبل از بخش %d - %d\n\n"، i، pt_t[i].sect_before);

برگشت؛

خواندن خوشه های فایل از یک پارتیشن FAT32 توسط تابع fat32_read_file() انجام می شود. این تابع شباهت های زیادی با تابع fat16_read_file() دارد، بنابراین برای توضیحات دقیق به نقطه 6 مراجعه کنید:

int fat32_read_file(__u8 *full_path، int num)

ساختار split_name sn;

U8 tmp_name_buff;

Int i = 1, n;

U32 start_cluster، next_cluster;

U8 *tmp_buff;

عملیات آماده سازی - پاک کردن بافر، ساختار و بررسی اولین اسلش:

Memset(tmp_name_buff, 0, SHORT_NAME);

Memset((void *)&sn, 0, sizeof(struct split_name));

If(full_path != "/") -1;

خواندن بخش بوت:

If(read_fbs()< 0) return -1;

Memcpy((void *)§or_size, (void *)fbs.sector_size, 2);

Memcpy((void *)&dir_entries, (void *)fbs.dir_entries, 2);

Memcpy((void *)§ors, (void *)fbs.sectors, 2);

ساختار FSIinfo را می خوانیم و امضا را در آن نمایش می دهیم:

If(read_fs_info()< 0) return -1;

Printf("Signature1 - 0x%X\n"، fsinfo.signature1);

Printf("Signature2 - 0x%X\n"، fsinfo.signature2);

Fat32_size = fbs.fat32_length * 512; // اندازه FAT32 بر حسب بایت

data_start = 512 * fbs.reserved + fat32_size * 2; // شروع فیلد داده

Byte_per_cluster = fbs.cluster_size * 512; // اندازه خوشه بر حسب بایت

root_cluster = fbs.root_cluster; // شماره خوشه دایرکتوری ریشه

FAT32 را بخوانید:

If(read_fat32()< 0) return -1;

تخصیص حافظه برای ورودی های دایرکتوری:

Dir_entry = (__u8 *)malloc(byte_per_cluster);

If(!dir_entry) بازگشت -1;

خواندن دایرکتوری ریشه:

If(read_directory(root_cluster)< 0) return -1;

ما مسیر کامل فایل را تجزیه می کنیم و هر عنصر را به اجزاء جدا می کنیم:

در حالی که (1) (

Memset(tmp_name_buff, 0, SHORT_NAME);

Memset((void *)&sn, 0, sizeof(struct split_name));

برای (n = 0 ; n< SHORT_NAME; n++, i++) {

tmp_name_buff[n] = مسیر_تمام[i];

If((tmp_name_buff[n] == "/") || (tmp_name_buff[n] == "\0")) (

I++;

زنگ تفريح؛

tmp_name_buff[n] = "\0";

If(split_name(tmp_name_buff، &sn)< 0) {

Printf("نام معتبر\n");

بازگشت -1;

If(get_dentry(&sn)< 0) {

Printf("هیچ فایلی وجود ندارد!\n");

بازگشت -1;

برای بدست آوردن شماره شروع کلاستر در سیستم فایل FAT32، باید از کلمه بالای اولین شماره کلاستر فایل - فیلد starthi ساختار دندانپزشکی استفاده کنید:

Start_cluster = (((__u32)dentry.starthi<< 16) | dentry.start);

بررسی بایت ویژگی:

If(dentry.attr & 0x10) ( // این یک دایرکتوری است

If(read_directory(start_cluster)< 0) return -1;

ادامه هید؛

If(dentry.attr & 0x20) ( // و این یک فایل است

tmp_buff = (__u8 *)malloc(byte_per_cluster);

N = open("clust", O_CREAT|O_RDWR, 0600);

اگر (n< 0) {

خطا ("باز")؛

بازگشت -1;

Printf("اولین کلاستر فایل - 0x%X .. ", start_cluster);

برای (i = 0; i< num; i++) {

Memset(tmp_buff، 0، byte_per_cluster)؛

If(read_cluster(start_cluster, tmp_buff)< 0) return -1;

If(write(n، tmp_buff، byte_per_cluster)< 0) {

خطا ("نوشتن");

بازگشت -1;

If(next_cluster == EOF_FAT32) (

رایگان (tmp_buff)؛

close(n);

بازگشت ++i;

start_cluster = next_cluster;

بازگشت i;

هدف از سه تابع زیر بدست آوردن محتویات ناحیه سیستم است. بخش بوت، ساختار FSIinfo و جدول FAT32:

1) تابع read_fbs() بخش بوت را می خواند:

int read_fbs()

If(pred64(hard, (__u8 *)&fbs, sizeof(fbs), start_seek)< 0) return -1;

بازگشت 0;

2) تابع read_fs_info() ساختار FSIinfo را می خواند:

int read_fs_info()

جستجوی U64 = (__u64)fbs.info_sector * 512 + start_seek;

If(pred64(hard, (__u8 *)&fsinfo, sizeof(fsinfo), جستجو)< 0) return -1;

بازگشت 0;

3) تابع read_fat32() جدول FAT32 را می خواند:

int read_fat32()

U64 seek = (__u64)fbs.reserved * 512 + start_seek;

Fat32 = (void *)malloc(fat32_size);

اگر (!fat32) بازگشت -1;

If(pred64(hard, (__u8 *)fat32, fat32_size, seek)< 0) return -1;

بازگشت 0;

تابع read_cluster() خوشه را با عدد مشخص شده می خواند:

int read_cluster(__u32 cluster_num, __u8 *tmp_buff)

U64 seek = (__u64)(byte_per_cluster) * (cluster_num - 2) + data_start + start_seek;

If(pred64(hard, tmp_buff, byte_per_cluster, seek)< 0) return -1;

بازگشت 0;

خواندن دایرکتوری ها (از جمله ریشه) توسط تابع read_directory() مدیریت می شود:

int read_directory (__u32 start_cluster)

Int i = 2;

U32 next_cluster;

پارامترهای تابع، دسته کاتالوگ شروع هستند. ما محتویات دایرکتوری را در بافر جهانی dir_entry می خوانیم:

If(read_cluster(start_cluster, dir_entry)< 0) return -1;

خوشه_بعدی = fat32;

اگر دایرکتوری یک خوشه را اشغال می کند، خارج شوید، اگر نه، اندازه حافظه را افزایش دهید و به خواندن ادامه دهید:

برای(; ;i++) (

start_cluster = next_cluster;

Dir_entry = (__u8 *)realloc(dir_entry, i * byte_per_cluster);

If(!dir_entry) بازگشت -1;

If(read_cluster(start_cluster, (dir_entry + (i - 1) * byte_per_cluster))< 0) return -1;

خوشه_بعدی = fat32;

If((next_cluster == EOF_FAT32) || (next_cluster == 0xFFFFFF8)) 0 را برگرداند.

بازگشت 0;

آخرین تابعی که به آن نگاه خواهیم کرد، محتویات یک دایرکتوری را برای عنصری جستجو می کند که با فایل مورد نظر ما مطابقت دارد:

int get_dentry(struct split_name *sn)

Int i = 0;

نشانگر dir_entry روی یک ناحیه حافظه حاوی آرایه ای از ورودی های دایرکتوری تنظیم می شود که در آن ما به دنبال یک فایل (یا دایرکتوری) هستیم. برای جستجو، یک حلقه سازماندهی می کنیم و ورودی پیدا شده را در ساختار کلی دندانپزشکی قرار می دهیم:

برای(;;i++) (

Memcpy((void *)&dentry، dir_entry + i * sizeof(dentry)، sizeof(dentry));

If(!(memcmp(dentry.name، sn->name، sn->name_len)) &&

!(memcmp(dentry.ext، sn->ext، sn->ext_len)))

زنگ تفريح؛

اگر (!dentry.name) -1 را برگرداند;

بازگشت 0;

این نتیجه بررسی ماژول برای خواندن یک فایل از یک پارتیشن FAT32 است.

کد منبع ماژول در پوشه FAT32، فایل fat32.c قرار دارد.

تفاوت در سازماندهی ذخیره سوابق در مورد پرونده ها در فهرست های سیستم های فایل FAT و EXT2

چند کلمه در مورد تفاوت در سازماندهی ذخیره سوابق در مورد پرونده ها در فهرست های سیستم های فایل FAT و EXT2. ساختار فایل سیستم EXT2 در پوشش داده شده است.

ما به تازگی با FAT آشنا شدیم - در آن همه عناصر دایرکتوری دارای یک مقدار ثابت هستند. هنگام ایجاد یک فایل، درایور سیستم فایل به دنبال اولین موقعیت خالی می گردد و آن را با اطلاعات مربوط به فایل پر می کند. اگر طول دایرکتوری در یک خوشه قرار نگیرد، خوشه دیگری برای آن اختصاص داده می شود و به همین ترتیب.

در نظر بگیرید که اوضاع در EXT2 چگونه است.

فرض کنید یک پارتیشن با سیستم فایل EXT2 داریم، اندازه بلوک 4096 بایت است. در این قسمت یک دایرکتوری ایجاد می کنیم. اندازه دایرکتوری برابر با اندازه بلوک خواهد بود - 4096 بایت. در دایرکتوری، سیستم عامل بلافاصله دو ورودی ایجاد می کند - یک ورودی برای دایرکتوری فعلی و یک ورودی برای دایرکتوری والد. ورودی دایرکتوری فعلی 12 بایت طول می کشد، در حالی که ورودی دایرکتوری والد 4084 بایت طول خواهد داشت. بیایید یک فایل در این دایرکتوری ایجاد کنیم. پس از آن، سه ورودی در دایرکتوری وجود خواهد داشت - ورودی دایرکتوری فعلی 12 بایت طول دارد، ورودی دایرکتوری والد از قبل 12 بایت طول دارد و ایجاد فایل داده شدهطول، همانطور که احتمالا حدس زدید، 4072 بایت است. اگر فایل ایجاد شده را حذف کنیم، طول ورودی دایرکتوری والد دوباره به 4084 بایت افزایش می یابد.

بنابراین، هنگام ایجاد یک فایل، درایور سیستم فایل EXT2 در دایرکتوری برای ورودی با حداکثر طول جستجو می کند و آن را تقسیم می کند و فضا را برای ورودی جدید اختصاص می دهد. خوب، اگر باز هم فضای کافی وجود نداشته باشد، یک بلوک دیگر برای دایرکتوری اختصاص داده می شود و طول دایرکتوری برابر با 8192 بایت می شود.

و در پایان - یک ویرایش کوچک در مقاله "معماری سیستم فایل EXT2".

این ویرایش مربوط به تابع get_i_num() برای تعیین شماره inode از نام فایل است. نسخه قدیمی این تابع به شکل زیر بود:

int get_i_num (char *name)

int i = 0، rec_len = 0;

ساختار ext2_dir_entry_2dent;

برای (;i< 700; i++) {

اگر(!memcmp(dent.name, name, dent.name_len)) break;

Rec_len += dent.rec_len;

برگرداندن dent.inode;

نسخه اصلاح شده:

int get_i_num (char *name)

* پارامتر تابع - نام فایل. مقدار برگشتی شماره inode فایل است.

int rec_len = 0;

ساختار ext2_dir_entry_2dent; // این ساختار فرمت ورودی دایرکتوری ریشه را توصیف می کند:

* بافر جهانی حاوی آرایه ای از ورودی های دایرکتوری است. برای تعیین شماره inode یک فایل، باید پیدا کنید

* در این آرایه یک ورودی با نام این فایل وجود دارد. برای انجام این کار، یک چرخه را سازماندهی می کنیم:

برای(؛؛) (

/* ورودی های دایرکتوری را در ساختار دندانه دار کپی کنید: */

Memcpy((void *)&dent, (buff + rec_len), sizeof(dent));

* طول نام فایل صفر به این معنی است که ما روی تمام ورودی های دایرکتوری تکرار کرده ایم

* و ورودی هایی با نام فایل ما یافت نشد. پس زمان بازگشت است:

اگر(!dent.name_len) -1 را برگرداند;

/* جستجو با مقایسه نام فایل ها انجام می شود. اگر نام ها مطابقت دارند، از حلقه خارج شوید: */

If(!memcmp(dent.name, name, strlen(name))) break;

/* اگر نام ها مطابقت ندارند، به ورودی بعدی بروید: */

Rec_len += dent.rec_len;

/* در صورت موفقیت، شماره inode فایل را برگردانید: */

برگرداندن dent.inode;

ادبیات:

  1. وی کولاکوف. برنامه نویسی در سطح سخت افزار: یک مرجع ویژه ویرایش دوم / - سن پترزبورگ: پیتر، 2003 - 848 ص.
  2. A.V.Gordeev، A.Yu.Molchanov. سیستمیک نرم افزار/ - سن پترزبورگ: پیتر - 2002
  3. مشکوف وی. معماری سیستم فایل ext2. - مجله «مدیر سیستم»، شماره 11 (12)، آبان 1382 - 26-32 ص.

در تماس با

راه های زیادی برای ذخیره اطلاعات و برنامه ها بر روی هارد دیسک وجود دارد. یک سیستم بسیار شناخته شده که اطلاعات مختلف را در قالب فایل ذخیره می کند و آنها را در پوشه هایی با یک انتساب منحصر به فرد گروه بندی می کند. با این حال، تعداد کمی از مردم به نحوه ذخیره فیزیکی اطلاعات در رسانه ها فکر می کردند.

برای اینکه اطلاعات روی یک رسانه فیزیکی ذخیره شوند، باید برای استفاده در سیستم عامل کامپیوتر آماده شوند. سیستم عاملیک منطقه آزاد از دیسک را برای ذخیره اطلاعات اختصاص می دهد. برای انجام این کار، باید دیسک را به ظروف کوچک - بخش ها تقسیم کنید. فرمت کردن یک دیسک در سطح پایین، اندازه خاصی را برای هر بخش اختصاص می دهد. سیستم عامل این بخش ها را به خوشه ها گروه بندی می کند. قالب‌بندی سطح بالا همه خوشه‌ها را به یک اندازه تنظیم می‌کند، معمولاً بین 2 تا 16 بخش. در آینده، یک یا چند خوشه برای هر فایل اختصاص داده می شود. اندازه کلاستر به سیستم عامل، ظرفیت دیسک و سرعت مورد نیاز بستگی دارد.

علاوه بر فضای ذخیره سازی فایل ها روی دیسک، مناطقی برای عملکرد سیستم عامل وجود دارد. این مناطق برای ذخیره اطلاعات بوت و اطلاعات برای نگاشت آدرس فایل ها به مکان های فیزیکی روی دیسک طراحی شده اند. ناحیه بوت برای راه اندازی سیستم عامل استفاده می شود. پس از بارگیری بایوس، ناحیه بوت دیسک خوانده و اجرا می شود تا سیستم عامل راه اندازی شود.

سیستم فایل FAT

سیستم فایل FAT با سیستم عامل Microsoft DOS ظاهر شد و پس از آن چندین بار بهبود یافت. دارای نسخه های FAT12، FAT16 و FAT32 می باشد. نام FAT خود از استفاده سیستم فایل از نوعی پایگاه داده به شکل "جدول تخصیص فایل" (File Allocation Table) گرفته شده است که شامل ورودی برای هر خوشه روی دیسک است. شماره نسخه به تعداد بیت های استفاده شده در شماره آیتم های جدول اشاره دارد. بنابراین، سیستم فایل محدودیتی در اندازه دیسک پشتیبانی شده دارد. در سال 1987 از دیسک های بزرگتر از 32 مگابایت پشتیبانی نمی کرد. با ظهور ویندوز 95 آمد یک نسخه جدیدسیستم فایل FAT32 با پشتیبانی تئوری از درایوهای تا 2 ترابایت. مشکلات دائمی با پشتیبانی از دیسک های بزرگ به دلیل تعداد ثابت عناصر، محدود به تعداد بیت های استفاده شده در تعیین موقعیت خوشه ظاهر می شوند. به عنوان مثال، نسخه FAT16 بیش از 2 16 یا 65536 کلاستر را پشتیبانی نمی کند. تعداد بخش ها در یک خوشه نیز محدود است.

یکی دیگر از مشکلات دیسک های بزرگ عدم ​​امکان استفاده از فضای بزرگ اختصاص داده شده برای فایل های کوچک بود. با توجه به محدود بودن تعداد خوشه ها، اندازه آنها افزایش یافت تا کل ظرفیت دیسک را پوشش دهد. این منجر به استفاده ناکارآمد از فضا در هنگام ذخیره سازی بیشتر فایل هایی می شود که مضربی از اندازه کلاستر نیستند. به عنوان مثال، FAT32 کلاسترهای 16 کیلوبایتی را برای پارتیشن های دیسک از 16 گیگابایت تا 32 گیگابایت اختصاص می دهد. برای ذخیره یک فایل 20 کیلوبایتی به دو کلاستر 16 کیلوبایتی نیاز دارید که 32 کیلوبایت روی دیسک اشغال می کند. فایل های 1 کیلوبایتی 16 کیلوبایت فضای دیسک را اشغال می کنند. بنابراین، به طور متوسط، 30-40٪ از ظرفیت دیسک برای ذخیره فایل های کوچک هدر می رود. پارتیشن بندی دیسک به پارتیشن های کوچک به شما این امکان را می دهد که اندازه کلاستر را کاهش دهید، اما در عمل برای دیسک هایی با ظرفیت بیش از 200 گیگابایت استفاده نمی شود.

تکه تکه شدن فایل نیز مشکل کوچکی از سیستم فایل نیست. از آنجایی که ممکن است برای قرار دادن یک فایل به چند خوشه نیاز باشد، که ممکن است به صورت فیزیکی یکی پس از دیگری قرار نگیرند، زمان لازم برای خواندن باعث کاهش سرعت برنامه ها می شود. بنابراین، نیاز دائمی به.

سیستم فایل NTFS

در اوایل دهه 1990، مایکروسافت شروع به توسعه نرم افزار کاملاً جدیدی کرد که برای محیط هایی با مصرف منابع بیشتر نسبت به کاربران خانگی معمولی طراحی شده بود. برای نیازهای تجارت و صنعت، منابع ارائه شده توسط سیستم عامل های ویندوز مبتنی بر DOS ناکافی شده است. شرکت مایکروسافت با IBM روی سیستم عامل OS / 2 با سیستم فایل HPFS (سیستم فایل با عملکرد بالا) کار کرد. توسعه شرکتی موفقیتی به همراه نداشت و به زودی هر شرکت دوباره راه خود را رفت. مایکروسافت نسخه های مختلفی از این عامل را توسعه داده است سیستم های ویندوز NT که ویندوز 2000 و ویندوز XP روی آن ساخته شده است. هر یک از آنها از نسخه خود از سیستم فایل NTFS استفاده می کند که به تکامل خود ادامه می دهد.

NTFS (سیستم فایل فناوری جدید) سیستم فایل استاندارد برای سیستم عامل های مبتنی بر ویندوز NT است. برای جایگزینی FAT طراحی شده است. NTFS نسبت به FAT انعطاف پذیرتر است. نواحی سیستم آن عمدتاً فایل‌ها را به جای ساختارهای ثابت مانند FAT ذخیره می‌کند و به آنها اجازه می‌دهد در حین استفاده تغییر، گسترش یا جابجا شوند. یک مثال ساده جدول فایل اصلی (MFT) است. MFT نوعی پایگاه داده با اطلاعات مختلف در مورد فایل های روی دیسک است. فایل های کوچک (1 کیلوبایت یا کمتر) را می توان مستقیماً در MFT ذخیره کرد. برای فایل‌های بزرگ، NTFS خوشه‌ها را اختصاص می‌دهد، اما بر خلاف FAT، اندازه کلاستر معمولاً از 4 کیلوبایت تجاوز نمی‌کند و روش فشرده‌سازی داخلی مشکلات فضای استفاده‌نشده برای فایل‌ها را برطرف می‌کند. و در NTFS می توانید از .

سیستم فایل NTFS برای یک محیط چند کاربره طراحی شده است و دارای مکانیزم های امنیتی و کنترل دسترسی داخلی است. به عنوان مثال، سیستم عامل های Windows 2000 و Windows XP (به جز "نسخه خانگی") به شما امکان می دهند مجوزهای دسترسی را برای فایل های جداگانه تنظیم کرده و آنها را رمزگذاری کنید. با این حال، سطح بالایی از امنیت کار کاربران عادی را با کامپیوتر پیچیده می کند. هنگام تنظیم رمز عبور و مجوزهای فایل باید بسیار مراقب باشید تا داده های مهم را از دست ندهید.

علاوه بر تمام وظایف دیگر، هدف اصلی خود را انجام می دهد - کار را با داده ها مطابق با یک ساختار خاص سازماندهی می کند. برای این منظور از سیستم فایل استفاده می شود. FS چیست و چه چیزی می تواند باشد و همچنین اطلاعات دیگری در مورد آن در زیر ارائه خواهد شد.

توضیحات کلی

سیستم فایل بخشی از سیستم عامل است که وظیفه قرار دادن، ذخیره، حذف اطلاعات در رسانه ها، ارائه این اطلاعات به کاربران و برنامه ها و اطمینان از استفاده ایمن از آن را بر عهده دارد. علاوه بر این، این اوست که در صورت خرابی سخت افزار یا نرم افزار به بازیابی اطلاعات کمک می کند. به همین دلیل است که سیستم فایل بسیار مهم است. FS چیست و چه می تواند باشد؟ چندین نوع وجود دارد:

برای هارد دیسک ها، یعنی دستگاه هایی با دسترسی تصادفی؛

برای نوارهای مغناطیسی، یعنی دستگاه هایی با دسترسی سریال؛

برای رسانه های نوری؛

سیستم های مجازی؛

سیستم های شبکه.5

واحد منطقی ذخیره سازی داده ها در سیستم فایل یک فایل است، یعنی مجموعه ای مرتب شده از داده ها که نام خاصی دارد. تمام داده های استفاده شده توسط سیستم عامل در قالب فایل ها ارائه می شود: برنامه ها، تصاویر، متون، موسیقی، فیلم ها و همچنین درایورها، کتابخانه ها و غیره. هر یک از این عناصر دارای یک نام، نوع، پسوند، ویژگی ها و اندازه است. بنابراین، اکنون می دانید، سیستم فایل مجموعه ای از چنین عناصر و همچنین راه هایی برای کار با آنها است. بسته به شکلی که از آن استفاده می شود و چه اصولی برای آن قابل اجرا است، می توان چندین نوع اصلی FS را تشخیص داد.

رویکرد برنامه ای

بنابراین، اگر یک سیستم فایل در نظر گرفته شود (چه چیزی است و چگونه با آن کار کنید)، باید توجه داشت که این یک ساختار چند سطحی است، در سطح بالای آن یک سوئیچ سیستم فایل وجود دارد که یک رابط بین سیستم و یک برنامه خاص این درخواست فایل را به فرمتی تبدیل می کند که توسط سطح بعدی - درایورها - پذیرفته می شود. آنها به نوبه خود به درایورهای دستگاه خاصی اشاره می کنند که اطلاعات لازم را ذخیره می کنند.

برای برنامه های مشتری-سرور، الزامات برای عملکرد سیستم فایل بسیار بالا است. سیستم های مدرن برای ارائه دسترسی کارآمد، پشتیبانی از رسانه های با حجم زیاد، حفاظت از داده ها در برابر دسترسی غیرمجاز و حفظ یکپارچگی اطلاعات طراحی شده اند.

سیستم فایل FAT

این نوع در سال 1977 توسط بیل گیتس و مارک مک دونالد توسعه یافت. در ابتدا در OS 86-DOS استفاده شد. اگر در مورد چیستی سیستم فایل FAT صحبت کنیم، شایان ذکر است که در ابتدا قادر به پشتیبانی از هارد دیسک نبود، اما فقط با رسانه های انعطاف پذیر تا 1 مگابایت کار می کرد. اکنون این محدودیت دیگر مطرح نیست و این FS توسط مایکروسافت برای MS-DOS 1.0 و نسخه های بعدی استفاده شد. FAT از برخی قراردادهای نامگذاری فایل استفاده می کند:

نام باید با یک حرف یا عدد شروع شود و می‌تواند شامل هر کاراکتر ASCII باشد، به جز فاصله‌ها و عناصر خاص.

طول نام نباید بیش از 8 کاراکتر باشد، پس از آن یک نقطه قرار می گیرد و سپس پسوند نشان داده می شود که از سه حرف تشکیل شده است.

نام فایل‌ها می‌توانند از هر موردی استفاده کنند، و متمایز یا حفظ نمی‌شوند.

از آنجایی که FAT در ابتدا برای سیستم عامل تک کاربره DOS طراحی شده بود، ذخیره اطلاعات مربوط به مالک یا حقوق دسترسی را فراهم نمی کرد. در حال حاضر، این فایل سیستم گسترده ترین است، اکثر آنها تا حدی از آن پشتیبانی می کنند، تطبیق پذیری آن امکان استفاده از آن را بر روی حجم هایی که سیستم عامل های مختلف با آن کار می کنند، می کند. این یک FS ساده است که قادر به جلوگیری از خراب شدن پرونده به دلیل خاموش شدن نادرست رایانه نیست. به عنوان بخشی از سیستم عامل های مبتنی بر آن، ابزارهای ویژه ای وجود دارد که ساختار را بررسی می کند و ناهماهنگی فایل ها را اصلاح می کند.

سیستم فایل NTFS

این FS برای کار با ویندوز NT ترجیح داده می شود، زیرا به طور خاص برای آن توسعه یافته است. سیستم عامل شامل ابزار تبدیل است که حجم های با FAT و HPFS را به حجم های NTFS تبدیل می کند. اگر در مورد چیستی سیستم فایل NTFS صحبت کنیم، شایان ذکر است که به طور قابل توجهی توانایی کنترل دسترسی به دایرکتوری ها و فایل های خاص، معرفی بسیاری از ویژگی ها، پیاده سازی ابزارهای فشرده سازی فایل های پویا، تحمل خطا و پشتیبانی از الزامات را افزایش داده است. استاندارد POSIX در این FS می توانید از نام هایی با حداکثر 255 کاراکتر استفاده کنید، در حالی که یک نام کوتاه در آن به همان روشی که در VFAT ایجاد می شود. با درک اینکه سیستم فایل NTFS چیست، شایان ذکر است که در صورت خرابی سیستم عامل، می تواند خود را بازیابی کند، بنابراین حجم دیسک در دسترس باقی می ماند و ساختار دایرکتوری آسیب نمی بیند.

ویژگی های NTFS

در یک حجم NTFS، هر فایل با یک ورودی در جدول MFT نشان داده می شود. 16 ورودی جدول اول توسط خود سیستم فایل برای ذخیره اطلاعات خاص رزرو شده است. اولین ورودی خود جدول فایل را توصیف می کند. هنگامی که اولین رکورد از بین می رود، دومین رکورد برای یافتن فایل MFT آینه ای خوانده می شود، جایی که رکورد اول با جدول اصلی یکسان است. مرکز منطقی دیسک حاوی یک کپی از فایل بوت استرپ است. سومین ورودی جدول حاوی فایل log است که برای بازیابی اطلاعات استفاده می شود. ورودی های هفدهم و بعدی جدول فایل حاوی اطلاعاتی در مورد فایل ها و دایرکتوری هایی است که روی هارد دیسک قرار دارند.

گزارش تراکنش شامل مجموعه کاملی از عملیات است که ساختار حجم را تغییر می دهد، از جمله عملیات ایجاد فایل ها، و همچنین هر دستوری که بر ساختار دایرکتوری تأثیر می گذارد. گزارش تراکنش برای بازیابی NTFS از خرابی سیستم طراحی شده است. ورودی دایرکتوری ریشه حاوی لیستی از دایرکتوری ها و فایل هایی است که در دایرکتوری ریشه قرار دارند.

ویژگی های EFS

سیستم فایل رمزگذاری (EFS) یکی از ویژگی های ویندوز است که می تواند اطلاعات را بر روی هارد دیسک با فرمت رمزگذاری شده ذخیره کند. رمزگذاری به قوی ترین محافظتی که این سیستم عامل می تواند ارائه دهد تبدیل شده است. در این مورد، رمزگذاری برای کاربر یک اقدام نسبتاً ساده است، برای این کار فقط باید کادر موجود در ویژگی های پوشه یا فایل را علامت بزنید. شما می توانید مشخص کنید که چه کسی می تواند چنین فایل هایی را بخواند. فایل ها پس از بسته شدن رمزگذاری می شوند و پس از باز شدن، به طور خودکار برای استفاده آماده می شوند.

ویژگی های RAW

دستگاه‌هایی که برای ذخیره‌سازی داده‌ها طراحی شده‌اند آسیب‌پذیرترین اجزا هستند که اغلب نه تنها از نظر فیزیکی، بلکه از نظر منطقی نیز در معرض آسیب هستند. برخی از مشکلات سخت افزاری می توانند کشنده باشند، در حالی که برخی دیگر راه حل هایی دارند. گاهی اوقات کاربران این سوال را دارند: "سیستم فایل RAW چیست؟"

همانطور که می دانید برای نوشتن هر گونه اطلاعات بر روی هارد یا فلش درایو باید یک سیستم فایل داشته باشد. رایج ترین آنها FAT و NTFS هستند. و RAW حتی سیستم فایلی نیست که ما معمولاً به آن فکر می کنیم. در واقع، این یک خطای منطقی یک سیستم از قبل نصب شده است، یعنی عدم وجود واقعی آن برای ویندوز. اغلب، RAW با تخریب ساختار سیستم فایل همراه است. پس از آن، سیستم عامل نه تنها به داده ها دسترسی پیدا می کند، بلکه اطلاعات فنی روی تجهیزات را نیز نمایش نمی دهد.

ویژگی های UDF

فرمت دیسک جهانی (UDF) برای جایگزینی CDFS و افزودن پشتیبانی از دستگاه های DVD-ROM طراحی شده است. اگر در مورد چیستی آن صحبت کنیم، پس این یک اجرای جدید از نسخه قدیمی است که الزامات آن را برآورده می کند. با ویژگی های خاصی مشخص می شود:

نام فایل می تواند حداکثر 255 کاراکتر باشد.

نام می تواند کوچک یا بزرگ باشد.

حداکثر طول مسیر 1023 کاراکتر است.

با شروع ویندوز XP، این فایل سیستم خواندن/نوشتن است.

این FS برای درایوهای فلش استفاده می شود که قرار است هنگام کار با رایانه های مختلف با سیستم عامل های مختلف، به ویژه ویندوز و لینوکس، استفاده شوند. این EXFAT بود که به "پل" بین آنها تبدیل شد، زیرا قادر به کار با داده های دریافتی از سیستم عامل است که هر کدام سیستم فایل خاص خود را دارند. این که چیست و چگونه کار می کند در عمل مشخص خواهد شد.

نتیجه گیری

همانطور که از مطالب بالا مشخص است، هر سیستم عامل از سیستم های فایل خاصی استفاده می کند. آنها برای ذخیره سازی ساختارهای داده مرتب شده در رسانه های فیزیکی در نظر گرفته شده اند. اگر به طور ناگهانی هنگام استفاده از رایانه سؤالی در مورد سیستم فایل نهایی چیست، این امکان وجود دارد که وقتی می خواهید یک فایل خاص را در رسانه کپی کنید، پیامی مبنی بر بیش از اندازه مجاز دریافت کنید. به همین دلیل باید بدانید که در کدام FS چه اندازه فایلی قابل قبول در نظر گرفته می شود تا در هنگام انتقال اطلاعات با مشکل مواجه نشوید.

سیستم های مدیریت فایل

سیستم فایل چربی. سیستم های فایل VFATوFAT32.

1. مناطق یک درایو منطقی

2. بخش بوت

3. جدول تخصیص فایل

4. دایرکتوری ریشه

5. سیستم فایل VFAT

سیستم فایل 6.FAT32

در سیستم فایل FAT، فضای دیسک هر درایو منطقی به دو قسمت تقسیم می شود:

منطقه سیستم و

ناحیه داده

منطقه سیستمهنگام قالب بندی ایجاد و مقداردهی اولیه می شود و متعاقباً هنگام دستکاری ساختار فایل به روز می شود.

منطقه سیستم از اجزای زیر تشکیل شده است:

· بخش بوت حاوی رکورد بوت (رکورد بوت) .

بخش های رزرو شده (ممکن است نباشند)؛

· جداول تخصیص فایل (FAT، جدول تخصیص فایل).

دایرکتوری ریشه (ROOT) .

این قطعات یکی پس از دیگری بر روی دیسک قرار می گیرند.

ناحیه دادهشامل فایل های دایرکتوری تابع ریشه است.

برخلاف ناحیه سیستم، ناحیه داده از طریق رابط کاربری DOS قابل دسترسی است.

بخش بوت

رکورد بوت در حین قالب بندی شکل می گیرد (مثلاً FORMAT) فرمت بخش بوت به سیستم عامل و حتی به نسخه بستگی دارد.

بخش بوت اولین درایو منطقی است. این شامل یک رکورد بوت است.

رکورد بوت شامل دو بخش است:

بلوک پارامتر دیسک - اغلب نامیده می شود. بلوک پارامتر BIOS (BPB) یا Extended BPB (برای نسخه‌های قدیمی‌تر سیستم‌عامل)

برنامه های بوت استرپ سیستم عامل (سیستم بوت استرپ).

دو بایت اول رکورد بوت، فرمان پرش بدون قید و شرط به لودر سیستم است - JMP 3Eh. در بایت سوم - NOP (90 ساعت).

به دنبال آن بلوکی از پارامترهای دیسک و پس از آن - لودر سیستم عامل دنبال می شود.

بلوک پارامتر دیسک حاوی اطلاعات زیر است

اندازه بخش،

تعداد بخش ها در خوشه،

تعداد بخش های رزرو شده،

تعداد کپی های FAT،

حداکثر تعداد عناصر ROOT،

تعداد سکتورها در جدول FAT،

تعداد بخش ها در هر مسیر،

برچسب حجم

نام فایل سیستم

و سایر پارامترها (توضیح بایتی محیط در افست 0Ah = F8H- راه آهن با هر ظرفیت؛ F0-فلاپی دیسک 1.44، 3.5 اینچ).

سوابق بوت سیستم عامل های مختلف معمولاً در ساختار بلوک پارامتر متفاوت است. برخی دارای فیلدهای اضافی هستند.

در کار آزمایشگاهی به طور مفصل با رکورد بوت آشنا می شویم.

بین بخش راه‌اندازی و FAT ممکن است بخش‌هایی رزرو شده باشد که برای سیستم فایل سرویس هستند یا استفاده نمی‌شوند. تعداد بخش های رزرو شده در BPB تعریف شده است. (در نمای قالب - بخش های رزرو شده در ابتدا -اگر = 1، آنگاه MBR است)

برای مشاهده و ویرایش و همچنین ذخیره و بازیابی یک رکورد بوت می توانید استفاده کنید سودمندیویرایشگر دیسک.

جدول تخصیص فایل

تی جدول تخصیص فایل (جدول تخصیص فایل - FAT) در اصل یک نقشه از منطقه داده است.

منطقه داده به اصطلاح به خوشه ها تقسیم می شود. یک خوشه یک یا چند بخش به هم پیوسته از یک منطقه داده است. از طرف دیگر، یک کلاستر کوچکترین واحد آدرس پذیر فضای دیسک است که به یک فایل اختصاص داده شده است. آن ها یک فایل یا دایرکتوری تعداد صحیحی از خوشه ها را اشغال می کند. برای ایجاد و نوشتن یک فایل جدید روی دیسک، سیستم عامل چندین کلاستر دیسک رایگان را برای آن اختصاص می دهد. این خوشه ها مجبور نیستند به دنبال یکدیگر باشند. برای هر فایل، لیستی از تمام اعداد خوشه ای که در این فایل ارائه شده اند ذخیره می شود.

در فلاپی دیسک، خوشه یک یا دو بخش را اشغال می کند و در هارد دیسک بسته به اندازه پارتیشن:

برای پارتیشن های با ظرفیت 16-127 مگابایت - 4 بخش در یک خوشه (اندازه خوشه - 2 کیلوبایت؛

برای پارتیشن هایی با ظرفیت 128-255 مگابایت - 8 بخش در یک خوشه (4 کیلوبایت)؛

برای پارتیشن هایی با ظرفیت 256-511 مگابایت - 16 بخش در یک خوشه (8 کیلوبایت)؛

برای پارتیشن هایی با ظرفیت 512-1023 مگابایت - 32 بخش در یک خوشه (16 کیلوبایت)؛

برای پارتیشن هایی با ظرفیت 1024-2047 مگابایت - 64 بخش در یک خوشه (32 کیلوبایت).

تقسیم یک منطقه داده به خوشه ها به جای استفاده از بخش ها به شما امکان می دهد:

· کاهش اندازه جدول FAT .

کاهش پراکندگی فایل

طول زنجیره فایل را کاهش می دهد Þ افزایش سرعت دسترسی به فایل

با این حال، اندازه خیلی بزرگ خوشه منجر به استفاده ناکارآمد از ناحیه داده می شود، به خصوص در مورد تعداد زیادی فایل کوچک (در نهایت، به طور متوسط ​​برای هر فایل نیمی از خوشه از بین می رود).

در سیستم های فایل مدرن (FAT32، HPFS، NTFS) این مشکل با محدود کردن اندازه کلاستر (حداکثر 4 کیلوبایت) حل می شود.

هر عنصر جدول FAT (12، 16 یا 32 بیت) مربوط به یک خوشه دیسک است و وضعیت آن را مشخص می کند: آزاد، مشغول یا بد.

· اگر خوشه به هر فایلی اختصاص داده شود (یعنی مشغول)، عنصر FAT مربوطه شامل شماره خوشه فایل بعدی است.

· آخرین خوشه فایل با یک عدد در محدوده FF8h - FFFh (FFF8h - FFFFh) مشخص شده است.

· اگر خوشه آزاد باشد، حاوی مقدار صفر 000h (0000h) است.

· خوشه ای که غیر قابل استفاده است (شکست خورده) با عدد FF7h (FFF7h) مشخص شده است.

بنابراین، در جدول FAT، خوشه های متعلق به یک فایل به زنجیره ای متصل می شوند.

اولین عنصر چربی محیط بوت سکتور را توصیف می کند. اولین بایت آن با بایت توصیفگر رسانه محیط ذخیره سازی (offset) یکسان است 0ah- جدول 4) را ببینید و برابر است با 0F0h برای مغناطیسی انعطاف پذیر 3.5 dm. دیسک یا 0F8h برای هارد دیسک 5 بایت (7 بایت) بعدی برای قالب 12 بیتی (16 بیتی) حاوی مقدار 0FFh

جدول تخصیص فایل بلافاصله پس از رکورد بوت دیسک منطقی ذخیره می شود، مکان دقیق آن در یک فیلد خاص در بخش بوت توضیح داده شده است.

این در دو نسخه یکسان که به دنبال یکدیگر هستند ذخیره می شود. هنگامی که اولین نسخه جدول از بین می رود، نسخه دوم استفاده می شود.

با توجه به اینکه FAT هنگام دسترسی به دیسک به شدت مورد استفاده قرار می گیرد، معمولاً در RAM بارگذاری می شود (در بافر I / O یا حافظه پنهان) و تا زمانی که ممکن است در آنجا باقی می ماند.

عیب اصلی FAT مدیریت کند فایل است. هنگام ایجاد یک فایل، قانون کار می کند - اولین خوشه رایگان انتخاب می شود. این منجر به تکه تکه شدن دیسک و زنجیره های فایل پیچیده می شود. از این رو سرعت کار با فایل ها کاهش می یابد.

برای مشاهده و ویرایش جدول FAT می توانید استفاده کنید سودمندیویرایشگر دیسک.

دایرکتوری ریشهROOT

اطلاعات دقیق در مورد خود فایل در ساختار دیگری به نام دایرکتوری ریشه ذخیره می شود. هر دیسک منطقی دایرکتوری ریشه خود را دارد (ROOT، انگلیسی - root).

دایرکتوری ریشه فایل ها و سایر دایرکتوری ها را توصیف می کند. عنصر دایرکتوری یک توصیفگر فایل (توصیفگر) است.

توصیفگر هر فایل و فهرست شامل آن است

نام (8 بایت)

پسوند (3)

تاریخ ایجاد یا آخرین اصلاح (2)

زمان ایجاد یا آخرین اصلاح (2)

ویژگی ها (1) (بایگانی، ویژگی دایرکتوری، ویژگی حجم، سیستم، پنهان، فقط خواندنی)

طول فایل (برای فهرست - 0) (4)

یک قسمت رزرو شده که استفاده نمی شود (10)

· تعداد اولین خوشه در زنجیره خوشه های اختصاص داده شده به فایل یا دایرکتوری. با دریافت این شماره، سیستم عامل با مراجعه به جدول FAT، سایر اعداد خوشه فایل (2 بایت) را نیز خواهد یافت.

بنابراین، کاربر فایل را برای اجرا راه اندازی می کند. سیستم عامل با مشاهده توضیحات فایل در فهرست فعلی به دنبال فایلی با نام دلخواه می گردد. هنگامی که عنصر مورد نیاز در دایرکتوری فعلی یافت می شود، سیستم عامل شماره اولین کلاستر این فایل را می خواند و سپس اعداد خوشه باقی مانده را از جدول FAT تعیین می کند. داده های این خوشه ها در RAM خوانده می شوند و در یک بخش پیوسته ترکیب می شوند. سیستم عامل کنترل را به فایل منتقل می کند و برنامه شروع به اجرا می کند.

برای مشاهده و ویرایش دایرکتوری ROOT نیز می توانید استفاده کنید سودمندیویرایشگر دیسک.

اظهار نظر.اخیراً حجم مکانیزم های دیسک تا حد زیادی از حداکثر اندازه مجاز قابل قبول برای FAT - 8.4 گیگابایت فراتر رفته است. این محدودیت با حداکثر مقادیر ممکن در آدرس بخش توضیح داده می شود که فقط 3 بایت برای آن اختصاص داده شده است. بنابراین، در اکثر موارد، هنگام کار در یک محیط سیستم ویندوز، از FAT استفاده نمی شود (از FAT32 یا NTFS استفاده می شود).

سیستم فایلVFAT

سیستم فایل VFAT (FAT مجازی) اولین بار در Windows for Workgroups 3.11 ظاهر شد و برای فایل ورودی/خروجی در حالت محافظت شده طراحی شد.

این فایل سیستم در ویندوز 95 استفاده می شود و در ویندوز NT 4 نیز پشتیبانی می شود.

VFAT سیستم فایل 32 بیتی "بومی" ویندوز 95 است. توسط درایور VFAT.VXD کنترل می شود.

مدیریت فایل سیستم های مختلف و برنامه های کاربردی نصب شده مدیر فایل سیستم -مدیریت فایل سیستم های قابل نصب.

VFAT از کد 32 بیتی برای تمام عملیات فایل استفاده می کند و می تواند از درایورهای حالت محافظت شده 32 بیتی استفاده کند.

اما، ورودی های جدول تخصیص فایل 12 یا 16 بیتی باقی می مانند، بنابراین از همان ساختار داده (FAT) روی دیسک استفاده می شود. آن ها f فرمت جدولVFAT هم همینطوردرست مانند فرمت FAT.

VFAT همراه با نام "8.3". پشتیبانی از نام فایل های طولانی. (VFAT اغلب به FAT با پشتیبانی از نام های طولانی گفته می شود).

مکانیسم خاصی برای تبدیل نام های بلند به کوتاه و بالعکس وجود دارد.

به یاد داشته باشید که طول نام برای DOS تابع قانون "8.3" است، یعنی طول نام نباید بیش از 8 کاراکتر باشد.آ پسوند - 3. ویژگی اصلی سیستم فایلویندوز 95 برای کاربر این است حداکثر طول نام فایل در پنجره ها 95 می تواند حداکثر 256 کاراکتر باشد، از جمله فضاها طول نام فایل توسط مسیر فایل محدود می شود: طول کل مسیر و نام فایل نمی تواند بیش از 260 کاراکتر باشد.

هنگام ایجاد فایل درWindows95 دو نام به آن می دهد -بلند و کوتاه (8.3). نام کوتاه با حذف فاصله ها و علامت ها از یک نام بلند تشکیل می شود / : * ? ""< >من. برای نام فایل هشت کاراکتری، از شش کاراکتر باقی مانده اول نام طولانی، کاراکتر "~" (tilde) و شماره سریال استفاده می شود. پسوند سه حرفی از سه کاراکتر اول بعد از آخرین نقطه در نام فایل طولانی استفاده می کند.

به عنوان مثال، نام های کوتاه برای فایل ها (به ترتیب زیر)

مقاله در مورد Windows 95.DOS

مقاله بعدی در مورد Windows 95.DOS

مقاله ای در مورد ویندوز NT.DOS

Microsoft Office.HTML

ویندوز مایکروسافت. HTML

به این شکل خواهد بود

در همان زمان در ساختار ROOT همراه با توصیفگر معمولی (که نام مستعار نامیده می شود) برای یک فایل یا دایرکتوری، توصیفگرهای خاصی ایجاد می شود که نام طولانی در آن ذخیره می شود. برای توصیفگرهای خاص، ویژگی های فقط خواندنی (فقط خواندنی)، سیستم (سیستم)، پنهان (پنهان)، برچسب حجم (برچسب جلد) تنظیم شده است. تعداد توصیفگرهای خاص به طول نام بستگی دارد.

توصیفگر ویژه به شماره خوشه O اشاره دارد. شماره واقعی اولین خوشه تخصیص یافته به یک فایل یا دایرکتوری در توصیفگر استاندارد (نام مستعار) بلافاصله پس از موارد خاص قرار دارد.

برای حجم‌های VFAT، نمی‌توانید از ابزارهای دیگری به جز برنامه‌هایی که VFAT را «درک» دارند استفاده کنید.

نقطه ضعف اصلی VFAT تلفات زیاد برای خوشه بندی با اندازه های دیسک منطقی بزرگ و محدودیت در اندازه خود دیسک منطقی است.

سیستم فایلFAT32

این یک پیاده سازی جدید از ایده استفاده از جدول FAT است.

FAT 32 یک سیستم فایل 32 بیتی کاملاً مستقل است.

اولین بار در Windows OSR2 (OEM Service Release 2).

FAT32 در حال حاضر در ویندوز 98 و ویندوز ME استفاده می شود.

این شامل پیشرفت ها و اضافات متعددی نسبت به اجرای FAT قبلی است.

1. استفاده بسیار کارآمدتر از فضای دیسک به دلیل استفاده از خوشه های کوچکتر (4 کیلوبایت) - تخمین زده می شود که تا 15٪ صرفه جویی می کند.

2. دارای رکورد بوت توسعه یافته است که به شما امکان می دهد کپی هایی از ساختارهای داده حیاتی ایجاد کنید Þ مقاومت دیسک را در برابر نقض ساختار دیسک افزایش می دهد

3. می توانید از یک نسخه پشتیبان FAT به جای یک نسخه استاندارد استفاده کنید.

4. می تواند دایرکتوری ریشه را جابجا کند، به عبارت دیگر، دایرکتوری ریشه می تواند در یک مکان دلخواه باشد Þ محدودیت اندازه دایرکتوری ریشه را حذف می کند (512 عنصر، زیرا قرار بود ROOT یک خوشه را اشغال کند).

5. بهبود ساختار دایرکتوری ریشه

فیلدهای اضافی اضافه شد:

زمان ایجاد (2)

تاریخ ایجاد (2)

تاریخ آخرین دسترسی (2)

کلمه بالا از تعداد خوشه اولیه

کلمه کم شماره خوشه اولیه

· جمع چک

هنوز چندین توصیف کننده برای یک نام فایل طولانی وجود دارد.

برای حجم‌های FAT32، نمی‌توانید از ابزار دیگری به جز برنامه‌هایی که FAT32 را «درک» دارند استفاده کنید.