درس آموزشی درس ۴ از ۵

پارتیشن‌بندی لینوکس چیست؟ آموزش دیسک، Mount و fstab بدون خطر

سرور می‌گه دیسک پر شده؛ واقعاً جا کم آورده یا آرشیو درست Mount نشده؟ با یه پرونده عیب‌یابی، پارتیشن‌بندی، lsblk، df، du و fstab رو بدون دست‌کاری خطرناک دیسک یاد بگیر.

مقدماتی ۲۷ دقیقه مطالعه بروزرسانی ۲۲ مهر ۱۴۰۵
فهرست این درس

ببین، فرض کن صبح بهت خبر می‌دن سرور آرشیو دیگه فایل جدید ذخیره نمی‌کنه. یکی می‌گه هارد پر شده، یکی می‌خواد سریع پارتیشن رو بزرگ کنه و نفر سوم پیشنهاد می‌ده سرور رو ری‌استارت کنیم. من قبل از هر کاری یه سؤال دارم: از کجا فهمیدیم مشکل واقعاً ظرفیت دیسکه؟ شاید دیسک آرشیو Mount نشده، شاید inodeها تموم شدن یا برنامه داره روی مسیر اشتباه می‌نویسه. توی مدیریت دیسک در لینوکس، پیدا کردن علت از حفظ بودن دستورها مهم‌تره.

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

پارتیشن‌بندی لینوکس

پارتیشن‌بندی لینوکس چیست؟ تعریف ساده بدون اصطلاحات پیچیده

خیلی ساده بگم: پارتیشن‌بندی لینوکس یعنی محدوده‌هایی روی یک فضای ذخیره‌سازی تعریف کنیم تا سیستم بدونه هر قسمت چه ساختاری داره. اما پارتیشن با فایل‌سیستم فرق می‌کنه. می‌تونی پارتیشن ساخته باشی ولی هنوز فایل‌سیستمی روش وجود نداشته باشه؛ حتی می‌تونی بدون پارتیشن جداگانه روی بعضی دستگاه‌ها فایل‌سیستم داشته باشی. پس وقتی کسی می‌گه «هارد رو پارتیشن‌بندی کردم»، هنوز معلوم نیست داده‌ها از چه مسیری در دسترسن.

اگه با مفهوم درایو C و D در ویندوز آشنایی، اینجا یه تفاوت مهم می‌بینی: توی لینوکس قرار نیست برای هر فضای ذخیره‌سازی یک حرف مستقل داشته باشیم. همه مسیرها زیر درختی قرار می‌گیرن که از / شروع می‌شه. مثلاً ممکنه دیسک جداگانه‌ای از طریق /srv/archive دیده بشه. این بخش از آموزش پارتیشن بندی لینوکس رو خوب بگیر؛ چون بدون فهمیدن Mount، حتی سالم بودن خود دیسک هم کمکی به پیدا کردن فایل‌ها نمی‌کنه.

چهار لایه‌ای که نباید قاطی‌شون کنی

لایهسؤالش چیه؟نمونه
دیسک یا Block Deviceکدوم وسیله یا دستگاه منطقی ذخیره‌سازی داریم؟/dev/sdb یا /dev/nvme0n1
پارتیشن یا Volumeکدوم بخش از فضا رو انتخاب کردیم؟/dev/sdb1 یا /dev/nvme0n1p1
فایل‌سیستمفایل‌ها بر اساس چه ساختاری ذخیره می‌شن؟ext4 یا XFS یا Btrfs
Mount Pointبرنامه از چه مسیری به داده دسترسی داره؟/srv/archive

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

یه ظرافت هم هست: همه سیستم‌ها مدل ساده «یک دیسک، یک پارتیشن، یک فایل‌سیستم» ندارن. مثلاً LVM، RAID و LUKS می‌تونن چند لایه بین دستگاه فیزیکی و مسیری که برنامه می‌بینه بسازن. توی سرور ابری هم ممکنه Volume ارائه‌دهنده رو جداگانه مدیریت کنی. برای همین مدیریت فضای ذخیره سازی لینوکس فقط شناخت نام‌هایی مثل /dev/sdb1 نیست؛ باید ارتباط لایه‌ها رو هم بفهمی.

یه پرونده واقعی‌نما : آرشیو بال‌نگار کجا گم شد؟

بریم سراغ یک ماجرای فرضی که تا آخر درس همراهمون می‌مونه. تیم «بال‌نگار» فیلم‌های کوتاه پرنده‌های مهاجر رو آرشیو می‌کنه و سرورش یک فضای جدا برای فایل‌های تصویری داره. برنامه باید خروجی رو توی /srv/bal-negar/archive بنویسه؛ اما امروز هم خطای کمبود فضا می‌ده، هم بعضی فایل‌های قبلی دیده نمی‌شن. قرار نیست داستان رو واقعی جا بزنیم؛ باهاش یاد می‌گیریم پارتیشن‌بندی لینوکس و عیب‌یابی ذخیره‌سازی چه ربطی به کار روزمره مدیر سرور داره.

