LPIC-1Linux

آموزش Lpic 1 لینوکس : آشنایی و معرفی فایل سیستم در لینوکس

آموزش لینوکس : آشنایی و معرفی فایل سیستم در لینوکس

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

سیستم فایل‌بندی یا سیستم فایل یا سامانهٔ پرونده (file system) روشی برای ذخیره و سازمان‌دهی پرونده‌های رایانه‌ای و داده‌هایشان است تا یافتن و دسترسی به آن‌ها را آسان کند.

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

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

ساختار و قوانین منطقی‌ای که برای مدیریت دسته‌ای از اطلاعات و نام آن‌ها استفاده می‌شود «سیستم فایل» نامیده می‌شود. انواع مختلفی از سیستم فایل‌بندی وجود دارد که هریک ساختار و منطق متفاوتی دارند. هریک دارای خواص مختلفی از سرعت، انعطاف‌پذیری، امنیت، اندازه و غیره  هستند. بعضی از سیستم فایل‌بندی‌ها برای کاربردهای خاصی طراحی شده‌اند. برای مثال، سیستم فایل‌بندی ایزو ۹۶۶۰ مخصوص دیسک‌های نوری طراحی شده‌است.

سیستم‌های پرونده می‌توانند از یک وسیلهٔ ذخیرهٔ اطلاعات مانند دیسک سخت یا سی‌دی‌رام بهره ببرند و مکان فیزیکیِ پرونده‌ها را نگهداری کنند و می‌توانند دسترسی به داده‌های یک پروندهٔ برده (یا سِروِر) را با رفتار به‌عنوان کاربر (کلاینت) برای یک پروتکل شبکه (مانند کلاینت‌های NFS ,SMB یا 9P) فراهم کنند، یا ممکن است مجازی باشند و تنها به‌عنوان روشی برای دسترسی به داده‌های مجازی (مانند procfs) وجود داشته باشند. این با خدمات دایرکتوری و رجیستری متفاوت است.

در شکل رسمی‌تر، یک سیستم پرونده یک پایگاه‌داده تک‌کاره برای انباشت، سازمان‌دهی، دستکاری و بازیابی داده‌ها است.

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

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

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

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

برای نمونه ext2, ext3, ext4 یک فایل سیستم بالانس و مناسب برای همه کاری می باشد البته مناسب جاهایی که شما فایل های بسیار کم حجم در تعداد زیاد دارید نمی باشد. Extended Filesystem یا فایل سیستم توسعه یافته که با اختلاف زیادی، محبوب ترین فایل سیستم لینوکس است. EXT 2/3/4 در طول این سال ها امتحان خود را پس داده و شکی در آن نیست که فایل سیستم پایدار و قابل اطمینانی است. تمام ویژگی های کرنل لینوکس مثل quota، خصوصیات POSIX و ACL را پشتیبانی می کند. بنابراین هنوز هم فایل سیستم با دوامی برای دسکتاپ و سرور محسوب می شود، ولی به هر حال، هیچ برنامه ای برای توسعه نسل جدید فایل سیستم EXT4 وجود ندارد. موسسان لینوکس هم به حمایت از Btrfs به عنوان نسل بعدی فایل سیستم اجرایی در لینوکس پرداخته اند.

ReiserFS برعکس ext مناسب فایل هایی با حجم کم می باشد.

XFS مناسب فایل هایی با حجم بسیار بالا می باشد به طوری که میتوان یک پارتیشن با 8 اگزابایت ایجاد کرد. گزینه ی پیشنهادی لینوکس ردهت، پس از نسخه ی ۷ این توزیع فایل سیستم XFS است. این فایل سیستم، سابقه خوبی در ابرکامپیوترها و سرورها دارد و اولین بار در سیستم عامل IRIX در سال 1994 معرفی شد. اما استفاده از آن بدون دردسر هم نیست. عمده ترین مشکل آن نبود checksum داده یا ECC است که باعث می شود اطلاعاتتان در معرض خرابی قرار بگیرد، بدون آن که از بروز اشکال مطلع شوید. از طرف دیگر bit rot باعث ایجاد مشکلاتی می شود مانند عدم فشرده سازی transparent، نبود امکان shrink یک درایو و یا گرفتن snapshot از درایو بدون ابزار اضافی و freezing I/O، که این ها حداقل نگرانی هایتان خواهد بود.

با وجود این ضعف ها، XFS به خاطر بهره بردن از parallel i/o بهینه سازی شده، به عنوان فایل سیستمی بسیار پایدار و سریع شناخته می شود و اگر بتوانید از نقص هایش صرف نظر کنید، به گزینه ای قابل اطمینان تبدیل خواهد شد. اما اگر از سخت افزاری معمولی استفاده می کنید، بهتر است گزینه ای را انتخاب کنید که مانند موارد دیگر این لیست، از بی عیب و نقص بودن اطلاعات تان هم محافظت نماید.

