כיצד לפתור שגיאת דיסק מלא בשרת לינוקס?
מדריך לאיתור קבצים גדולים, ניקוי בטוח של יומנים ופינוי מקום בשרת.
אחת הבעיות הנפוצות ביותר בשרתי לינוקס היא שהדיסק מתמלא לחלוטין. כאשר הדיסק מתמלא, אתרי אינטרנט אינם יכולים לכתוב קבצים, שירותי מסד נתונים עשויים להפסיק לעבוד, שרתי משחקים לא יתעדו יומנים, וייתכן ששירותים מסוימים לא יתחילו כלל.
שגיאה זו מזוהה בדרך כלל על ידי התסמינים הבאים:
- כשל בהעלאת קבצים לשרת
- כיבוי או שגיאה של שירות מסד הנתונים
- השגיאה "לא נותר מקום במכשיר" המופיעה בלוח
- שרת המשחק נכבה כי הוא לא יכול להיכנס.
- 500 שגיאות או דפים ריקים מתרחשים באתרי אינטרנט
1. בדיקת שימוש בדיסק
ראשית, בדוק איזו מחיצת דיסק בשרת מלאה.
df -h
כאן במיוחד השתמש ב-% אזור נחשב. אם סעיף הוא 90% ומעלה, זה אומר שהסיכון התחיל. אם הוא מלא ב-100%, השירותים לא יוכלו לכתוב קבצים.
2. מצא את התיקיות שתופסות הכי הרבה מקום
כאשר הדיסק מלא, הבעיה היא בדרך כלל יומנים, גיבויים או קבצי מטמון שנצברו בתיקייה אחת. בדוק תיקיות גדולות, החל מספריית השורש.
du -h --max-depth=1 / 2>/dev/null | sort -h
פקודה זו מראה כמה מקום תופסות ספריות ביתיות. בדרך כלל נבדקות הספריות הבאות:
- /var/log - יומני מערכת ושירות
- /בית - קבצי משתמש ואתר
- /גיבוי - קבצי גיבוי ישנים
- /tmp - קבצים זמניים
- /var/lib/mysql - קבצי מסד נתונים של MySQL/MariaDB
3. רשום קבצים גדולים
לפעמים קובץ יומן בודד יכול לגדול ל-10 GB או יותר. כדי למצוא קבצים גדולים, אתה יכול להשתמש בפקודה זו:
find / -type f -size +500M -exec ls -lh {} \; 2>/dev/nullפקודה זו מפרטת קבצים מעל 500 MB. בדוק היטב את הקבצים שהתקבלו. במיוחד .log, .ישן, .gz, .bak ויש לבדוק קבצי גיבוי ישנים.
4. ניקוי בטוח של קבצי יומן
מחיקה ישירה של קובץ היומן של שירות פועל לפעמים לא נותנת את התוצאה הצפויה. מכיוון שהשירות יכול להמשיך ולהשאיר את הקובץ פתוח. לכן, השיטה הבטוחה ביותר בעת ניקוי קובצי יומן גדולים היא לרוקן את הקובץ.
truncate -s 0 /var/log/dosya_adi.log
דוגמה:
truncate -s 0 /var/log/syslog truncate -s 0 /var/log/messages truncate -s 0 /var/log/nginx/error.log
5. ניקוי מטמון חבילה
במערכות מבוססות אובונטו ודביאן, קובצי מטמון חבילות עשויים לתפוס שטח דיסק לאורך זמן.
apt clean apt autoremove -y
במערכות CentOS, AlmaLinux או Rocky Linux:
yum clean all dnf clean all
6. בדיקת גיבויים ישנים
הקבצים שתופסים הכי הרבה מקום בשרתי אירוח ושרתי משחקים הם בדרך כלל גיבויים ישנים. במיוחד אם יש מערכת גיבוי אוטומטית, יתכן ויבוצעו גיבויים חדשים מדי יום וגיבויים ישנים לא יימחקו.
find /backup -type f -mtime +7 -name "*.tar.gz" -ls
פקודה זו מפרטת גיבויים מעל 7 ימים. כדי למחוק לאחר ווידוא:
find /backup -type f -mtime +7 -name "*.tar.gz" -delete
7. מנע טעינה מחדש עם הגדרת Logrotate
גם אם הדיסק מנוקה, אם הסיבה לא תתוקן, אותה בעיה תחזור שוב לאחר מספר ימים. לשם כך, יש לבדוק את תצורת logrotate.
nano /etc/logrotate.conf
דוגמה להגיון לוגרוטציה פשוט:
/var/log/*.log {
daily
rotate 7
compress
missingok
notifempty
}הגדרה זו מחזירה קובצי יומן מדי יום, שומרת אותם למשך 7 ימים ודוחסת יומנים ישנים.
טעויות נפוצות
- מחיקת קבצי מערכת מבלי לדעת באיזה קובץ מדובר
- מחיקת קובץ יומן הריצה ואי הפעלה מחדש של השירות
- שמירה על גיבויים ישנים לתקופת זמן בלתי מוגבלת
- לא בודק הגדרות logrotate בכלל
- אל תתערב עד שהדיסק מלא ב-100%.
שאלות נפוצות
למה השרת נותן שגיאה כשהדיסק מלא?
מכיוון ששירותים אינם יכולים לכתוב יומנים, מטמונים, קבצים זמניים או מסדי נתונים. השירותים עשויים להיסגר כאשר פעולת הכתיבה נכשלת.
האם עדיף למחוק או לרוקן את קובץ היומן?
במקום למחוק לחלוטין את קובץ היומן בשירותים הפועלים לקטוע בטוח יותר לרוקן אותו באמצעות.
ניקיתי את הדיסק אבל המקום לא התפנה, למה?
ייתכן שהקובץ שנמחק עדיין יישמר פתוח על ידי שירות פועל. ייתכן שיהיה צורך להפעיל מחדש את השירות הרלוונטי.
המלצות ביצועים ואבטחה
- עקוב אחר השימוש בדיסק באופן קבוע.
- אחסן גיבויים בדיסק נפרד או באזור גיבוי מרוחק.
- אל תשאיר שירות פועל במשך זמן רב מבלי להשתמש ב-logrotate.
- נקוט באמצעי זהירות כאשר הדיסק מגיע לרמה של 85%.
- אל תשאיר יומני ניפוי באגים פתוחים כל הזמן בשרתי משחקים.
מאמר זה הוכן במיוחד עבור PvPServer.