برای این مشکل دست‌کم سه احتمال داریم. شاید پارتیشن آرشیو درست Mount شده ولی واقعاً فضای خالیش تموم شده. شاید اصلاً Mount نشده و برنامه بدون اینکه متوجه بشیم، روی پارتیشن ریشه فایل نوشته. یا شاید بلاک خالی هست اما inode کافی نداریم. به این حالت‌ها از بیرون ممکنه یکسان نگاه کنی: «دیسک پر شده». ولی وقتی داری مدیریت دیسک در لینوکس رو انجام می‌دی، هرکدوم مسیر بررسی متفاوتی دارن.

پارتیشن بندی لینوکس

قبل از هر دستور، این نقشه عیب‌یابی رو توی ذهنت داشته باش

من برای شروع یک نقشه چهارمرحله‌ای پیشنهاد می‌کنم: دستگاه، اتصال، ظرفیت، مصرف. اول با ابزارهای فقط‌خواندنی مشخص کن چه دیسک‌هایی داریم؛ بعد بفهم مسیر آرشیو روی کدوم فایل‌سیستم قرار گرفته. حالا ظرفیت و inodeها رو ببین و در مرحله آخر مصرف پوشه‌ها رو بررسی کن. این ترتیب توی آموزش پارتیشن‌بندی لینوکس مهمه؛ چون اگه بی‌مقدمه سراغ پاک کردن فایل بری، ممکنه اصلاً روی دیسک اشتباهی کار کنی.

مرحلهدستور فقط‌خواندنیچی رو روشن می‌کنه؟
دستگاهlsblk -fنوع فایل‌سیستم و ارتباط دستگاه‌ها
اتصالfindmnt -T /srvفایل‌سیستم پشتیبان مسیر
ظرفیتdf -hT /srv && df -i /srvفضای بلاک و inode
مصرفdu -sh /srvبرآورد مصرف فایل‌های قابل پیمایش

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

مدیریت دیسک در لینوکس؛ دیسک‌ها و پارتیشن‌ها رو از کجا ببینیم؟

آموزش lsblk؛ چه اطلاعاتی از دیسک و پارتیشن می‌گیریم؟

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

lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS

توی خروجی ممکنه sda و sda1 ببینی، یا برای SSDهای NVMe اسم‌هایی مثل nvme0n1 و nvme0n1p1. توی ماشین مجازی هم vda رایجه. این‌ها اسم دستگاه‌ان، نه درجه سلامت یا اولویت اون‌ها. موقع پارتیشن‌بندی لینوکس، اسم دستگاه رو با هویتش یکی نگیر؛ ترتیبی که کرنل به دستگاه‌ها نام می‌ده ممکنه بین راه‌اندازی‌ها تغییر کنه.

lsblk -f
lsblk -o NAME,TYPE,SIZE,MODEL,SERIAL,MOUNTPOINTS

حالا که چند خروجی مختلف گرفتی، یک مسئله امنیتی کوچیک هم داریم: ستون SERIAL ممکنه شناسه سخت‌افزار رو نمایش بده. اگر خروجی رو برای کسی می‌فرستی، اطلاعات غیرضروری رو بپوشون. ضمن اینکه روی بعضی ماشین‌های مجازی همه ستون‌ها پر نیستن. این بخش همون چیزیه که موقع پارتیشن بندی هارد در لینوکس باید حواست بهش باشه. توی مدیریت دیسک در لینوکس، خالی بودن ستون FSTYPE به‌هیچ‌وجه مجوز ساختن فایل‌سیستم جدید نیست؛ شاید اصلاً دستگاه موردنظر ساختار دیگری داشته باشه.

فرق lsblk، blkid و fdisk در لینوکس چیه؟

این سه ابزار رو تفکیک کن. lsblk نقشه دستگاه‌ها رو می‌ده، blkid اطلاعاتی مثل UUID و نوع فایل‌سیستم رو می‌شناسه و fdisk هم می‌تونه جدول پارتیشن رو بخونه یا تغییر بده. برای شروع آموزش lsblk از همه کم‌خطرتره، اما موقع یاد گرفتن fdisk در لینوکس یادت باشه فرق زیادی بین دیدن اطلاعات و نوشتن تغییر روی دیسک هست. ما فعلاً فقط حالت مشاهده رو بررسی می‌کنیم.

lsblk -o NAME,TYPE,FSTYPE,UUID,MOUNTPOINTS
findmnt -o SOURCE,TARGET,FSTYPE,OPTIONS

یه نفر می‌گه «دیسک رو توی lsblk دیدم، پس فایل‌هاش باید داخل پوشه آرشیو باشن». این نتیجه‌گیری کامل نیست. شاید فایل‌سیستم اصلاً Mount نشده یا اون پوشه روی دیسک ریشه قرار گرفته. وقتی پارتیشن‌بندی لینوکس رو عیب‌یابی می‌کنی، همیشه ارتباط دستگاه با مسیر نهایی رو بررسی کن. برای همین چند بخش جلوتر سراغ دستورهای findmnt و mount می‌ریم.

GPT و MBR چی هستن و کدوم برای پارتیشن‌بندی لینوکس بهتره؟