JFS را شاید بتوان یکی از بهترین فایل سیستم ها معرفی کرد زیرا میتوان برای هر کاری آن را Customize کرد.

Btrfs یک فایل سیستم تقریبا جدید (سال 2009 معرفی شده است) است ولی با ویژگی های عالی که شرکت های بزرگی مانند FacebookFujitsuFusion-IOIntelLinux FoundationNetgearOracle CorporationRed HatSTRATO AG, و SUSE از توسعه دهندگان آن می باشند. با کمک این فایل سیستم، می توان چندین دیسک مختلف را بدون انجام پارتیشن بندی کنار هم قرار داد و با کمک آنها، فضای واحدی را ایجاد نمود.

همچنین می توان حجم این فضا را به صورت انلاین، کم یا زیاد نمود و مهمتر آنکه، با استفاده از این فایل سیستم،می توان در دو سطح metadata و data در مورد striping و mirroring سیاستهایی را اعمال کرد از دیگر قابلیتهای این فایل سیستم، ایجاد subvolume و snapshot می باشد.

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

این فایل سیستم علاوه بر عدم نیاز به مداخله انسانی، به مدیریت درایوها و کنترولر RAID می پردازد. یعنی نیازی به 3 ابزار مجزا برای انجام ذخیره سازی و عملکرد robust redundant نخواهید داشت که این مورد حتی برای کسانی که از لحاظ فنی نیز توانایی انجام این کار را دارند، ارزش بالایی خواهد داشت. Btrfs به عنوان نسل بعدی فایل سیستم ها برای کاربران لینوکس شناخته می شود، دلیل آن هم ساده است؛ اگرچه این فایل سیستم بدون اقدامات اولیه، کارایی یکسانی برای همه ی اپلیکیشن ها ندارد، اما در نهایت انتخاب مناسبی برای دسکتاپ خواهد بود.

ZFS حدودا 4 یا 5 سال قبل از Btrfs به وجود آمد و این دو از لحاظ مفهومی تشابهات زیادی با هم دارند. ZFS سابقه ی خوبی در زمینه پایداری دارد و گزینه قدرتمندی است. اگرچه به دلیل مشکلات حقوقی، هرگز همراه لینوکس عرضه نمی شود و همین باعث چالشی برای شرکت کانونیکال و اوبونتو شده است. برای اجرای ZFS باید نرم افزارهایی از ریپوزیتوری های دیگر و به اصطلاح Third Party را نصب نمایید. داشتن درایو روت با فایل سیستم ZFS می تواند مشکل ساز باشد و حتی در بعضی توزیع ها غیرممکن است. در حالی که ZFS یکی از قدرتمندترین فایل سیستم ها است، این احتمال وجود دارد که برای همیشه به عنوان گزینه ای نامناسب برای سیستم عامل های لینوکسی باقی بماند.

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

سیستم عامل لینوکس یک سیستم عامل بر مبنا فایل (File Based) می‌باشد. وقتی یک سیستم عامل بر مبنا فایل است یعنی همه چیز (تاکید میکنم هممممه چیز) از نظر سیستم عامل یک فایل است. مواردی همچون برنامه اجرایی و پوشه و تصویری و صوتی و عکس و راه های ارتباطی با سخت افزار و هرچیز دیگری به عنوان یک فایل در سیستم عامل تعریف می‌شوند.

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

ساختار فایل سیستم در لینوکس به این صورت است که یک دایرکتوری اصلی به نام “/” یا روت وجود دارد که تمامی سیستم عامل داخل این دایرکتوری جای دارد. در تصویر زیر ساختار عمومی فایل سیستم لینوکس آمده است که در ادامه به توضیح این تصویر میپردازم.

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

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

زیر مجموعه دایرکتوری “/” تعدادی دایرکتوری هست که در ادامه به توضیح آنها می‌پردازم

دایرکتوری bin: این دایرکتوری که اول عبارت binaries هست شامل فایل های اجرایی است. برای نمونه دستورات لینوکس همگی باید یک فایل اجرایی داشته باشند که برخی از اون فایل ها در این دایرکتوری وجود دارد.

دایرکتوری boot: هرچیزی که لینوکس برای بوت شدن لازم دارد در این دایرکتوری قرار دارد. از لحظه ای که bios یا همان Basic Input Output Supervisor/Service ادامه کار را به boot loader لینوکسی میدهد تا لحظه ای که مدیریت به systemd/init تحویل داده شود همه چیز در این دایرکتوری است.

دایرکتوری dev: در لینوکس تمامی سخت افزار های حقیقی و مجازی متصل باید یک فایل ارتباطی داشته باشند که تمامی این فایل ها در این دایرکتوری است. برای نمونه می‌توان به cdrom و usb و هارد های متصل و کارت صدا و کارت شبکه و … اشاره کرد. عبارت dev بیانگر کلمه devices می‌باشد.

