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

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

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

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

سیستم فایل
«سیستم فایل» یا «سیستم مدیریت فایل» در حقیقت مجموعه‌ای از نرم‌افزارهای سیستم است که اطلاعات مربوط به استفاده از پرونده‌ها را به کاربران و سیستم ارائه می‌کند. در حقیقت سیستم فایل رابطی است میان «سیستم عامل» و «سخت افزار» و وظیفه‌ی مشخص کردن مکان هر فایل و سازماندهی فایل‌ها را برروی سخت ‌افزار (یا همان حافظه ثانویه مانند دیسک سخت یا CD) را دارد. وجود یک سیستم فایل کاربر یا برنامه نویس را از ایجاد یک نرم‌افزار خاص برای هر کاری آسوده می‌کند. در حقیقت سیستم فایل با ایجاد یک ساختار منطقی مانند راهنمایی برای کاربران و سیستم عامل است که به آن‌ها محل قرار گیری فایل‌ها را نمایش می‌دهد و در زمان لازم فایل‌ها را یافته و باز می‌کند، می‌خواند و اگر لازم باشد در آن‌ها می‌نویسد و یا پاک می‌کند و با فایل‌های جدید جایگزین می‌کند.
در لینوکس مفاهیم خاصی برای کار با سیستم فایل وجود دارد. دید لینوکس به ساختار پرونده‌ها و دایرکتوری‌ها مانند یونیکس است. در ساختار یونیکسی هر فایل دارای یک inod یا Index node است.(ترجمه‌ی فارسی index node شاخص گره است.) هر دایرکتوری نیز یک فایل ساده است که شامل لیستی از فایل‌هاست که هنگام مراجعه به دایرکتوری از آن لیست برای دسترسی به فایل‌ها استفاده می‌کند.

Inode1.1ها
تمام انواع فایل‌های لینوکس (و تمام یونیکس‌ها) توسط سیستم عامل و به وسیله‌ی گره‌های شاخص اداره می‌شوند. (گره‌های شاخص یا index node یا i-node) گره شاخص در واقع یک ساختار کنترلی است که حاوی اطلاعات کلیدی مورد نیاز سیستم عامل برای یک فایل مشخص است. ممکن است چند اسم فایل به یک گره شاخص مربوط شوند (لینک سخت) اما یک گره شاخص فعال همیشه به یک فایل اشاره می‌کند و هر فایل فقط با یک گره شاخص کنترل می‌شود. خصیصه‌های پرونده و نیز مجوزها و سایر اطلاعات کنترلی در گره شاخص یا i-node ذخیره می‌شوند.
در حقیقت می‌توانید i-nodeها را چیزی شبیه به کارت‌های مشخصات کتاب‌ها در کابخانه فرض کنید که برای دسترسی یه کتاب‌ها ابتدا در کشویی به دنبال اسم کتاب گشته کارت آن را پیدا می‌کنید و از روی کارت محل قرار گیری کتاب را دیده و به قفسهای کتاب مراجعه می‌کنید. در جدول زیر نمونه‌ای از اطلاعات ذخیره شده در یک i-node را مشاهده می‌کنید.

اطلاعات ذخیره شده در یک i-node
حالت پرونده
• یک پرچم ۱۶ بیتی که مجوزهای فایل را ذخیره می‌کند.
• نوع پرونده برای نمونه عادی، دایرکتوری، بلاک
• پرچم‌های اجرا
• مجوز خواندن مالک
• مجوز نوشتن مالک
• مجوز اجرای مالک
• مجوز خواندن گروه
• مجوز نوشتن گروه
• مجوز اجرای گروه
• مجوز خواندن دیگران
• مجوز نوشتن دیگران
• مجوز اجرای دیگران
شمارش پرنده
• تعداد مراجعات فهرست راهنما به این گره شاخص (تعداد لینک‌های سخت)
شناسه مالک یا UserID
• مالک خاص پرنده
شناسه گروه یا GroupID
• گروهی که مالک این پروندهاست
اندازه پرونده
• تعداد بایت های این پرنده
آدرس‌های پرونده
• ۳۹ بایت اطلاعت مربوط به آدرس محل قرار گیری فایل
آخرین دستیابی
• زمان آخرین دستیابی به پرونده
آخرین تغییر
• زمان آخرین تغییر در پرونده
تغییر گره شاخص
• زمان آخرین تغییر گره شاخه یا i-nod