وقتی سراغ ساختار پارتیشن می‌ری، دو اسم زیاد می‌شنوی: MBR و GPT. هر دو درباره جدول پارتیشن حرف می‌زنن، نه فرمت فایل‌ها. MBR محدودیت‌های قدیمی‌تری در تعداد و اندازه پارتیشن‌ها داره؛ GPT شناسه‌ها و ظرفیت آدرس‌دهی گسترده‌تری ارائه می‌کنه. بحث GPT و MBR در لینوکس رو با مقایسه ext4 و XFS اشتباه نگیر؛ اولی درباره نقشه تقسیم دیسکه، دومی درباره نحوه نگهداری فایل‌ها.

پس آیا باید همه هاردهای MBR رو فوری به GPT تبدیل کنیم؟ نه! باید وضعیت بوت، Firmware، سیستم‌عامل‌های موجود و نحوه استفاده از دیسک رو بررسی کنی. توی مدیریت دیسک در لینوکس، جدیدتر بودن یک فناوری به‌تنهایی دلیل مناسبی برای دست زدن به دیسک سالم نیست. برای هر تبدیل واقعی هم نسخه پشتیبان قابل بازیابی و برنامه برگشت ضروریه.

موضوعMBRGPT
کاربرد رایجسازگاری با سیستم‌های قدیمی‌تردیسک‌ها و Firmware مدرن
محدودیت شناخته‌شدهمحدودیت‌های طرح قدیمی و اندازه قابل آدرس‌دهی با سکتورهای رایجشناسه‌ها و فضای آدرس‌دهی گسترده‌تر
تعداد پارتیشنچهار مدخل اصلی با امکان Extended در مدل سنتیمعمولاً ۱۲۸ مدخل در پیاده‌سازی‌های رایج
ارتباط با فایل‌سیستممستقل از ext4 / XFSمستقل از ext4 / XFS

فایل سیستم لینوکس کجای پارتیشن‌بندی قرار می‌گیره؟

اینجا نوبت فایل سیستم لینوکس می‌رسه. فرض کن روی دیسک یک پارتیشن ساختی؛ هنوز لزوماً نمی‌تونی فایل داخلش بنویسی. روی فضایی که انتخاب شده معمولاً فایل‌سیستمی مثل ext4 یا XFS ایجاد می‌کنیم. ابزارهایی مثل mkfs.ext4 این کار رو انجام می‌دن، ولی روی دستگاه اشتباه می‌تونن داده‌های قبلی رو از دسترس خارج کنن. برای همین توی این مقاله دستور ساخت فایل‌سیستم رو روی دیسک واقعی اجرا نمی‌کنیم.

برای انتخاب فایل‌سیستم هم جواب همیشگی نداریم. ext4 برای خیلی از کارهای عمومی مناسبه؛ XFS در بعضی بارهای کاری سروری کاربرد داره و Btrfs امکاناتی مثل Snapshot و Subvolume ارائه می‌کنه. به حجم فایل‌ها، نیاز بازیابی، رفتار I/O و سیاست بکاپ نگاه کن. پارتیشن‌بندی لینوکس و انتخاب فایل‌سیستم دو تصمیم مرتبط ولی جدا از هم هستن؛ نباید صرفاً با دیدن یک بنچمارک اینترنتی تصمیم بگیری.

آموزش mount در لینوکس؛ چرا فایل‌ها دیده نمی‌شن؟

ببین، یک فایل‌سیستم می‌تونه سالم باشه، ولی تا وقتی به یک مسیر وصل نشده باشه، برنامه از اون مسیر بهش دسترسی نداره. آموزش mount در لینوکس دقیقاً از همین سؤال شروع می‌شه: داده‌ها قراره از کجا دیده بشن؟ مثلاً پوشه /srv/data شاید نقطه اتصال یک دیسک مستقل باشه و شاید هم فقط پوشه‌ای روی پارتیشن ریشه. اسم پوشه هیچ‌کدوم رو ثابت نمی‌کنه.

findmnt -T /home -o SOURCE,TARGET,FSTYPE,OPTIONS
findmnt -T / -o SOURCE,TARGET,FSTYPE,OPTIONS
df -hT /home

حالا در خروجی findmnt دو ستون SOURCE و TARGET رو کنار هم ببین. دستور findmnt -T فایل‌سیستمی رو نشون می‌ده که یک مسیر روی اون قرار گرفته؛ حتی اگر خود مسیر نقطه Mount جدا نباشه. این نکته توی آموزش mount در لینوکس خیلی به درد می‌خوره، چون ممکنه مسیر آرشیو در ظاهر وجود داشته باشه ولی به‌جای دیسک دوم روی دیسک اصلی قرار گرفته باشه.

findmnt --mountpoint /srv/archive -o SOURCE,TARGET,FSTYPE,OPTIONS
findmnt --target /srv/archive -o SOURCE,TARGET,FSTYPE,OPTIONS

این دو فرمان مشابه رو عمداً کنار هم گذاشتیم. findmnt --mountpoint /srv/archive می‌پرسه آیا خود این مسیر نقطه اتصال مستقلیه؛ findmnt --target /srv/archive می‌پرسه چه فایل‌سیستمی مسیر رو پوشش می‌ده. یکی ممکنه چیزی پیدا نکنه ولی اون یکی پارتیشن ریشه رو نشون بده. همین تفاوت، نصف راه تشخیص خطای Mount در پرونده بال‌نگاره.

دستور df در لینوکس و تفاوت df و du؛ کدوم عدد درسته؟

برای اینکه دستور df در لینوکس رو درست بخونی، باید بدونی داره درباره ظرفیت یک فایل‌سیستم گزارش می‌ده، نه اندازه پوشه‌ها. در مقابل du فایل‌های قابل پیمایش رو اندازه می‌گیره. تفاوت df و du وقتی مهم می‌شه که مثلاً یک برنامه خطای پر شدن دیسک بده ولی توی پوشه موردنظر فایل زیادی پیدا نکنی. قبل از پاک‌کاری، معلوم کن هر دو دستور دارن درباره یک محدوده حرف می‌زنن یا نه.

df -hT /
df -i /
du -sh "$HOME"

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

دیسک پر در لینوکس؛ علت خطای No space left on device چیه؟

اگه پیام No space left on device دیدی، لزوماً نباید نتیجه بگیری ظرفیت گیگابایتی صفر شده. بعضی فایل‌سیستم‌ها ممکنه به خاطر کمبود inode اجازه ساخت فایل جدید ندن؛ گاهی هم محدودیت سهمیه یا وضعیت Mount در کاره. برای رفع خطای No space left on device اول df -h و df -i رو کنار هم ببین. اینطوری مشخص می‌شه مشکل بیشتر به ظرفیت بلاک مربوطه یا باید جای دیگه رو بررسی کنی.

df -hT "$HOME"
df -i "$HOME"

فقط یادت باشه inode در همه فایل‌سیستم‌ها دقیقاً مثل هم مدیریت نمی‌شه؛ رفتار ext4، XFS و Btrfs تفاوت‌هایی داره. همین‌طور ممکنه محدودیت نوشتن، فایل‌سیستم فقط‌خواندنی یا سیاست سهمیه باعث خطا شده باشه. وقتی درباره دیسک پر در لینوکس صحبت می‌کنیم، یک خروجی به‌تنهایی حکم نهایی نیست. باید نوع فایل‌سیستم و پیام دقیق برنامه رو هم ببینی.

چرا اندازه فایل با فضایی که مصرف کرده یکی نیست؟

بیا یه رفتار جالب فایل‌ها رو ببینیم. ممکنه ls -lh اندازه یک فایل رو ۳۲ مگابایت نشون بده، ولی du -h مصرف واقعی خیلی کمتری گزارش کنه. این فایل می‌تونه Sparse باشه؛ یعنی همه فضای منطقی اعلام‌شده‌اش هنوز واقعاً روی دیسک تخصیص داده نشده. این مثال کمک می‌کنه بفهمی چرا مدیریت دیسک در لینوکس صرفاً خوندن یک عدد Size نیست.

این تفاوت برای فایل‌های دیسک مجازی، بعضی پایگاه داده‌ها و فضاهای Copy-on-Write خیلی کاربردیه. البته بسته به فایل‌سیستم، Snapshot یا فشرده‌سازی، du هم همیشه کل داستان مصرف فیزیکی رو نمی‌گه. پس وقتی دیسک پر در لینوکس رو بررسی می‌کنی، سراغ نوع ذخیره‌سازی و اندازه‌گیری درست برو؛ نه اینکه بی‌دلیل پارتیشن رو بزرگ کنی.

پارتیشن بندی هارد در لینوکس

آزمایش عملی امن : یک دیسک خیالی، بدون دیسک واقعی

برای این تمرین یک پوشه مخصوص توی Home می‌سازیم و یک فایل Sparse با اندازه منطقی ۳۲ مگابایت داخلش قرار می‌دیم. قبل از اجرای فرمان‌ها مطمئن شو پوشه‌ای با همین نام از قبل برای کار شخصی نداری. این فایل نه یک پارتیشن واقعیه نه قراره Mount بشه؛ فقط می‌خوایم تفاوت اندازه ظاهری با مصرف واقعی رو ببینیم. توی آموزش پارتیشن‌بندی لینوکس، چنین آزمایش کم‌خطری کمک می‌کنه مفهوم فضا رو بفهمی بدون اینکه اطلاعاتت رو به خطر بندازی.

LAB="$HOME/nb-lpic1-disk-lab"
mkdir -p "$LAB"
printf "sample=bal-negar\n" > "$LAB/notes.txt"
truncate -s 32M "$LAB/virtual-disk.img"
ls -lh "$LAB/virtual-disk.img"
du -h "$LAB/virtual-disk.img"
du --apparent-size -h "$LAB/virtual-disk.img"

روی فایل‌سیستم‌های پشتیبان Sparse File معمولاً ls و du --apparent-size عددی نزدیک ۳۲ مگابایت گزارش می‌کنن، ولی du مصرف تخصیص‌یافته کمتری می‌بینه. اگر روی سیستم تو این اختلاف دیده نشد، لازم نیست نتیجه بگیری دستور غلطه؛ شاید فایل‌سیستم یا لایه ذخیره‌سازی رفتار متفاوتی داشته باشه. هدف تمرین اینه که خروجی رو بفهمی، نه اینکه همه ماشین‌ها دقیقاً یک عدد بدن.

