پر شدن دیسک سرور لینوکس: خطاهای رایج و دستورات رفع

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

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

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

فهرست مطالب

1. مقدمه: اهمیت مدیریت فضای دیسک

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

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

2. علل پر شدن دیسک سرور لینوکس

پر شدن دیسک معمولاً نتیجه عوامل زیر است:

  • لاگ‌های بزرگ: فایل‌های لاگ در /var/log که بدون محدودیت رشد می‌کنند.
  • فایل‌های موقت: فایل‌های ذخیره‌شده در /tmp یا /var/tmp.
  • دیتابیس‌های حجیم: داده‌ها یا لاگ‌های تراکنش در MySQL یا PostgreSQL.
  • بکاپ‌های قدیمی: بکاپ‌هایی که به‌صورت خودکار حذف نمی‌شوند.
  • برنامه‌های معیوب: تولید فایل‌های غیرضروری توسط برنامه‌ها.
  • حملات سایبری: فعالیت‌های مخرب مانند استخراج ارز دیجیتال.
  • پیکربندی نادرست: عدم تنظیم محدودیت‌های فضای ذخیره‌سازی.
  • رشد طبیعی داده‌ها: افزایش داده‌های کاربران یا لاگ‌های تحلیلی.

3. علائم و نشانه‌های پر شدن دیسک

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

  • کندی در اجرای دستورات یا بارگذاری سرویس‌ها.
  • خطاهایی مانند No space left on device.
  • توقف سرویس‌هایی مانند وب‌سرور یا دیتابیس.
  • پیام‌های خطا در لاگ‌های سیستمی (/var/log/syslog).
  • تغییر فایل‌سیستم به حالت فقط خواندنی (read-only).
  • کرش کامل سرور در موارد شدید.

4. خطاهای رایج ناشی از پر شدن دیسک و دستورات رفع

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

4.1. خطای “No space left on device”

توضیح: فضای دیسک در یک پارتیشن پر شده است.
علائم: عدم امکان ایجاد فایل، کپی داده‌ها، یا نصب بسته‌ها.
دستورات رفع:

# بررسی فضای دیسک
df -h
# یافتن دایرکتوری‌های پرحجم
du -sh /var/* | sort -rh | head -n 10
# حذف فایل‌های موقت
rm -rf /tmp/*
rm -rf /var/tmp/*
# پاک‌سازی کش بسته‌ها
apt clean   # اوبونتو/دبیان
yum clean all   # CentOS

4.2. خطای “No space left on device” با وجود فضای خالی (Inode Exhaustion)

توضیح: تمام شدن inode‌ها حتی با وجود فضای خالی.
علائم: خطای مشابه بالا، اما df -h فضای خالی نشان می‌دهد.
دستورات رفع:

# بررسی تعداد inode‌ها
df -i
# یافتن دایرکتوری با تعداد زیاد فایل
find / -type f | cut -d "/" -f 2 | sort | uniq -c | sort -nr
# حذف فایل‌های کوچک و غیرضروری
find /tmp -type f -size -1M -delete
find /var/log -type f -name "*.log" -size -1M -delete

4.3. خطای توقف وب‌سرور (Apache/Nginx)

توضیح: وب‌سرور به دلیل ناتوانی در نوشتن لاگ‌ها متوقف می‌شود.
علائم: خطای HTTP 500 یا پیام “disk full” در لاگ‌ها.
دستورات رفع:

# بررسی لاگ‌های وب‌سرور
ls -lh /var/log/nginx/   # یا /var/log/apache2/
# فشرده‌سازی لاگ‌های قدیمی
find /var/log/nginx -type f -name "*.log" -exec gzip {} \;
# حذف لاگ‌های قدیمی‌تر از 30 روز
find /var/log/nginx -type f -name "*.log" -mtime +30 -delete
# ری‌استارت وب‌سرور
systemctl restart nginx   # یا apache2

4.4. خطای توقف دیتابیس (MySQL/PostgreSQL)

توضیح: دیتابیس به دلیل پر شدن فضای داده‌ها یا لاگ‌ها متوقف می‌شود.
علائم: خطاهایی مانند “disk full” یا “cannot write to log file”.
دستورات رفع:

# بررسی فضای دیتابیس
du -sh /var/lib/mysql/*   # برای MySQL
du -sh /var/lib/postgresql/*/main/pg_wal   # برای PostgreSQL
# حذف لاگ‌های باینری MySQL
mysql -e "PURGE BINARY LOGS BEFORE '2025-01-01';"
# بهینه‌سازی جداول MySQL
mysqlcheck -A --optimize
# پاک‌سازی لاگ‌های قدیمی PostgreSQL
find /var/lib/postgresql/*/main/pg_wal -type f -mtime +7 -delete
# ری‌استارت دیتابیس
systemctl restart mysql   # یا postgresql

4.5. خطای ناتوانی در لاگ‌نویسی

توضیح: پر شدن /var/log مانع ثبت لاگ‌های جدید می‌شود.
علائم: عدم ثبت رویدادها در /var/log/syslog.
دستورات رفع:

# بررسی حجم لاگ‌ها
ls -lh /var/log/
# فشرده‌سازی لاگ‌های قدیمی
find /var/log -type f -name "*.log" -exec gzip {} \;
# حذف لاگ‌های قدیمی
find /var/log -type f -name "*.log" -mtime +30 -delete
# تنظیم logrotate
nano /etc/logrotate.conf
# اجرای دستی logrotate
logrotate -f /etc/logrotate.conf

4.6. خطای فایل‌سیستم فقط خواندنی (Read-Only)

توضیح: پر شدن پارتیشن ریشه باعث تغییر فایل‌سیستم به حالت فقط خواندنی می‌شود.
علائم: خطای “read-only file system”.
دستورات رفع:

# بررسی وضعیت فایل‌سیستم
mount | grep ro
# ریمونت فایل‌سیستم به حالت خواندن/نوشتن
mount -o remount,rw /
# آزادسازی فضا
du -sh /* | sort -rh | head -n 10
rm -rf /tmp/*
# بررسی و تعمیر فایل‌سیستم
fsck /dev/sdX   # sdX را با پارتیشن مربوطه جایگزین کنید
# ری‌استارت سرور
reboot

4.7. خطای کرش کرنل

توضیح: پر شدن پارتیشن حیاتی باعث کرش کرنل می‌شود.
علائم: سرور غیرقابل دسترس می‌شود.
دستورات رفع:

# بوت در حالت ریکاوری (از طریق GRUB)
# بررسی فضای دیسک
df -h
# حذف فایل‌های غیرضروری
rm -rf /var/cache/*
find /var/log -type f -name "*.log" -delete
# تعمیر فایل‌سیستم
fsck /dev/sdX
# ری‌استارت سرور
reboot

4.8. خطای فرآیندهای بکاپ

توضیح: بکاپ‌ها به دلیل کمبود فضا متوقف می‌شوند.
علائم: خطای “failed to write backup”.
دستورات رفع:

# بررسی دایرکتوری بکاپ
du -sh /path/to/backup/
# حذف بکاپ‌های قدیمی
find /path/to/backup -type f -mtime +90 -delete
# اجرای مجدد فرآیند بکاپ
/path/to/backup-script.sh

4.9. خطای پروسه‌های غیرعادی

توضیح: پروسه‌هایی که فایل‌های بزرگ تولید می‌کنند.
علائم: مصرف غیرعادی فضای دیسک.
دستورات رفع:

# بررسی فایل‌های باز حذف‌شده
lsof | grep deleted
# شناسایی پروسه‌های پرمصرف
top
htop
# متوقف کردن پروسه
kill -9 
# ری‌استارت سرویس
systemctl restart 

5. ابزارهای تشخیص مشکل

برای شناسایی منشأ پر شدن دیسک، از ابزارهای زیر استفاده کنید:

5.1. دستور df

نمایش فضای استفاده‌شده و آزاد دیسک:

df -h   # نمایش فضای دیسک
df -i   # بررسی inode‌ها

5.2. دستور du

بررسی حجم دایرکتوری‌ها و فایل‌ها:

du -sh /var/* | sort -rh | head -n 10   # دایرکتوری‌های پرحجم
du -ah / | sort -rh | head -n 20   # فایل‌های پرحجم

5.3. دستور find

جستجوی فایل‌های بزرگ یا قدیمی:

find / -type f -size +100M   # فایل‌های بزرگ‌تر از 100 مگابایت
find /tmp -type f -mtime +7   # فایل‌های قدیمی‌تر از 7 روز

5.4. ابزار ncdu

نمایش گرافیکی فضای دیسک:

sudo apt install ncdu   # اوبونتو/دبیان
sudo yum install ncdu   # CentOS
ncdu /

5.5. بررسی لاگ‌ها

بررسی خطاهای سیستمی:

tail -f /var/log/syslog
tail -f /var/log/messages

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

برای رفع مشکل، این مراحل را دنبال کنید:

6.1. شناسایی پارتیشن پرشده

df -h

6.2. حذف فایل‌های غیرضروری

rm -rf /tmp/*
rm -rf /var/tmp/*
apt clean   # اوبونتو/دبیان
yum clean all   # CentOS

6.3. مدیریت لاگ‌ها در لینوکس

find /var/log -type f -name "*.log" -exec gzip {} \;
find /var/log -type f -name "*.log" -mtime +30 -delete
nano /etc/logrotate.conf   # تنظیم logrotate
logrotate -f /etc/logrotate.conf

6.4. بهینه‌سازی دیتابیس‌ها

MySQL:

du -sh /var/lib/mysql/*
mysql -e "PURGE BINARY LOGS BEFORE '2025-01-01';"
mysqlcheck -A --optimize

PostgreSQL:

du -sh /var/lib/postgresql/*/main/pg_wal
find /var/lib/postgresql/*/main/pg_wal -type f -mtime +7 -delete

6.5. رفع مشکل inode

df -i
find /tmp -type f -size -1M -delete

6.6. افزایش فضای دیسک

اضافه کردن دیسک جدید:

fdisk /dev/sdX   # پارتیشن‌بندی
mkfs.ext4 /dev/sdX   # ساخت فایل‌سیستم
mount /dev/sdX /mnt   # مانت کردن

تغییر اندازه پارتیشن:

resize2fs /dev/sdX

7. استراتژی‌های پیشگیری از پر شدن دیسک

7.1. مانیتورینگ فضای دیسک

#!/bin/bash
THRESHOLD=90
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
  usage=$(echo $output | awk '{ print $1}' | cut -d'%' -f1)
  partition=$(echo $output | awk '{ print $2 }')
  if [ $usage -ge $THRESHOLD ]; then
    echo "هشدار: پارتیشن $partition به $usage% رسیده است!" | mail -s "هشدار دیسک" admin@example.com
  fi
done

اجرا در cron:

crontab -e
0 0 * * * /path/to/disk_alert.sh

7.2. تنظیم logrotate

/var/log/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

7.3. محدود کردن کاربران

quotaon -v /home
setquota -u username 100M 200M 0 0 /home

7.4. پاک‌سازی خودکار

crontab -e
0 0 * * * find /tmp -type f -mtime +7 -delete

8. مطالعات موردی: مشکلات واقعی و راه‌حل‌ها

  • مورد 1: لاگ‌های Nginx بیش از 50 گیگابایت فضا اشغال کرده بودند. با فشرده‌سازی و تنظیم logrotate مشکل رفع شد.
  • مورد 2: تمام شدن inode‌ها در سرور ایمیل. حذف فایل‌های موقت مشکل را حل کرد.
  • مورد 3: توقف MySQL به دلیل لاگ‌های باینری. حذف لاگ‌های قدیمی مشکل را برطرف کرد.

9. نکات پیشرفته برای مدیریت دیسک

  • استفاده از فایل‌سیستم‌های ZFS یا Btrfs برای فشرده‌سازی.
  • پیاده‌سازی RAID برای افزایش ظرفیت.
  • ذخیره‌سازی داده‌ها در فضای ابری (مانند AWS S3).
  • تحلیل الگوهای مصرف دیسک با Grafana و Prometheus.

10. جمع‌بندی

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