1.2 Directoryها
دایرکتوری‌ها نیز به صورت ساختاری درختی سازماندهی شده‌اند و هر دایرکتوری می‌تواند محتوی تعدادی فایل یا زیردایرکتوری (sub directory) باشد. دایرکتوری‌ها نوع خاصی از فایل‌ها هستند که در حقیقت شامل لیستی از ورودی‌ها هستند. شاید اگر بدانید که ترجمه‌ی درست فارسی دایرکتوری «فهرست راهنما» است مطلب برایتان واضح‌تر شود. هر ورودی شامل شماره inode و نام یک فایل است. زمانی که یک کاربر مسیری را وارد می‌کند، کرنل میان لیست موجود در دایرکتوری به دنبال شماره inode مناسب می‌گردد و وقتی اسم به صورت صحیح به شماره inode تبدیل شد این شماره به حافظه منتقل می‌گردد تا برای استفاده در دسترس باشد.

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

1.4 فایل‌های Device Special
در سیستم‌های شبه یونیکسی هر ابزاری (a device) از طریق یک فایل قابل دسترسی است، نوع خاصی از فایل‌ها که برروی سیستم فایل حجمی را اشغال نمی‌کند و تنها یک نقطه‌ی دسترسی به یک ابزار است. (مانند dev/cdrom/) دو نوع از این فایل‌ها موجود است یک نوع character نوع دیگر block نام دارند.
بسیار خوب تابه اینجا با مفاهیم اولیه‌ی سیستم فایل‌ها در لینوکس آشنا شدید، در قسمت بعد به بررسی VFS در لینوکس خواهیم پرداخت که وظیفه‌ی کنترل اوضاع در کرنل را بر عهده دارد.

نکته
در خط فرمان دستور ls -l را وارد کنید. آیا نتیجه‌ی نمایش داده شده شما را به یاد جدول «شماره ۱» می‌اندازد؟!! حالا دستور ls را با گزینه‌های"i" استفاده کنید یعنی : « ls -i» عددی که در ابتدای خط نمایش داده می‌شود شماره‌ی i-node است. اگر دیدن مشخصات کامل فقط یک فایل یا دایرکتوری را می‌خواهید از دستور "stat" به همراه نام فایل یا دایرکتوری استفاده کنید. برای نمونه اگر بخواهیم اطلاعاتی از فایل article.txt بدست آوریم کافیست در خط فرمان تایپ کنید : stat article.txt و سپس اینتر

2.سیستم فایل مجازی یا VFS
هسته‌ی لینوکس از یک لایه به نام «سیستم فایل مجازی» یا "Virtual File System" برای انجام عملیات برروی فایل‌ها استفاده می‌کند. این لایه در کرنل (هسته) درخواست‌های کاربر و برنامه‌ها را دریافت و دستورات لازم برای اعمال در لایه‌ی سخت افزار را صادر می‌کند. در یونیکس ازاین روش برای استفاده از سیستم فایل‌های مختلف در یک سیستم استفاده می‌شود.

2.1 ساختار VFS
سیستم فایل مجازی یا VFS یک تعداد توابع مورد نیاز برای اعمال در فایل سیستم را فراهم می‌کند، این واسط سه شیء بسیار ضروری برای عملیات را فراهم می‌کند که شامل inodeها، بازکردن فایل‌ها و فایل سیستم است. VFS درباره‌ی انواع فایل سیستم‌هایی که در هسته موردپشتیبانی هستند اطلاعات کافی دارد و دارای جدولی شامل توابع و اشاره‌گرهای مربوط به فایل سیستم موجود هستند و هنگامی که کاربر درخواست انجام کاری برروی فایلی را نمود VFS از جدول فوق توابع مربوط به سیستم فایل را جستجو و پس از یافتن تابع مورد نظر تابع را اعمال می‌کند. با ساختار و روش کلی کار فایل‌ سیستم‌ها در لینوکس آشنا شدید،‌ در ادامه به بررسی انواع فایل سیستم‌ها و مختصر تاریخی از فایل سیستم‌های لینوکس خواهیم پرداخت.
تاریخچه‌ی فایل سیستم در لینوکس