df -hT "$LAB"
df -i "$LAB"
findmnt -T "$LAB" -o SOURCE,TARGET,FSTYPE,OPTIONS
stat -c "name=%n size=%s bytes blocks=%b" "$LAB/virtual-disk.img"

حالا سه گزارش رو کنار هم بذار: اندازه منطقی فایل از ls، بلاک‌های تخصیص‌یافته از stat و فضای کل فایل‌سیستم از df. این‌ها سه سؤال مختلف رو جواب می‌دن. اگه بتونی برای دانشجویی دیگه توضیح بدی چرا ساختن یک فایل ۳۲ مگابایتی الزاماً ۳۲ مگابایت فضای فیزیکی مصرف نمی‌کنه، بخش مهمی از مدیریت فضای ذخیره سازی لینوکس رو واقعاً فهمیدی.

یک تمرین دوم : تشخیص نوع خطا، بدون دست زدن به سرور

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

cases = [
    {"name": "archive-offline", "device_seen": True, "mount_ok": False, "blocks_free": 60, "inodes_free": 40},
    {"name": "video-volume", "device_seen": True, "mount_ok": True, "blocks_free": 0, "inodes_free": 80},
    {"name": "tiny-metadata", "device_seen": True, "mount_ok": True, "blocks_free": 45, "inodes_free": 0},
    {"name": "unknown-storage", "device_seen": False, "mount_ok": False, "blocks_free": None, "inodes_free": None},
]

def first_check(case):
    if not case["device_seen"]:
        return "CHECK_DEVICE_DISCOVERY"
    if not case["mount_ok"]:
        return "CHECK_MOUNT_CONFIGURATION"
    if case["blocks_free"] == 0:
        return "CHECK_BLOCK_CAPACITY"
    if case["inodes_free"] == 0:
        return "CHECK_INODE_CAPACITY"
    return "INVESTIGATE_APPLICATION_AND_PERMISSIONS"

for case in cases:
    print(case["name"] + ": " + first_check(case))
archive-offline: CHECK_MOUNT_CONFIGURATION
video-volume: CHECK_BLOCK_CAPACITY
tiny-metadata: CHECK_INODE_CAPACITY
unknown-storage: CHECK_DEVICE_DISCOVERY

خروجی برنامه رو خط‌به‌خط نگاه کن. وقتی دستگاه دیده می‌شه ولی Mount نداره، پارتیشن‌بندی دوباره الزاماً جواب نیست. وقتی inode تموم شده، افزایش حجم دیسک شاید مسئله رو حل نکنه. وقتی دستگاه اصلاً شناسایی نشده، باید سراغ سخت‌افزار یا تنظیمات ماشین مجازی بری. همین دسته‌بندی کمک می‌کنه برای دیسک پر در لینوکس راه‌حل شانسی پیشنهاد ندی.

fdisk در لینوکس و parted؛ قبل از تغییر دیسک چی بدونیم؟

بریم سراغ ابزارهایی که اسمشون رو توی کلاس و آزمون زیاد می‌شنوی. fdisk در لینوکس برای بررسی و تغییر جدول پارتیشن به کار می‌ره و parted هم ابزار دیگه‌ای در همین حوزه‌ست. اما بین «جدول رو بخون» و «تغییرات رو روی دیسک بنویس» فاصله خیلی زیاده. توی آموزش پارتیشن‌بندی لینوکس، اول می‌خوام عادت کنی دیسک درست رو شناسایی کنی؛ سراغ دستورهای ایجاد یا حذف پارتیشن روی هارد واقعی نمی‌ریم.

قاعده من اینه: قبل از هر تغییر واقعی باید دقیقاً بدونی دستگاه کدومه، چه داده‌ای روش قرار داره، چه سرویس‌هایی ازش استفاده می‌کنن و بکاپ قابل بازیابی کجاست. وضعیت Mount و لایه‌هایی مثل LVM رو هم باید دیده باشی. صرف اینکه یک دستور fdisk در لینوکس توی ماشین مجازی جواب داده، دلیل نمی‌شه روی سرور اصلی هم بدون برنامه ازش استفاده کنی.

ابزاربرای چه کاریه؟در این درس اجرا می‌کنیم؟
lsblk / findmnt / df / duمشاهده دستگاه، Mount و مصرفبله؛ فقط‌خواندنی
fdisk / partedخواندن یا تغییر جدول پارتیشنتغییر نمی‌دیم
mkfs.ext4 / mkfs.xfsساخت فایل‌سیستمخیر؛ روی دیسک واقعی خطرناک
fsck / xfs_repairبررسی یا تعمیر فایل‌سیستم با شرایط مشخصتعمیر اجرا نمی‌کنیم
mount / umountوصل یا جدا کردن فایل‌سیستمفقط درباره‌ش توضیح می‌دیم

fstab چیست؟ آموزش fstab برای اتصال پایدار دیسک

