مقدمه
آیا فضای دیسک سرور اوبونتو شما در حال پر شدن است؟
آیا دوست دارید آن را تمیز کنید و مقداری فضا آزاد کنید؟ اگر بله، در جای درستی هستید.
بسیاری از توسعه دهندگان مانند شما با همین مشکل مواجه هستند، آنها یک یا دو برنامه کوچک را روی سرور اوبونتو خود مستقر کردند، اما به مرور زمان فضای دیسک پر می شود و آنها در مورد اینکه چه کاری باید انجام دهند و چگونه فضای دیسک خود را آزاد کنند سردرگم هستند.
اخیراً من در وضعیت مشابهی بودم، یک سرور اوبونتو داشتم که 93 درصد ظرفیت دیسک خود را داشت و استفاده از دیسک برای یک برنامه کوچک جنگو که روی سرور اجرا می شد، حدود 39 گیگابایت بود. می دانستم دریافت فضای دیسک اضافی گزینه ای نیست زیرا خود فایل های برنامه کمتر از 1 گیگابایت بود.
در نهایت، مجبور شدم یک روز را به بررسی کل سرور و تعیین اینکه کدام دایرکتوری ها و برنامه ها فضای دیسک من را اشغال کرده اند اختصاص دهم.
در این مقاله، من مراحل اثبات شده خود را برای یافتن فایل های غیر ضروری و پاکسازی فضای دیسک سرور اوبونتو به اشتراک می گذارم.
پیش نیازها
- سرور با اوبونتو (به عنوان مثال با Hetzner Cloud)
- دسترسی SSH به سرور
- دسترسی به کاربر ریشه یا کاربری با مجوز sudo
اصطلاحات مثال
- نام کاربری: holu (نام کاربری سرور شما)
- نام میزبان: <your_host>
نحوه پاکسازی دیسک سرور اوبونتو
وقتی صحبت از مصرف فضای دیسک به میان می آید، بزرگترین مقصر معمولا لاگ ها هستند. سیستمعامل اوبونتو گزارشی از تقریباً همه چیز را نگه میدارد و بسیاری از ابزارها و چارچوبهای توسعهدهنده و سرور مانند Celery و Nginx نیز گزارشها را در سرور شما ایجاد و ذخیره میکنند.
این گزارشها که توسط ابزارها و بستههای مختلف ایجاد میشوند معمولاً حجم زیادی از گیگابایت دارند، فضای دیسک شما را میخورند و سرور شما را کندتر میکنند.
قبل از اینکه وارد مراحل عملی شویم، می خواهم به این نکته اشاره کنم که نباید پوشه log system root را حذف کنید. هرگز وسوسه نشوید که فقط پوشه root log (/var/log/) را حذف کنید. اگر این کار را انجام دهید، چیزهای زیادی را خواهید شکست که نمی خواهید بشکنید.
مرحله 1 – فضای دیسک را بررسی کنید
اولین قدم دسترسی به سرور اوبونتو از طریق SSH است. با استفاده از دستور زیر می توانید وارد شوید:
holu را با نام کاربری خود و <your_host> را با IP سرور خود جایگزین کنید.
ssh holu@<your_host>
پس از ورود به سیستم، دستور زیر را برای مشاهده میزان استفاده از فضای دیسک خود اجرا کنید.
sudo du -cha --max-depth=1 / | grep -E "M|G"
خروجی نمونه:
holu@<your_host>:~$ sudo du -cha --max-depth=1 / | grep -E "M|G"
2.8G /root
5.4G /usr
53M /tmp
9.8M /etc
203M /boot
du: cannot access '/proc/100209/task/100209/fd/4': No such file or directory
du: cannot access '/proc/100209/task/100209/fdinfo/4': No such file or directory
du: cannot access '/proc/100209/fd/3': No such file or directory
du: cannot access '/proc/100209/fdinfo/3': No such file or directory
2.5G /home
1.1M /run
307M /opt
522M /logs
11G /var
1.3G /snap
24G /
24G total
همانطور که می بینید، این دستور جزئیات سطح بالایی را در مورد اندازه پوشه ها/دایرکتوری های مختلف روی دیسک به ما نشان می دهد.
اگر به نمونه خروجی بالا دقت کنید، کاربران برتر فضای دیسک ما /root، /usr، /home و /var هستند. دایرکتوری var به تنهایی 11G است، که فضای زیادی توسط آن دایرکتوری استفاده می شود.
مرحله 2 – به دایرکتوری var بروید
گام بعدی این است که با استفاده از دستور زیر وارد پوشه /var شوید.
cd /var
در مرحله بعد، دستور زیر را اجرا کنید تا میزان استفاده از فضای دیسک برای همه پوشههای داخل پوشه /var را مشاهده کنید. این به ما کمک می کند تا بفهمیم که کار پاکسازی خود را از کدام پوشه ها شروع کنیم.
sudo du -bsh *
خروجی نمونه:
holu@<your_host>:/var$ sudo du -bsh *
2.7M backups
150M cache
4.0K crash
3.6G lib
4.0K local
9 lock
2.5G log
3.0G mail
4.0K opt
4 run
53K snap
52K spool
44K tmp
460M www
وقتی آن دستور را روی سرورم اجرا میکنم، میتوانم ببینم دایرکتوریهای lib و log بیشترین فضا را در پوشه /var استفاده میکنند.
با این اطلاعات، میتوانم هم روی فهرست راهنمای lib و هم روی فهرست log تمرکز کنم تا مقداری فضای روی هارد دیسک خود آزاد کنم.
مرحله 3 – برای پاک کردن هر دایرکتوری به آن بروید
نکته بعدی این است که وارد این دایرکتوری ها شوید و آنها را تمیز کنید. برای هدف این مقاله، من فقط بر روی دایرکتوری گزارش تمرکز میکنم، اما بدانید که میتوانید همان مراحلی را که در اینجا برای پاک کردن هر دایرکتوری دیگری در سرور اوبونتو اعمال میکنیم، اعمال کنید.
برای اینکه بتوانیم دایرکتوری log را پاک کنیم، باید فیلد گزارش قدیمی و سایر فایل های غیر ضروری روی سرور را حذف کنیم. برای دسترسی به دایرکتوری log دستور زیر را اجرا کنید.
cd log
سپس انجام دهید:
ls
خروجی نمونه:
holu@<your_host>:/var$ cd log
holu@<your_host>:/var/log$ ls
alternatives.log fail2ban.log php7.4-fpm.log.5.gz
alternatives.log.1 fail2ban.log.1 php7.4-fpm.log.6.gz
alternatives.log.2.gz fail2ban.log.2.gz php7.4-fpm.log.7.gz
alternatives.log.3.gz fail2ban.log.3.gz php7.4-fpm.log.8.gz
alternatives.log.4.gz fail2ban.log.4.gz php7.4-fpm.log.9.gz
alternatives.log.5.gz faillog postgresql
alternatives.log.6.gz fontconfig.log private
apport.log installer supervisor
apport.log.1 journal syslog
apport.log.2.gz kern.log syslog.1
apport.log.3.gz kern.log.1 syslog.2.gz
apport.log.4.gz kern.log.2.gz syslog.3.gz
apport.log.5.gz kern.log.3.gz syslog.4.gz
apport.log.6.gz kern.log.4.gz syslog.5.gz
apport.log.7.gz landscape syslog.6.gz
apt lastlog
دستور ls همه فایل های این دایرکتوری را به ما نشان می دهد و همانطور که می بینید تعداد زیادی فایل لاگ آرشیو شده در این دایرکتوری وجود دارد.
سپس با استفاده از دستور زیر، اندازه همه فایلها و پوشههای موجود در این فهرست را بررسی کنید.
sudo du -bsh *
این دستور همان دستوری است که در بالا استفاده کردیم، بنابراین باید لیستی از تمام فایل ها و اندازه آنها را مشاهده کنید. پوشه مجله را یادداشت کنید.
مرحله 4 – فایل های لاگ قدیمی را حذف کنید
کار بعدی که انجام می دهیم این است که تمام فایل های لاگ قدیمی را حذف کنیم. شناسایی فایل های لاگ قدیمی آسان است، معمولاً با پسوند نام فایل .gz ختم می شوند.
ما از دستوری برای یافتن همه فایل های .gz و حذف آنها از سرور خود استفاده خواهیم کرد.
دستور زیر را برای پیدا کردن و حذف همه فایلهای .gz و .log.1 در دایرکتوری log اجرا کنید.
sudo find -type f \( -name "*.log.1" -o -name '*.gz' \) -delete
اکنون انجام دهید:
ls
شما باید یک دایرکتوری گزارش پاک شده را ببینید. همچنین می توانید این دستور را برای حذف انواع مختلف فایل با تغییر مقدار ویژگی -name تغییر دهید.
کار ما هنوز تمام نشده است زیرا فهرست ژورنال از فضای دیسک زیادی استفاده می کند. بنابراین، ما باید این دایرکتوری را بررسی کنیم و برخی از فایل ها را پاکسازی کنیم.
cd journal
در داخل فهرست ژورنال، پوشه ای را خواهید دید که معمولاً با یک سری اعداد نامگذاری می شود. برای پاک کردن آن می توانیم از دستور زیر استفاده کنیم.
این دستور حجم دایرکتوری مجله را به 100 مگابایت کاهش می دهد که اندازه مناسبی است.
sudo journalctl --vacuum-size=100M
اگر میخواهید یک تعمیر دائمی برای استفاده از دیسک مجله داشته باشید، روند زیر را دنبال کنید.
sudo nano /etc/systemd/journald.conf
در فایل پیکربندی، تنظیمات SystemMaxFileSize و SystemMaxFiles را حذف کنید (حذف #) و آنها را روی 100 تنظیم کنید. بنابراین باید داشته باشید:
SystemMaxFileSize=100
SystemMaxFiles=100
بعد، انجام دهید:
sudo service systemd-journald restart
با این کار تغییرات اعمال می شود و لاگ های اضافی حذف می شوند.
مرحله 5 – پوشه /var/lib را بررسی کنید
بر اساس تجربه من، یکی دیگر از کاربران بزرگ فضا دایرکتوری /var/lib است. بسته به تعداد کتابخانه ها یا ابزارهای نصب شده روی سرور اوبونتو، این دایرکتوری می تواند فضای زیادی را اشغال کند.
یک راه سریع برای فهمیدن اینکه کدام کتابخانه ها فضای زیادی مصرف می کنند، اجرای دستور زیر است.
sudo du -hs /var/lib/* | sort -hr | head -10
این دستور 10 پوشه بزرگ کتابخانه را در این فهرست به شما نشان می دهد، سپس می توانید از این اطلاعات برای ادامه روند پاکسازی خود استفاده کنید.
شما باید کتابخانه یا ابزارهایی را که در حال حاضر از آنها استفاده نمی کنید، به طور کامل حذف کنید.
نتیجه گیری
همانطور که می بینید، تمیز کردن سرور اوبونتو چندان دشوار نیست. با دنبال کردن مراحل بالا، دایرکتوری /var/log/ خود را با موفقیت پاکسازی کردیم. برای پاکسازی سایر دایرکتوریها در پوشه /var، همین مراحل را دنبال کنید و میتوانید فضای زیادی را در سرور اوبونتو آزاد کنید.