آزاد کردن فضای دیسک در سرور لینوکس (وقتی دیسک پر شده)
دیسک پر میتواند دیتابیس را متوقف و سایت را از دسترس خارج کند. راه درست این است که اول پیدا کنید فضا کجا رفته و بعد فقط همان را پاک کنید؛ نه اینکه کورکورانه فایل حذف کنید.
۱کدام دیسک پر است؟
مصرف فایلسیستمها را ببینید. همچنین اینود (inode) را هم چک کنید؛ گاهی فضا هست ولی اینود تمام شده است.
df -h
df -i۲پیدا کردن بزرگترین پوشهها
از ریشه شروع کنید و عمیقتر بروید. -x از عبور به فایلسیستم دیگر جلوگیری میکند.
sudo du -xh / --max-depth=1 2>/dev/null | sort -rh | head -15
sudo du -xh /var --max-depth=1 2>/dev/null | sort -rh | head -10۳روش تعاملی با ncdu
ابزاری راحتتر: با فلشها بین پوشهها بروید.
sudo apt install -y ncdu
sudo ncdu -x /۴پیدا کردن فایلهای بزرگ
فایلهای بزرگتر از ۱۰۰ مگابایت.
sudo find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -20۵پاک کردن کش و لاگهای سیستم
این موارد امن هستند: کش بستهها و لاگهای journald قدیمی.
sudo apt-get clean
sudo apt-get autoremove -y
sudo journalctl --vacuum-size=200M
sudo journalctl --vacuum-time=14d۶پاک کردن لاگهای بزرگ بدون حذف فایل
اگر فایل لاگی چند گیگابایتی است و برنامه هنوز رویش باز است، rm فضا را آزاد نمیکند. با truncate خالیاش کنید.
sudo ls -lhS /var/log | head
sudo truncate -s 0 /var/log/nginx/access.logاول مطمئن شوید نیازی به آن لاگ ندارید. logrotate را هم درست تنظیم کنید تا دوباره پر نشود.
۷فایلهای حذفشدهای که هنوز فضا اشغال کردهاند
اگر du مقدار کمی و df مقدار زیادی نشان میدهد، فایلهای حذفشدهای هستند که برنامه هنوز بازشان دارد. با lsof پیدایشان کنید و برنامه را ریستارت کنید.
sudo lsof +L1 | head
sudo systemctl restart nginx۸پاکسازی Docker
Docker با ایمیجها، کانتینرهای متوقف و کش ساخت بهسرعت چندین گیگابایت مصرف میکند.
docker system df
docker system prune -f
docker image prune -a -f
docker builder prune -fاز --volumes استفاده نکنید مگر مطمئن باشید دادههای ماندگار (دیتابیس) داخل volume ها ندارید.
۹جلوگیری از تکرار
چرخش لاگ، محدودیت لاگ داکر و هشدار وقتی دیسک ۸۰٪ پر شد.
# هشدار ساده در cron: اگر مصرف > 85%
0 * * * * [ $(df / --output=pcent | tail -1 | tr -dc '0-9') -gt 85 ] && echo "Disk almost full on $(hostname)" | mail -s "DISK ALERT" admin@example.comپرسشهای پرتکرار دربارهٔ آزاد کردن فضای دیسک در سرور لینوکس (وقتی دیسک پر شده)
با df میگویند پر است ولی du جمع کمتری میدهد، چرا؟
معمولاً فایلهای حذفشدهای وجود دارد که یک پردازش هنوز آنها را باز نگه داشته (lsof +L1) یا فضای رزرو ext4 (۵٪ برای root) در محاسبه است. ریستارت پردازش فضا را آزاد میکند.