برگردیم سراغ آرشیو بال‌نگار. قراره دیسک آرشیو بعد از هر بار راه‌اندازی از یک مسیر مشخص در دسترس باشه. اینجا سؤال «fstab چیست؟» پیش میاد: فایل /etc/fstab یکی از روش‌های تعریف اتصال‌های پایدار فایل‌سیستم توی لینوکسه. یک UUID اشتباه یا مسیر ناموجود ممکنه بوت یا اجرای سرویس رو مختل کنه. پس آموزش fstab فقط یاد گرفتن قالب یک خط نیست؛ باید اثرش روی سیستم رو هم بفهمی.

توی این بخش از آموزش fstab فقط محتوا و معنای ستون‌ها رو می‌خونیم و فایل واقعی رو ویرایش نمی‌کنیم. مخصوصاً روی سروری که از راه دور بهش وصل شدی، تغییر تنظیمات Mount بدون راه برگشت می‌تونه دسترسی به داده‌ها رو مختل کنه. از همین اول یاد بگیر قبل از تغییر فایل تنظیماتی حساس، نسخه فعلی و وابستگی سرویس‌ها رو بررسی کنی.

cat /etc/fstab
findmnt --fstab -o SOURCE,TARGET,FSTYPE,OPTIONS

خط نمونه‌ای که پایین می‌بینی ساختگیه؛ UUID واقعیش رو باید از دستگاه خودت پیدا کنی و هرگز نباید همین مقدار فرضی رو توی سیستم وارد کنی. فعلاً فقط ستون‌ها رو بخون: منبع، نقطه اتصال، نوع فایل‌سیستم، گزینه‌ها و دو عدد پایانی. وقتی آموزش fstab رو درست بفهمی، می‌تونی توضیح بدی چرا تنظیم اشتباه Mount ممکنه خودش رو به شکل خطای ذخیره‌سازی نشون بده.

UUID=11111111-2222-3333-4444-555555555555  /srv/bal-negar/archive  ext4  defaults,nofail  0  2

گزینه nofail ممکنه اجازه بده بوت با وجود نبودن بعضی Mountها ادامه پیدا کنه؛ اما همیشه انتخاب خوبی نیست. تصور کن برنامه آرشیو بالا بیاد و چون دیسک دوم وصل نشده، خروجی رو روی دیسک ریشه بریزه! توی آموزش mount در لینوکس، فقط وصل کردن فایل‌سیستم مهم نیست؛ باید مطمئن شی برنامه پیش از آماده شدن فضای موردنیازش شروع به نوشتن نکنه.

دستور mount، umount و مفهوم UUID رو درست بفهمیم

حالا فرق دو دستور رو روشن کنیم. mount یک فایل‌سیستم رو به درخت مسیرها وصل می‌کنه و umount اون رو جدا می‌کنه. اسم دستور دوم هم umount هست، نه unmount. برای آموزش mount در لینوکس بهتره اول با findmnt وضعیت رو بخونی؛ توی مستندات انگلیسی هم همین مبحث رو با عنوان Linux Filesystem Mounting پیدا می‌کنی. چون جدا کردن فضای ذخیره‌سازی از یک سیستم فعال ممکنه دسترسی برنامه‌ها رو قطع کنه.

برای Mount پایدار معمولاً UUID کمک می‌کنه به نام‌های متغیری مثل /dev/sdb1 تکیه نکنیم. ولی UUID هم جای شناخت دیسک رو نمی‌گیره؛ دیسک کلون‌شده ممکنه شناسه تکراری داشته باشه و فرمت دوباره هم شناسه رو تغییر می‌ده. پس توی مدیریت دیسک در لینوکس، قبل از هر اتصال باید بررسی کنی فایل‌سیستم واقعی همون چیزیه که انتظار داری.

دیسک پر در لینوکس؛ قبل از پاک کردن فایل چه کار کنیم؟

وقتی می‌شنوی «دیسک پر در لینوکس»، اولین فرمانت نباید حذف فایل‌ها باشه. اول با دستور df در لینوکس مشخص کن کدوم فایل‌سیستم به سقف مصرف رسیده. شاید /var فضای جدا داشته باشه و شاید هم همراه /home روی پارتیشن ریشه باشه. اگر مسیر رو اشتباه تشخیص بدی، ممکنه پاک‌کاری هیچ اثری روی مشکل اصلی نذاره.

df -hT /
df -hT /var
findmnt -T /var -o SOURCE,TARGET,FSTYPE
df -i /var

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

حذف یک فایل همیشه فضا رو فوراً آزاد نمی‌کنه

یه حالت گیج‌کننده هم داریم: برنامه فایلی رو باز نگه داشته، تو فایل رو حذف کردی ولی فضای دیسک آزاد نشده. چون تا وقتی آخرین ارجاع باز باقی بمونه، ممکنه بلاک‌های اون فایل همچنان اشغال باشن. این یکی از جواب‌های احتمالی برای تفاوت df و du در زمان عیب‌یابی دیسکه. معنی‌اش هم این نیست که هر اختلافی حتماً از همین موضوع میاد.

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

دستور df در لینوکس

پارتیشن، LVM، RAID و فضای ابری چه فرقی دارن؟