دایرکتوری etc: برای نام این دایرکتوری بین دو عبارت Etcetera و Editable Text Configuration اختلاف وجود دارد که از نظر من هردو می‌تواند درست باشد. چون این دایرکتوری هم شامل تمامی فایل های تنظیمات لینوکس می‌باشد و هم در این دایرکتوری می‌توان فایل هایی دید که هیچ ربطی به تنظیمات ندارند.

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

دایرکتوری lib: تمامی برنامه های زیرمجموعه لینوکس نیاز دارند که با سایر برنامه ها یا سخت افزار ها ارتباط برقرار کنند و یا از آنها استفاده کنند. برای نمونه یک نرم افزار پخش فایل صوتی که با زبان c نوشته شده است نیاز دارد با کارت صدا و کامپایلر c و چند نرم افزار دیگر ارتباط برقرار کند راه های ارتباطی این نرم افزار ها با یکدیگر در این دایرکتوری وجود دارند.

دایرکتوری media: این دایرکتوری معمولا برای سخت افزار های اضافه شده مانند usb و cdrom و … استفاده می‌شود. این دایرکتوری ممکن است در بعضی از نسخه ها وجود نداشته باشد.

دایرکتوری mnt: این دایرکتوری برای mount کردن استفاده میشود. گرچه عملیات mount در هرجای سیستم عامل قابل انجام است.

دایرکتوری opt: این دایرکتوری که نام کامل آن optional است به صورت باز به عهده کاربر است و کاربر میتواند هرطور که دوست دارد از این دایرکتوری استفاده کند.

دایرکتوری proc: این دایرکتوری که از عبارت processes ساخته شده است وضعیت در لحظه فرآیندهای سیستم عامل را نشان می‌دهد.

دایرکتوری root: این دایرکتوری خانه کاربر اصلی root است که کاربر اصلی سیستم عامل لینوکس است. به دلایل امنیتی که کاملا صحیح می‌باشد خانه کاربر root از سایر کاربر ها جدا باید باشد.

دایرکتوری sbin: این دایرکتوری که در واقع system binaries است جایگاه اصلی فایل ها و نرم افزار های سیستمی است.

دایرکتوری srv: این دایرکتوری که serve directory است برای نگهداری فایل های قابل سرو توسط سرویس ها استفاده می‌شود. برای نمونه یک ftp سرور رو درنظر بگیرید که نیاز داره برای سرو یک سری فایل.

دایرکتوری tmp: این دایرکتوری که کوتاه شده عبارت temporary است برای نگهداری فایل های موقت استفاده می‌شود. نکته ای که در مورد این دایرکتوری باید درنظر بگیریم این است که تمامی کاربر ها در این دایرکتوری مجوز کامل دارند و میتواند مشکل امنیتی بوجود بیاورد.

دایرکتوری usr: این دایرکتوری نیز مانند دایرکتوری etc در انتخاب نام اختلافهایی دارد . بین نامهای users programs و unix system resources اختلاف هایی است که هردو صحیح می‌باشد. این دایرکتوری در برگیرنده برنامه های کاربردی کاربران می‌باشد که در خود لینوکس نیست و بعدا اضافه شده است.

دایرکتوری var: این دایرکتوری که از عبارت variables گرفته شده است شامل تمامی اطلاعات متغییر می‌باشد. برای نمونه تمامی لاگ فایل ها که ممکن است در لحظه تغییر کنند و یا هر فایلی که ممکن است تغییر کند در این دایرکتوری جای دارد.

Linux Filesystems
فایل سیستم در لینوکس

چند نکته مهم

در ادامه به چند نکته مهم اشاره می‌کنم:

  • تمامی این دایرکتوری ها به صورت قراردادی و استاندارد لینوکس هستند. ما می‌توانیم در هرجا که دوست داریم هر کاری را انجام دهیم. برای نمونه به راحتی میتوانیم خانه یک کاربر را به جای اینکه در دایرکتوری home قرار دهیم در دایرکتوری tmp بسازیم و یا اینکه فایل های تنظیمات را در opt قرار دهیم.
  • تفاوت bin و sbin در این است که یک سری فایل های اجرایی و دستورات اجرایی مخصوص هسته لینوکس هست مانند mv که این نوع فایل ها که مخصوص کرنل هست و مربوط به دستورات داخلی لینوکس می‌باشد داخل دایرکتوری bin هست ولی دستوراتی مانند ifconfig که داخل کرنل نیستند و به صورت نرم افزار بعدا اضافه می‌شوند در دایرکتوری sbin قرار دارند.
  • اینکه ممکن است در نسخه های متفاوت لینوکس این ساختار متفاوت باشد و یک یا چند دایرکتوری اضافه یا کم باشند.
  • تمامی اسامی فایل سیستم لینوکس اصطلاحاً Case Sensitive هستند. به عبارت دیگر، به بزرگی و کوچکی حروف حساس هستند لذا boot/ و Boot/ و یا BOOT/ نمایانگر ۳ دایرکتوری (یا فولدر) مجزا از یکدیگر می باشند.
Shares:

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *