Filesystem چیست؟
برای درک بهتر Filesystem (فایل سیستم) در لینوکس، بهتر است ابتدا مثالی از دنیای واقعی بزنیم. یک یخچال فریز را در نظر بگیرید؛ در یخچال فریزرها معمولاً بخش های مختلفی برای موارد خوراکی مختلف در نظر گرفته می شود. به طور مثال، جایی برای مایعات، جایی برای تخم مرغ، جایی برای میوه جات و …
به این شکل، شما نسبت به زمانی که هر چیزی در هر جایی قرار گیرد، به مراتب راحت تر می توانید به سازماندهی مواد غذایی خود پرداخته و مهم تر از آن، زمانی که به دنبال چیزی می گردید به مراتب راحت تر خواهید توانست چیزی که به دنبالش هستید را بیابید.
چنین حالتی را هم می توان برای فایل های سیستمی متصور شد؛ به عبارت دیگر، فایل سیستم متدی برای ذخیره سازی و سازماندهی اطلاعات مختلف است. از جمله فایل سیستم هایی که در سیستم عامل لینوکس پشتیبانی می شوند، می توان به موارد زیر اشاره کرد:
- فایل سیستم های قراردادی مرتبط با هارد دیسک: ext2, ext3, ext4, XFS, Btrfs, JFS, NTFS
- فایل سیستم های ذخیره سازی فلش: ubifs, JFFS2, YAFFS
- فایل سیستم های مرتبط با دیتابیس
- و فایل سیستم های مقاصد خاص: procfs, sysfs, tmpfs, debugfs
پارتیشن ها و فایل سیستم ها
Partition (پارتیشن یا بخش) به قسمتی از یک هارد دیسک اطلاق می گردد در صورتی که فایل سیستم روشی برای ذخیره سازی/بازیابی فایل های مختلف روی هارد دیسک است که معمولاً در یک پارتیشن خاص اتفاق می افتد. برای درک بهتر این موضوع، می توان ارتباط مابین پارتیشن و فایل سیستم را به شجره نامه تشبیه کرد.
فایل سیستم ها همچون یک شجره نامه هستند که در آن ارتباط مابین اجداد ما و روابط بین آن ها، پدرانمان و ما مشخص می شود در صورتی که پارتیشن ها همچون خانواده هایی هستند که هر کدام از آن ها شجره نامه ی اختصاصی خود را دارند. همان طور که در ادامه ملاحظه می گردد، مقایسه یی مابین فایل سیستم های به کار گرفته شده در سیستم عامل های ویندوز و لینوکس صورت گرفته است:
Windows | Linux | |
---|---|---|
Disk1 | /dev/sda1 | Partition |
NTFS/FAT32 | EXT3/EXT4/XFS | Filesystem type |
DriveLetter | MountPoint | Mounting Parameters |
C drive | / | Base Folder where OS is stored |
استاندارد سلسه مراتبی فایل سیستم
لینوکس بر خلاف ویندوز که از کاراکتر \ برای جدای سازی مسیرها استفاده می کند، از کاراکتر / برای جدا سازی مسیرهای مختلف در این سیستم عامل استفاده می کند و همچون سیستم عامل ویندوز دارای نام درایو -مثلا C, D, E و غیره- نیست.
درایوهای جدید به عنوان دایرکتوری های مختلف در فایل سیستم اصلی اصطلاحاً Mount (ماونت یا قرار داده) می شوند که معمولاً در دایرکتوری media/ است. به طور مثال، اگر یک مموری فلش با نامی همچون Sokanacademy به سیستم خود وصل کنیم، این مموری را در مسیری همچون مسیر زیر خواهید یافت:
/media/Sokanacademy
تمامی اسامی فایل سیستم لینوکس اصطلاحاً Case Sensitive هستند. به عبارت دیگر، به بزرگی و کوچکی حروف حساس هستند لذا boot/ و Boot/ و یا BOOT/ نمایانگر ۳ دایرکتوری (یا فولدر) مجزا از یکدیگر می باشند.
بسیاری از توزیع های لینوکسی این قابلیت را دارا هستند تا مابین ابزارهای اصلی برای اجرا شدن سیستم عامل و سایر برنامه های جانبی تمایز قايل شوند و این برنامه های جانبی را در دایرکتوری های مختلفی زیر usr/ قرار دهند (توجه داشته باشید که منظور از usr همان User به معنی «کاربر» است.)
برای درک بهتر این موضوع که دایرکتوری های دیگر چگونه سازماندهی می شوند، در تصویر فوق دایرکتوری usr/ را یافته یا دایرکتوری های زیرشاخه ی آن را با دایرکتوری هایی که مستقیماً تحت دایرکتوری / یا root (روت یا ریشه) قرار گرفته اند مقایسه کنید.
اگر مطمین نیستید از Ext4 استفاده کنید
در این مقاله ما به بررسی فایل سیستم های مختلف سیستم عامل لینوکس و تفاوت های بین آن ها خواهیم پرداخت. ولی اگر نسبت به انتخاب فایل سیستم برای لینوکس اطمینان کافی ندارید، بهترین گزینه Ext4 است.
Ext4 فایل سیستم پیش فرض اکثر نسخه های لینوکس است. Ext4 در واقع نسخه ارتقا یافته فایل سیستم Ext3 است. Ext4 یک فایل سیستم پایدار و مطمین است.
در آینده، نسخه های لینوکس به تدریج به سمت فایل سیستم BtrFS خواهند رفت. BtrFS نسخه بسیار پیشرفته فایل سیستم های لینوکس است که البته نیاز به بهبود و توسعه بیشتری دارد.
توجه داشته باشید که اگر هر درایوی را با فایل سیستم Ext4 فرمت کنید، این درایو فقط و فقط توسط سیستم عامل لینوکس قابل شناسایی و خوانده شدن است. بنابراین اگر به عنوان مثال قصد فرمت کردن یک درایو اکسترنال را دارید که از آن بین سیستم های مختلف استفاده می کنید، Ext4 اصلا گزینه مناسبی نیست. زیرا سیستم عامل های ویندوز و Mac قادر به خواندن فایل سیستم Ext4 نیستند. در این حالت بهتر است از exFAT یا FAT32 استفاده کنید.
اگر قصد دارید درایو اصلی و راه انداز سیستم عامل لینوکس خود را پارتیشن بندی کنید، بهتر است که یک قسمت از فضای هارد دیسک را به عنوان پارتیشن Swap (جانشین) در نظر بگیرید. پارتیشن Swap چیزی شبیه به Page File در سیستم عامل ویندوز است. (نحوه کار Page File به این صورت است که مقداری از فضای هارد دیسک را به عنوان حافظه RAM در نظر می گیرد) هنگامی که حافظه RAM سیستم پر شده باشد، سیستم عامل لینوکس اطلاعات موجود در آن را به پارتیشن Swap منتقل می کند. این پارتیشن باید با فایل سیستم مخصوص خود (Swap area) فرمت شود.
Journaling چیست؟
یکی از نکاتی که در هنگام انتخاب فایل سیستم باید به آن دقت کنید این است که در کنار نام برخی از فایل سیستم ها عبارت “Journaling” مشاهده می شود و در مورد برخی دیگر این طور نیست.
Journaling به گونه ای طراحی شده است که از تخریب دیتا که ممکن است ناشی از قطعی ناگهانی برق یا عواملی از این دست باشد، جلوگیری می کند. فرض کنید که سیستم شما در حال نوشتن یک سری اطلاعات بر روی هارد دیسک است که ناگهان برق قطع می شود. بدون استفاده از Journaling، سیستم اطلاع دقیقی ندارد که آیا فایل بصورت کامل بر روی دیسک نوشته شده است یا خیر و ممکن است فایلی که به هارد دیسک منتقل شده است، آسیب دیده باشد.
اگر از ویژگی Journaling استفاده کرده باشید، سیستم عامل عملیات نوشتن فایل را در Journal یادداشت می کند. پس از نوشتن فایل بر روی دیسک نیز این کار را از لیست Journal حذف می کند. حال اگر در زمان نوشتن فایل بر روی دیسک برق قطع شود، هنگامی که سیستم مجددا راه اندازی شده و بالا می آید، Journal توسط سیستم عامل لینوکس بررسی می شود تا عملیاتی که انجام نشده اند یا بصورت ناقص انجام شده اند کامل شوند. به این صورت از تخریب فایل و از دست رفتن دیتا جلوگیری می شود.
Journaling سرعت نوشتن فایل بر روی دیسک را کمی کاهش می دهد. ولی استفاده از آن در کامپیوتر های دسکتاپ و لپ تاپ ها می تواند بسیار ارزشمند باشد، چرا که این کاهش سرعت خیلی چشمگیر نیست. کل فایل بر روی Journal نوشته نمی شود، بلکه آدرس محل فایل بر روی دیسک در Journal قرار می گیرد.
تمام فایل سیستم های جدید از ویژگی Journaling پشتیبانی می کنند. معمولا برای سرور ها و سیستم هایی از این قبیل، از ویژگی Journaling استفاده نمی شود، زیرا کارایی و سرعت در این سیستم ها نسبت به هر چیز دیگری اولویت دارد.
فایل سیستم های لینوکس چه تفاوت هایی با هم دارند؟
لینوکس یک سیستم عامل متن باز (Open-source) است. بنابراین هر شخصی در هر جای دنیا می تواند یک فایل سیستم جدید برای این سیستم عامل ایجاد کند. همین امر یکی از دلایل وجود فایل سیستم های بسیار زیاد برای لینوکس به شمار می آید.
- Ext:
اولین فایل سیستمی است که مشخصا برای لینوکس ایجاد شده است. این فایل سیستم که در سال 1992 معرفی شد، نسخه ارتقا یافته فایل سیستم Minix به حساب می آید. این فایل سیستم فاقد ویژگی های مهم و اساسی است و به همین دلیل اکثر نسخه های لینوکس در حال حاضر از Ext پشتیبانی نمی کنند. - Ext2:
این فایل سیستم ویژگی Journaling را ندارد. اولین فایل سیستمی است که از یک سری ویژگی های اضافی مربوط به فایل ها و درایو هایی با حجم 2 ترابایت پشتیبانی می کند. سرعت نوشتن فایل بر روی دیسک در این فایل سیستم به علت عدم وجود Journaling بالا است. پیشنهاد می کنیم تا جایی که می توانید سمت این فایل سیستم نروید، مگر اینکه مطمین باشید که برای دلیل خاصی حتما نیاز دارید از آن استفاده کنید. - Ext3:
همان Ext2 است که ویژگی Journaling به آن اضافه شده است. Ext3 به منظور سازگاری با Ext2 و امکان تبدیل پارتیشن های Ext2 به Ext3 بدون نیاز به فرمت کردن کل پارتیشن، طراحی و ساخته شد. - Ext4:
این فایل سیستم نیز جهت سازگاری با نسخه های پیشین طراحی شد. ویژگی های جدیدی به Ext4 افزوده شده است. یکی از قابلیت های خوب و مفید این فایل سیستم، کاهش تکه تکه شده فایل ها (Fragmentation) است. Ext4 جدید ترین نسخه از سری فایل سیستم های Ext است که در سال 2008 معرفی شد و امروزه در اکثر نسخه های لینوکس بصورت پیش فرض استفاده می شود. - BtrFS:
برای اولین بار توسط Oracle طراحی و پیاده سازی شد. برگرفته از عبارت “B-Tree File System” است و ویژگی هایی مانند ادغام درایو ها، فشرده سازی و یکپارچه سازی (Defragmentation) را دارا است. - ReiserFS:
این فایل سیستم که در سال 2001 معرفی شد، یک جهش بزرگ رو به جلو برای لینوکس بود. ReiserFS ویژگی های جدید بسیاری داشت که Ext هرگز قادر به دستیابی به آن ها نیست. این فایل سیستم جایگزین Reiser4 شد که البته ویژگی ها و قابلیت های آن نسبت به نسخه پیشین تا حد بسیار زیادی افزایش داشت. - ZFS:
توسط Sun Microsystems برای سیستم عامل Solaris طراحی شد و اکنون در مالکیت Oracle قرار دارد. ZFS ویژگی های پیشرفته بسیاری دارد که از آن میان می توان به ادغام درایو ها اشاره کرد. در این فایل سیستم، هر فایل یک کنترل کننده خطا دارد، بنابراین ZFS قابلیت تشخیص خراب شدن فایل ها را نیز دارد. - XFS:
در سال 1994 توسط کمپانی Silicon Graphics برای سیستم عامل SGI IRX طراحی و پیاده سازی شد و در سال 2001 وارد دنیای لینوکس گردید. XFS در هنگام کار با فایل هایی با حجم بالا کارایی بسیار خوبی دارد، ولی در مورد فایل های کوچک در مقایسه با سایر فایل سیستم ها عملکرد چندان مناسبی ندارد. بنابراین برای استفاده در سرور های خاصی که به طور حتم با فایل های حجیم سر و کار دارند، می تواند گزینه بسیار مناسبی باشد. - JFS:
این فایل سیستم که نام آن برگرفته از عبارت “Journaled File System” است، در سال 1990 توسط کمپانی IBM و برای سیستم عامل IBM AIX طراحی شد و چند سال پس از آن به لینوکس راه یافت. JFS در هنگام کار بر روی فایل های بزرگ و کوچک، حداقل استفاده از CPU را دارد. اندازه پارتیشن های JFS را می توان بصورت پویا (Dynamic) تغییر داد.