روی بعضی سرورها خروجی lsblk چند لایه بین دیسک و مسیر نهایی نشون می‌ده؛ مثلاً Volume منطقی LVM یا دستگاه رمزگذاری‌شده. اون‌وقت افزودن ظرفیت فیزیکی الزاماً به معنی بزرگ شدن پارتیشن یا فایل‌سیستم نیست. اینجا مدیریت دیسک در لینوکس نیاز به فهمیدن زنجیره لایه‌ها داره، نه فقط نگاه کردن به حجم اعلام‌شده در پنل هاست.

اگه دنبال منابع انگلیسی می‌گردی، اصطلاح‌های Linux Partitioning و Linux Disk Management معمولاً همین دو بحث متفاوت رو پوشش می‌دن؛ اولی تقسیم فضا و دومی اداره‌کردن اون در عمل. توی سرورهای ابری هم ممکنه از پنل حجم دیسک رو زیاد کنی ولی داخل لینوکس هنوز اندازه قبلی دیده بشه. باید تشخیص بدی کدوم لایه تغییر کرده و کدوم لایه هنوز گسترش پیدا نکرده. مسیر Resize در ext4، XFS و LVM یکسان نیست. اگر هدف واقعاً پارتیشن‌بندی لینوکس یا گسترش فضای ذخیره‌سازیه، این کار رو در محیط آزمایشی و با روش مشخص همون سیستم تمرین کن.

اشتباه‌های پرتکرار مدیریت دیسک که بهتره همین الان کنار بذاری

چند اشتباه رو از همین الآن کنار بذار: هر خطای ذخیره‌سازی رو کمبود گیگابایت فرض نکن، دیدن دیسک رو با Mount شدنش یکی نگیر و بدون شناخت فایل‌سیستم سراغ تعمیر نرو. همین‌طور برای آزاد کردن فضا فایل سیستمی رو شانسی حذف نکن. توی مدیریت دیسک در لینوکس، عجله معمولاً مشکل دوم رو به مشکل اول اضافه می‌کنه.

یک اشتباه دیگه هم هست: فکر کنی اگر پارتیشن بزرگ‌تر بشه، خودبه‌خود مشکل حل می‌شه. ممکنه برنامه هنوز روی مسیر اشتباه بنویسه. حتی وقتی فایل‌سیستم جدیدی روی پوشه‌ای Mount می‌شه، فایل‌های زیرین اون پوشه موقتاً از همون مسیر دیده نمی‌شن؛ حذف نشدن، فقط زیر Mount پنهان شدن. این بخش از پارتیشن‌بندی لینوکس رو باید در کنار مفهوم مسیرها بفهمی، نه جدا از اون.

پارتیشن‌بندی لینوکس؛ ۵ سؤال قبل از تغییر واقعی دیسک

قبل از هر تغییر روی دیسک، این پنج سؤال رو برای خودت جواب بده: دقیقاً کدوم دستگاه؟ چه داده‌ای روشه؟ کدوم سرویس‌ها بهش وابسته‌ان؟ بکاپ قابل بازیابی داریم؟ بعد از تغییر چطور نتیجه رو تست می‌کنیم؟ این پنج سؤال، چارچوب امنی برای آموزش پارتیشن‌بندی لینوکس هستن. اگر جواب یکی‌شون روشن نیست، همون‌جا عملیات رو متوقف کن؛ هیچ امتیازی نداره که سریع‌تر از بقیه Enter بزنی.

البته این پنج سؤال جای برنامه حرفه‌ای تغییرات رو نمی‌گیرن. اینجا تمرکزمون روی خوندن وضعیت فعلیه؛ برای ساخت پارتیشن واقعی، فرمت کردن، عیب‌یابی فایل‌سیستم و Resize باید یک دیسک مجازی تازه و محیط کنترل‌شده داشته باشی. مهارت مدیریت دیسک در لینوکس زمانی ارزش پیدا می‌کنه که هم دستور رو بلد باشی، هم بدانی کِی نباید اجراش کنی.

تمرین پایانی : تو مسئول سرور بال‌نگار هستی

الان تو مسئول سرور بال‌نگار هستی. برنامه توی /srv/bal-negar/archive چیزی نمی‌نویسه و سه پیشنهاد می‌شنوی: افزایش حجم هارد، حذف فایل یا ری‌استارت. من ازت یک چیز می‌خوام: بدون اجرای هیچ تغییر واقعی، توضیح بده از کجا شروع می‌کنی. در مدیریت دیسک در لینوکس، جواب خوب قبل از راه‌حل دادن سراغ شواهد می‌ره.

اول با lsblk ببین دستگاه‌ها چی هستن؛ بعد با findmnt --mountpoint تأیید کن آرشیو واقعاً نقطه اتصال مستقله. با findmnt -T بفهم مسیر روی کدوم فایل‌سیستم قرار گرفته. حالا df -hT و df -i رو بخون و در آخر، اگر مجوز داشتی، مصرف مسیرها رو بررسی کن. این ترتیب هم آموزش lsblk رو مرور می‌کنه، هم بهت نشون می‌ده فرق بررسی و تغییر چیه.

تمرین تکمیلی: توی پوشه آزمایش، یک فایل معمولی کوچیک و یک فایل Sparse بساز. خروجی ls -lh، du -h و df -hT رو کنار هم بذار و برای خودت توضیح بده هر عدد مربوط به چیه. بعد یک سناریو بنویس که در اون تفاوت df و du به وجود میاد و برای تشخیصش چه شاهدهایی لازمه. هدف این نیست جواب رو حفظ کنی؛ می‌خوام منطقش رو یاد بگیری.