در ابتدا لینوکس از فایل سیستم Minix برای کارهای خود استفاده می‌کرده، درحقیقت لینوس تروالدز با توجه به محبوبیت Minix در آن زمان ترجیح داده بجای نوشتن یک فایل سیستم جدید از همان فایل سیستم موجود در سیستم‌های آن زمان یعنی Minix استفاده کند. نسخه‌های اولیه‌ی Linux نیز همراه با فایل سیستم Minix عرضه شد. اما سیستم فایل Minix بسیار محدود بود، محدویت در ایجاد فایل‌ها حداکثر تا ۶۴ مگا بایت یا محدودیت درایجاد پارتیشن‌ها حداکثر تا ۶۴ مگابایت (بله ۶۴ مگابایت در سال ۱۹۹۰ ) و حداکثر طول نام‌های ۱۶ کاراکتری توسعه دهندگان لینوکس را واداشت تا به فکر نوشتن یک سیستم فایل جدید باشند. نهایتا برای هسته‌ی لینوکس VFS نوشته شد. در ابتدا VFS توسط "Chris Provenzano" نوشته شدو سپس توسط لینوس تروالدز بهینه سازی شد و در هسته‌ی لینوکس قرار گرفت.

بعداز افزوردن VFS به هسته یک فایل سیستم جدید به نام "Extended File System'' در آپریل ۱۹۹۲ به لینوکس نسخه‌ی 0.96c افزوده شد. این فایل سیستم جدید دو محدودیت ذکر شده‌ی فایل سیستم Minix را نداشت و برای فایل‌ها از حداکثر سایز ۲ گیگابایت (2GB) و اسامی بلند با طول ۲۵۶ کاراکتر پشتیبانی می‌کرد. این سیستم فایل بسیار بهتر از Minix بود اما هنوز تمام خواسته‌ها را پاسخ نمی‌داد برای نمونه امکان تغییر مقدار inodها یا تغییر مهر زمان (timestamp) وجود نداشت و فایل سیستم از لینک‌ها برای نگهداری لیستی از بلاک‌های آزاد استفاده می‌کرد که بازدهی پایین آن باعث ضعف سیستم و نیز نیاز به Defragment را موجب می‌شد.

برای مقابله بااین مشکلات دو سیستم فایل جدید به میان آمدند یکی "Xia File System" ودیگری "Second Extended File System'' که هر دو در ژانویه‌ی ۱۹۹۳ منتشر شدند. xiafs به شدت براساس Minixfs بود و تعداد کمی قابلیت به این سیستم فایل افزوده بود. به طور واضح تر این سیستم فایل اسامی طولانی و پارتیشن‌های حجیم‌تر را به Minix افزوده بود. از طرفی Ext2fs بر اساس کدهای Extfs بود و تعداد زیادی به روز رسانی و بهبود در آن دیده می‌شد، در نسخه‌های ابتدایی Xiafs بسیار پایدارتر از EXt2fs بود اما Ex2fs بیشتر استفاده می‌شد و Bugهای آن سریع‌تر رفع می‌شدند و بهتر پیشرفت می‌کرد به خصوص در استفاده‌ی از CPU و سرعت پاسخ‌دهی بسیار کاراتر بود.

در حال حاضر Ext2 یکی از سیستم فایل‌های بسیار پایدار و پیش تنظیم شده در هسته‌ی لینوکس است. فایل سیستم Xia از نسخه‌ی2.1.21 از کرنل لینوکس حذف شد. در جدول زیر می‌توانید مقایسه‌ای میان فایل سیستم‌های اولیه‌ی لینوکس را ببینید:

Xia FS Ext2 FS Ext FS Minix FS
64MB 4TB 2GB 64MB حداکثر سایز پارتیشن
64MB 2GB 2GB 64MB حداکثر سایز فایل
248 255 255 16/3 حداکثر طول نام فایل‌ها
خیر بله خیر خیر سایز بلاک‌های متغیر
؟ بله خیر بله ادامه‌ی توسعه
خیر بله خیر خیر قابلیت توسعه

قابلیت‌های Ext2
یک فایل سیستم ext2fs از استانداردهای معمول یونیکس مانند فایل‌ها و دایرکتوری‌ها و ابزارها و لینک‌ها پشتیبانی می‌کند. می‌توانید توسط این فایل سیستم پارتیشن‌های حقیقتا بزرگی ایجاد نمایید که با تلاش‌های اخیر مقدار این پارتیشن می‌توند تا ۴ ترابایت (4TB) باشد. بنابراین می‌توانید از دیسک‌های حجیم با پارتیشن بندی دلخواهتان استفاده کنید. پشتیبانی از اسامی طولانی تا ۲۵۵ کاراکتر که در صورت نیاز قابل افزایش تا ۱۰۲۴ کاراکتر است. نیز قابلیت‌های دیگری در Ext2fs موجود است که در فایل سیستم‌های معمولی یونیکس وجود ندارند. علاوه بر این‌ها می‌توانید از به هنگام سازی‌های شبیه BSD یا "BSD-like synchronous update"ها نیز استفاده کنید.

‏ Ext2fs این امکان را به شما می‌دهد تا سایز بلاک‌های منطقی را انتخاب کنید، این مقدار معمولا برابر ۱۰۲۴ یا ۲۰۴۸ و ۴۰۹۶ بایت است. استفاده از بلاک‌های منطقی بزرگتر می‌تواند سرعت ورودی یا خروجی را افزایش دهد و نیاز کمتری به کار هدهای دیسک سخت را به ارمغان می‌آورد.علاوه بر این Ext2fs از "fast symbolic links" یا «لینک‌های نرم سریع» پشتیبانی می‌کند، در این روش لینک‌ها از بلاک‌های فایل سیستم استفاده نمی‌کنند و مقصد لینک در خود inod ذخیره می‌شود. این امر علاوه بر افزایش سرعت کار فضای کمتری را در دیسک سخت استفاده می‌کند. البته این‌ها تمام مزایای این فایل سیستم نیستند و تنها نمونه‌هایی از مزایای این فایل سیستم هستند.

نحوه کار EXT2
نحوه‌ی کار Ext2fs در ساختار سخت‌ افزاری تاثیر فراوانی از ساختار فایل سیستم BSD گرفته است. یک فایل سیستم شامل گروهی از بلاک‌هاست. (مقایسه کنید با سیستم خوشه‌ای یا "cluster" در VFAT مایکروسافت) ساختار فیزیکی یک فایل سیستم رامی‌توانید در جدول زیر مشاهده کنید:

Block
Group N ...
... Block
Group 2 Block
Group 1 Boot
Sector

هر گروه از بلاک‌ها شامل یک کپی افزوده از اطلاعات کنترلی سیستم فایل است. و محتوی قسمتی از فایل سیستم شامل نگاشتی از بلوک و نگاشتی از inode و قسمتی از جدول inodeها و بلاکی از داده‌هاست. ساختار یک block group در شکل زیر نمایش داده شده است.

Data
Blocks Inode
Table Inode
Bitmap Block
Bitmap FS
descriptors Super
Block

filename name length entry length inode number
در Ext2fs دایرکتوری‌ها به عنوان یک لیست از ورودی‌های با طول متغیر مدیریت می شود. هر ورودی شامل شماره inode و نیز طول ورودی نیز نام فایل و طول آن است. با استفاده از ورودی‌های با طول متغیر امکان به کار گیری فایل‌هایی با نام‌های طولانی بدون از دست دادن فضای دیسک سخت ممکن است. این ساختار را در جدول زیر مشاهده می‌کنید:

برای نمونه برای فایل‌های file1, long_file_name, و f2 داریم :
file1 05 16 i1

long_file_name 14 40 i2
f2 02 12 i3
در فایل سیستم جدید Ext3fs نیز از همین ساختار برای ذخیره و بازخوانی فایل‌ها و دایرکتوری‌ها استفاده می‌شود. برای استفاده‌ی برنامه‌ها از این فایل سیستم و کنترل و تغییر در آن از کتابخانه‌ای به نام libext2fs استفاده شده است. این کتابخانه دارای روتین‌های لازم برای آزمایش و تغییر اطلاعات برروی فایل سیستم Ext2 می‌باشد. ابزارهای مختلفی مانند mke2fs, e2fsck, tune2fs, dumpe2fs و debugfs از همین کتابخانه برای انجام کارهایشان استفاده می‌کنند. با توجه به ساختار بسیار مناسب و عمومی این کتابخانه نرم‌افزارهای جدید مورد نیاز برای تغییر در فایل سیستم به راحتی نوشته می شوند.

5. فایل سیستم Swap
پارتیشن Swap در لینوکس پارتیشنی است که شما یکبار آن را ایجاد می‌کنید و سپس آن را فراموش می‌کنید!! این پارتیشن به عنوان بخشی از حافظه‌ی سیستم یا RAM استفاده می‌شود و اطلاعات پس از خاموش شدن سیستم از روی آن پاک می‌شوند. نحوه‌ی کار و نیز روش تخصیص داده‌ها و مکان یابی داده‌ها برروی swap کمی پیچیده است و خود نیاز به یک مقاله‌ی کامل دارد.

