مقدمه

به فصل پایانی دوره خوش آمدید! در این فصل به سراغ مدیریت منابع اصلی سیستم می‌رویم: دیسک، حافظه و پردازنده. پس از پردازنده و حافظه، فضای ذخیره‌سازی (دیسک‌ها) یکی از حیاتی‌ترین منابع هر سیستمی است. مدیریت این فضا - یعنی دانستن اینکه چه دستگاه‌های ذخیره‌سازی به سیستم متصل هستند، چقدر فضا در دسترس است و کدام فایل‌ها و دایرکتوری‌ها بیشترین فضا را مصرف کرده‌اند - یک مهارت بنیادی برای هر کاربر و مدیر سیستم لینوکس است.

کمبود فضای دیسک می‌تواند به سرعت یک سرور یا کامپیوتر شخصی را از کار بیندازد. در این درس، با سه ابزار خط فرمان کلیدی آشنا می‌شویم که به ما کمک می‌کنند تا تصویری واضح از وضعیت دیسک‌های خود داشته باشیم و بتوانیم به صورت پیشگیرانه فضای ذخیره‌سازی را مدیریت کنیم: lsblk، df و du.

مشاهده‌ی دستگاه‌های ذخیره‌سازی با lsblk

اولین قدم برای مدیریت دیسک، شناختن دستگاه‌های ذخیره‌سازی است که به سیستم ما متصل هستند. در لینوکس، هارد دیسک‌ها (HDD)، درایوهای حالت جامد (SSD) و حافظه‌های فلش (USB) به عنوان دستگاه‌های بلوکی (Block Devices) شناخته می‌شوند. بهترین ابزار برای مشاهده‌ی این دستگاه‌ها، دستور lsblk (مخفف List Block Devices) است. این دستور دستگاه‌ها و پارتیشن‌های آن‌ها را در یک ساختار درختی خوانا نمایش می‌دهد.

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 238.5G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0   238G  0 part /
sr0     11:0    1  1024M  0 rom  

ستون‌های مهم این خروجی عبارتند از:

ستون توضیح
NAME نام دستگاه یا پارتیشن. sda اولین دیسک SATA/SCSI، sda1 اولین پارتیشن روی آن دیسک و sda2 دومین پارتیشن است.
SIZE اندازه‌ی کلی دستگاه یا پارتیشن.
TYPE نوع دستگاه، مانند disk (دیسک)، part (پارتیشن) یا rom (درایو نوری).
MOUNTPOINT نقطه‌ی اتصال. دایرکتوری‌ای که این پارتیشن در آن به سیستم فایل اصلی متصل (mount) شده است.

بررسی فضای مصرفی فایل‌سیستم با df

دستور df (مخفف Disk Free) به ما نشان می‌دهد که در هر یک از فایل‌سیستم‌های متصل‌شده (mount شده) به سیستم، چقدر فضا مصرف شده و چقدر فضای خالی باقی مانده است. این دستور برای یک نگاه کلی به وضعیت پر شدن دیسک‌ها عالی است.

اجرای df به تنهایی، خروجی را بر حسب کیلوبایت نمایش می‌دهد که خواندن آن دشوار است. همیشه از گزینه‌ی -h (مخفف human-readable) استفاده کنید تا اندازه‌ها به صورت مگابایت (M)، گیگابایت (G) و ترابایت (T) نمایش داده شوند.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       228G   45G  172G  21% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/sda1       511M  6.1M  505M   2% /boot/efi

ستون Use% (درصد استفاده) به سرعت به شما نشان می‌دهد که کدام پارتیشن در حال پر شدن است و نیاز به توجه دارد.

بررسی فضای مصرفی فایل‌ها و دایرکتوری‌ها با du

دستور df به ما می‌گوید کل پارتیشن چقدر پر است، اما نمی‌گوید چه چیزی این فضا را اشغال کرده است. برای این کار، به سراغ دستور du (مخفف Disk Usage) می‌رویم. این دستور حجم فضای مصرف‌شده توسط یک فایل یا دایرکتوری خاص (و زیرشاخه‌هایش) را محاسبه می‌کند.

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

آپشن توضیح
-h نمایش خروجی به صورت خوانا (human-readable).
-s نمایش فقط خلاصه‌ی مجموع کل (summary) برای دایرکتوری مشخص شده.
--max-depth=N عمق نمایش زیرشاخه‌ها را به N سطح محدود می‌کند.

یک گردش کار رایج برای پیدا کردن مقصر پر شدن دیسک به صورت زیر است:

# first check the total size of the /var directory
$ sudo du -sh /var
12G     /var

# now see which subdirectories are taking up the most space at depth 1
$ sudo du -h --max-depth=1 /var
4.0K    /var/mail
8.5G    /var/log
3.2G    /var/lib
...
12G     /var

این خروجی به وضوح نشان می‌دهد که دایرکتوری‌های /var/log و /var/lib مقصران اصلی هستند و باید بررسی شوند.