پارتیشن بندی لینوکس

این درس کجای مسیر LPIC-1 قرار می‌گیره؟

این درس با بخش ۱۰۴ اهداف LPIC-1 ارتباط داره؛ مخصوصاً مفاهیم پارتیشن، فایل‌سیستم و Mount. توی آموزش LPIC-1 باید ابزارها و تفاوت روش‌های مدیریت دیسک رو بشناسی، ولی قرار نیست از همین مقاله تمام فرمان‌های خطرناک رو روی دیسک واقعی اجرا کنی. موضوع‌هایی مثل LVM، Swap و تعمیر فایل‌سیستم رو باید جداگانه و در محیط آزمایشی تمرین کرد.

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

سؤال‌های متداول درباره دیسک و پارتیشن‌بندی لینوکس

پارتیشن‌بندی لینوکس چه فرقی با فرمت کردن داره؟

پارتیشن‌بندی محدوده‌های منطقی فضای ذخیره‌سازی رو مشخص می‌کنه؛ فرمت کردن معمولاً ساختار فایل‌سیستم رو روی فضای انتخاب‌شده ایجاد می‌کنه. این دو یکی نیستن و هر دو می‌تونن روی داده موجود اثر بذارن. بدون شناسایی دقیق دستگاه و Backup سراغ تغییرشون نرو.

از کجا بفهمم یک دیسک در لینوکس Mount شده؟

اول با lsblk -f و findmnt وضعیت رو ببین. اگر می‌خوای بفهمی یک پوشه مشخص خودش Mount Point هست، از findmnt --mountpoint استفاده کن؛ گزینه -T ممکنه فایل‌سیستم والد مسیر رو نشون بده، حتی وقتی پوشه Mount مستقل نداره.

چرا df می‌گه دیسک پره ولی du فایل زیادی پیدا نمی‌کنه؟

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

آیا fdisk اطلاعات هارد رو پاک می‌کنه؟

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

فرق MBR و GPT در لینوکس چیه؟

این‌ها دو روش مدیریت جدول پارتیشن هستن، نه دو فایل‌سیستم. GPT در سخت‌افزار و سیستم‌های مدرن رایج‌تره و محدودیت‌های طرح قدیمی MBR رو کمتر داره. انتخاب یا تغییرش باید با وضعیت Firmware و ساختار فعلی دیسک هماهنگ باشه.

fstab چیه و آیا برای Mount لازم داریم؟

فایل /etc/fstab یکی از راه‌های اصلی تعریف Mountهای پایدار موقع راه‌اندازیه، اما تنها روش نیست؛ مثلاً systemd Mount Unit هم وجود داره. اگر می‌خوای فقط وضعیت فعلی رو ببینی، نیازی نیست fstab رو تغییر بدی.

چرا با وجود فضای خالی خطای No space left on device می‌گیرم؟

یکی از علت‌ها می‌تونه پر شدن inodeها باشه. با df -i در کنار df -h بررسی اولیه انجام بده. البته سهمیه کاربر، فضای رزروشده، محدودیت فایل‌سیستم و دلایل دیگر هم ممکنن؛ یک خروجی به‌تنهایی تشخیص قطعی نیست.

برای یادگیری پارتیشن‌بندی واقعی از کجا شروع کنم؟

اول همین ابزارهای فقط‌خواندنی رو یاد بگیر و بعد روی ماشین مجازی و یک دیسک مجازیِ تازه، با Snapshot و Backup، ساخت پارتیشن، فایل‌سیستم و Mount رو تمرین کن. هیچ‌وقت اولین تمرین تغییر پارتیشن رو روی هارد شخصی یا سرور واقعی انجام نده.

منابع معتبر برای بررسی بیشتر

برای صحت فنی این درس از اهداف رسمی LPIC-1 نسخه ۵ و مستندات ابزارهای lsblk، findmnt و fstab استفاده شده. برای اختلاف اندازه فایل و مصرف فضای واقعی هم راهنمای GNU du مرجع دقیقیه. روایت آرشیو بال‌نگار و تمرین‌ها برای همین درس نوشته شدن.

اگه می‌خوای به‌جای حفظ کردن چند دستور، مدیریت سرور لینوکس رو با یک مسیر منظم یاد بگیری، می‌تونی هاب آموزش LPIC-1 رو ادامه بدی یا سرفصل‌های دوره کامل LPIC-1 نابغه‌ها رو ببینی. قرار نیست این مقاله جای تمرین تخصصی رو بگیره؛ هدف اینه بعد از خوندنش وقتی کسی گفت «هارد سرور پر شده»، بدون حدس و عجله اولین سؤال درست رو بپرسی.

می‌خواهی عمیق‌تر جلو بروی؟

این درس فقط یک بخش از مسیر کامل است

اگر می‌خواهی مباحث را به‌ترتیب، همراه تمرین و پروژه دنبال کنی، مسیر کامل دوره را ببین.

مشاهده دوره LPIC-1