6. سیستم proc
‏proc نیز یک سیستم فایل مجازی با ویژگی‌های منحصر به فرد خود است که به عنوان یک رابط برای کرنل فعالیت می‌کند. این سیستم فایل اغلب در proc/ سوار می‌شود. (Mount on /proc) و اغلب قسمت‌های آن فقط خواندنی هستند. دستورات بسیاری از این رابط برای کار با کرنل و یا دریافت اطلاعات از سیستم استفاده می‌کنند، ماننند دستورات:
cat, find, free, mount, ps, tr, uptime, times, chroot, mmap, readlink, syslog, slabinf, hier, arp, dmesg, hdparm, ifconfig, init, lsmod, lspci, netstat, procinfo, route

7. ژورنالینگ یا Journaling

زمانی که یک کامپیوتر به طور ناقص خاموش می‌شود، برای نمونه وقتی در اثر قطع برق، کامپیوتر خاموش می‌شود و یا به صورت دستی خاموش شود ممکن است اطلاعات دیسک سخت دچار اشکال شوند و صدمه ببینند. در این موقعیت مقداری از اطلاعات برروی دیسک نوشته می‌شوند و باقی اطلاعات نوشته نمی‌شوند و سیستم فایل به حالت half-finished یا نیمه تمام وارد می‌شود. در این زمان سیستم پس از روشن شدن یک روتین را برای چک کردن اشکالات دیسک سخت دنبال می‌کند.(fsck در لینوکس و scandisk در ویندوز) این امر ممکن است در دیسک‌های سخت امروزی زمان زیادی به طول بیانجامد و برای اطمینان از صحت کارکرد فایل سیستم باید در هر بار شروع سیستم این روتین اجرا شود.
فایل سیستم‌های ژورنالینگ یا "Journaling File Systems" این مشکلات را حل کرده‌اند، علاوه بر مدیریت فایل‌ها و نحوه‌ی قرار گیری فایل‌ها در سیستم فایل در این گونه سیستم‌ فایل‌ها قسمتی به نام ژورنال نیز وجود دارد که تمام تغییراتی را که باید در دیسک ثبت شوند را ذخیره می‌کند.(یک سیستم log گیری) سپس یک پروسه‌ در پشت زمینه و به طور نامحسوس تغییرات را دنبال کرده و اطلاعات مورد نیاز را در ژورنال می‌نویسد. این موضوع باعث می شود تا در صورت بروز مشکل امکان رفع نقص سریع‌تر شده و نیز از طرفی نیاز به چک کردن فایل سیستم در هر بار شروع نباشد.
در حال حاضر چهار سیستم فایل بسیار مشهور که به صورت ژورنالینگ فعال هستند شامل Ext3fs که پیش فرض هسته‌ی لینوکس است و با هسته توسعه پیدا می‌کند، JFS که متعلق به IBM است ، XFS که متعلق به SGI است و ابتدا برای یونکس IRIX طراحی شده بود و نیز ReiserFS است.

7.1 فایل سیستم ReiserFS
این سیستم فایل توسط "Hans Reiser" نوشته شد و در برخی توزیع‌های لینوکس مانند SuSE 7.0 به بعد و یا RedHat 7.1 مورد پشتیبانی قرار گرفت. در ReiserFS از مدل" Balanced Tree" استفاده می‌شود که فایل‌ها و نام فایل‌ها در یک Balanced Tree نگهداری می‌شود. ReiserFS یک سیستم فایل حقیقتا ژورنالینگ نبود اما از نسخه‌ی ۴ که به ReiserFS4 مشهور است این قابلیت بهبود بسیاری یافت و اکنون در وضعیت مناسبی است. البته شهرت این فایل سیستم در سرعت آن است که در هسته‌ی سری 2.6 لینوکس اوضاع کمی تغییر کرده و ReiserFS در برخی زمینه‌ها سرعتی کمتر از سایرین دارد.

7.2 فایل سیستم XFS
زمانی که SGI در سال‌های ۱۹۹۰ نیاز به یک فایل سیستم قدرتمند با بازدهی بالا داشت شروع به توسعه‌ی سیستم فایلی به نام XFS کرد. این سیستم فایل با هدف بالا بردن حجم دیسک سخت و نیز پهنای باند داده‌ها و تبادل موازی برای استفاده در نرم‌افزارهای فیلم و صدا و پایگاه داده‌های بزرگ توسعه یافت. از مزایای این فایل سیستم بازیابی سریع اطلاعات در صورت صدمه دیدن دیسک سخت و پشتیبانی از فایل‌های حجیم و نیز دایرکتوری‌های حاوی فایل‌های بسیار و بازدهی بسیار خوبش در چنین محیط‌هایی است. در حال حاضر XFS با تغییراتی در اختیار جامعه‌ی اوپن سورس قرار گرفته و برای لینوکس نیز بازنویسی شده و برای نسخه‌ی 2.4 و 2.6 هسته‌ی لینوکس موجود است. البته نسخه‌ی لینوکسی هنوز تماما کامل نیست و برخی قابلیت‌هامانند loop-mounting هنوز با مشکلاتی همراه است.
از مشکلاتی که در حال حاضر XFS با آن‌ها مواجه است ممکن نبودن resize یا تغییر سایز به صورت on-line است و برای تغییر سایز باید از اطلاعات پشتیبان بگیریدو پس از تغییر سایز اطلاعات را بازیابی کنید و یا برای استفاده از Qouata باید هسته‌ی لینوکس را مجددا کامپایل کنید. اگر از بوت لودر LILO با گزینه‌ی بوت از بوت سکتور استفاده می‌کنید XFS همراه LILO کار نخواهد کرد. البته با GRUB نسخه‌های بالاتر از 0.99 می‌تونید از XFS استفاده کنید اما مشکلات و رفتار غیر معمول نیز در این حالت گزارش شده است.

اما قابلیت‌های جدید نیز در این فایل سیستم وجود دارد برای نمونه این فایل سیستم یک فایل سیستم ۶۴ بیتی است، بنابراین می‌توانید فایل‌هایی با حجم میلیون‌ها ترابایت داشته باشید که این مقدار بسیار بزگتر از فایل سیستم‌هایی است که امروزه استفاده می شوند. از طرفی این فایل سیستم سرعت بسیار مطلوبی دارد. چیزی حدود هفت گیگابایت در ثانه(7GB/sec) که این سرعت را مدیون مدل B+Tree است که مدل لیست کردن و دسترسی به فایل‌هاست. در سیستم فایل‌های FFS مانند BSD یا Ext2fs از مدل لیست کردن برای دسترسی به فایل‌ها استفده می‌شود اما در این فایل سیستم از مدل بسیار پیچیده‌ی B+Tree استفاده می‌شود.اما چطور میلیون‌ها ترابایت؟! از دید ریاضی بسیار ساده است :
2^63 = 9 x 10^18 = 9 exabytes

7.3 فایل سیستم JFS
این فایل سیستم که نامش "Journaling File System" است توسط IBM و برای استفاده در سرورهای Enterprise توسعه یافته است. این فایل سیستم برای سرورهایی که ترافیک بالایی دارند و نیاز به فایل سیستم برای مدیریت چنین ترافیکی دارند ساخته شده است. در حال حاظر از این سیستم فایل در لینوکس (هسته‌ی ۲.۶) پشتیبانی می‌شود اما نسخه‌ی لینوکسی آن هنوز کاملا برای لینوکس بهینه سازی نشده است.(هنوز کاملا port نشده)

فایل سیستم JFS از تکنیک "database journaling " برای کارهای خوداستفاده می‌کند که باعث افزایش سرعت و پاسخ‌گویی می‌شود. JFS نیز یک فایل سیستم ۶۴ بیتی است و پارتیشن‌هایی با حداقل سایز ۱۶ مگابایت (16MB) استفاده می‌کند. حداکثر سایز کاملا به سایز بلاک‌های سیستم بستگی دارد که در حالتی که بلاک‌ها ۵۱۲ بیتی باشند مقدار بزرگترین فایل برابر ۵۱۲ ترابایت (512TB) و در حالتی که سایز بلاک‌ها ۴ کیلوبایت باشد حداکثر سایز فایل سیستم ۴ پتابایت (4Peta bytes) خواهد بود.

فایل سیستم EXT3
فایل سیستم EXT3 برای کسانی که نمی‌خواهند فایل سیستم لینوکس خود را تغییر بدهند یک راهکار مناسب است. ext3fs در حقیقت همان ext2fs با همان ساخت و کار است با این تفاوت که قابلیت ژورنالینگ به آن افزوده شده است. این فایل سیستم همراه کرنل لینوکس ارائه می‌شود و در لینوکس پشتیبانی کاملی از این فایل سیستم می‌شود چرا که فایل سیستم محلی و مختص لینوکس است. یکی از قابلیت‌های این فایل سیستم پشتیبانی شدن در تقریبا تمام نسخه‌های کرنل است، حتی نسخه‌های قدیمی نیز این فایل سیستم را به عنوان ext2fs شناخته و از آن استفاده می‌کنند.(در واقع با افزودن امکان ژورنالینگ به ext2fs شما به ext3fs دست یافته‌اید!)

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

8. فایل سیستم‌های شبکه
فایل سیستم‌هایی نیز برای استفاده در شبکه‌ها وجود دارند که مشهور ترین و محبوب‌ترین آن‌ها NFS است، البته فایل سیستم‌هایی مانند AFS یا CODA و NCP و SMB نیز وجود دارند.

‏ NFS حدود سال‌ ۱۹۸۹ توسط Sun Microsystem ایجاد شد و در نسخه‌های مختلفی منتشر شد که ابتدا 2 و سپس نسخه‌ی 3 توسعه پیدا کردند و در حال حاضر نسخه‌ی 4 این سیستم فایل در حال استفاده است. البته روش‌های بهتری برای اشتراک فایل در شبکه وجود دارد که AFS یا "Andrew File System" یکی از آن‌هست اما استفاده و پیاده سازی این فایل سیستم‌ها به مراتب دشوار تر از NFS می‌باشد.

فایل سیستم SMB یا "Session Message Block" از طریق پروتوکل SMB و برنامه‌ی Samba در لینوکس قابل دسترسی است. SMB در حقیقت بری ویندوزهای 3xو 9x و NT منتشر شد و برای شبکه‌هایی که شامل ویندوز و لینوکس در کنار هم می شوند مناسب است. فایل سیستم "ncpfs" نیز برای پشتیبانی از پروتوکل "NCP" که در "NovellNetware" استفاده می‌شود قابل دسترسی است.
فایل سیستم دیگر Code نام دارد که یک فایل سیستم توزیع شده بر اساس AFS2 است که قابلیت‌های جدیدی مانند امکان disconnect" را برای کامپیوترهای سیار فراهم کرده و از نظر امنیتی و بازدهی نیز بسیار توسعه یافته است.

9. فایل سیستم‌های رمز نگاری شده
فایل سیستم‌های رمزنگاری شده‌ یا "Encrypted Fileystems" کاربران را برای قرار دادن اطلاعات در محیطی امن کمک می‌کنند. اگر یک مهاجم (Attacker) به سیستم شما دسترسی پیدا کند اطلاعات موجود در فایل سیستم رمزنگاری شده برای او نامفهوم خواهد بود و نمی‌تواند اطلاعات موجود برروی آن را استفاده کند. در بسیاری موارد سیستم فایل‌های رمزنگاری شده نیاز به mount و unmount کردن دستی دارند در صورتی که پس از اتمام کار فایل سیستم را unmount یا پیادهنکنید، مهاجم از طریق شبکه می‌تواند به آن دسترسی پیدا کند! در این مقاله تنها به نام بردن چند سیستم فایل رمز‌نگاری شده بسنده می‌کنم:

CFS:
این فایل سیستم از سرور NFS برای رمزنگاری تمام ساختار درختی فایل‌ها استفاده می‌کند. (http://cache.qualcomm.com/)
TCFS :
این سیستم فایل نیز بر اساس CFS است و بهبودهایی را فراهم نموده و از طریق patch شدن در کرنل قابل استفاده است. (http://www.tcfs.it/)
BestCrypt:
این فایل سیستم به کاربران اجازه‌ی ایجاد یک ساختار درختی کامل در فایل سیستمی مجازی را می‌دهد که در یک فایل ذخیره شده است و ابزار مخصوصی برای ایجاد، فرمت کردن و ماونت کردن دارد. (http://www.jetico.com/)
PPDD:
یک درایور برای لینوکس است که به کاربران اجازه‌ی ایجاد فایل‌هایی مشابه ابزارها رامی‌دهد. فایل‌ها پسپ قابل فرمت و استفاده مانند یک دیسک سخت هستند. ( http://linux01.gwdg.de/~alatham/)

StegFS:
این سیستم اطلاعات را رمزنگاری و سپس در مخفی می‌کند، بدین ترتیب مهاجم ابتدا نیاز به حدس زدن مکان فایل‌هاست و سپس نیاز به بازکردن رمز دارد.( http://www.mcdonald.org.uk/StegFS/)
البته فایل سیستم‌های دیگری نیز با هدف رمزنگاری اطلاعات وجود دارند که از حوصله ی مقاله ی حاظر خارج‌اند.


10. سایر فایل سیستم‌ها

10.1 vfat
در لینوکس از فایل سیستم‌های دیگری نیز پشتیبانی می‌شود برای نمونه از vfat که سیستم فایل ویندوز و داس و os/2 است به خوبی پشتیبانی می‌گردد. هر دو نوع FAT16 وFAT32 در لینوکس نیز پشتیبانی می‌شود اما این سیستم فایل‌ها هیچ کدام از قابلیت‌های فایل سیتسم‌های لینوکس را ندارند. حتی FAT32 قابل مقایسه با ext2fs که درسال ۱۹۹۳ منتشر شد نیست. پارتیشن‌های FAT16 محدود به دو گیگابایت (2GB) است، به صورت تئوری FAT32 پارتیشن‌هایی با سایز تا 8ترابایت (۱ ترابایت 1024 گیگابایت است) را پشتیبانی می‌کنند. اما در عمل Scan Disk ویندوز ۹۸ تنها یا 128GB از هارددیسک را پشتیبانی می‌کند و ویندوز ۲۰۰۰ اجازه‌ی ایجاد پارتیشن‌های FAT32 با حجم بیش‌از 32GB را نمی‌دهد.

10.2 فایل سیستم NTFS
فایل سیستم NTFS یا New Technology File System که از طرف مایکروسافت همراه با ویندوز NT نسخه‌ی 4.0 با هدف از میان بردن محدودیت‌های FAT16 منتشر شد ، در این سیستم فایل حداکثر پارتیشن‌ها دو ترابایت (2 TB) است. سیستم فایل NTFS در هسته‌ی لینوکس به صورت فقط خواندنی مورد پشتیبانی قرار دارد و برای نوشتن برروی آن بایداین قابلیت رادر هسته‌ی لینوکستان فعال کنید، اما امکان وارد شدن صدمه به فایل سیستمتان وجود دارد.

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

فایل سیستم‌های ژورنالینگ:
a. BeFS
b. HTFS
c. NSS
d. VxFS

سایر فایل سیستم‌ها (که ممکن است رابطه‌ای با لینوکس نداشته باشند و فقط جهت اطلاعات بیشتر نامبرده می‌شوند) :
DTFS
EFS (Enhanced filesystem)
ffS (BSD filesystem)
GPFS (generall Parallel Filesystem)
HFS (HP-UX Hi performance filesystem)
LFS (linux log structured file system)
QNX filesystem
ODS (Open VMS file system)
NSS ( Novell storage services)
NWFS ( NetWare filesystem / 286 و NetWare filesystem / 386)
MFS ( Last Macintosh Fie System)
RomFS
و بسیاری فایل سیستم‌های دیگر .

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

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

البته گاهی نیز اجبارهایی در کار است، برای نمونه پارتیشن اصلی یا root را نمی‌توانید vfat انتخاب کنید! یا اگر از LILO به عنوان بوت لودرتان استفاده می‌کنید ممکن ایت نتوانید از XFS برای پارتیشن بوت استفاده کنید و یا ممکن است لازم باشد از ترکیب این فایل سیستم‌ها در کارتان استفاده کنید. برای نمونه از etx2 برای پارتیشن بوت، از دیگری برای / از فایل سیستمی سریع برای /tmp از فایل سیستمی ایمین و قابل بازیابی برای دایرکتوری home/ و ... که کاملا به سیاست‌های شما و نوع کار شما وابسته است.

منابع :

1. http://oss.sgi.com/projects/xfs/faq.html
02.
http://e2fsprogs.sourceforge.net/
03.
http://www-128.ibm.com/developerworks/l ... l-jfs.html
04.
http://www.coda.cs.cmu.edu/about.html
05.
http://linux.org.mt/article/filesystems
06.
http://freshmeat.net/articles/view/212/
07.
http://freshmeat.net/projects/reiserfs/
08.
http://freshmeat.net/projects/xfs/
09.
http://www.ibiblio.org/filesystems/howt ... HOWTO.html
10.
http://www.honeycomb.net/os/holistic/co ... ilesys.htm
11.
http://tcfs.dia.unisa.it/
12.
http://www.atnf.csiro.au/~rgooch/linux/ ... tches.html
13.
ftp://tsx-11.mit.edu/pub/linux/ALPHA/userfs/
14.
http://www.suse.com/en/support/oracle/d ... epaper.pdf
15.
http://linux.msede.com/ext2/ext2end.html