שאלה df ב- Linux לא מראה שטח פנוי נכון לאחר הסרת הקובץ


יש לי שרתי קבצים המשמשים לאחסון קבצים. קבצים עשויים להימצא שם במשך שבוע, או למשך שנה. למרבה הצער, כאשר אני מסיר קבצים מהשרת, df הפקודה אינה משקפת את החלל המשוחרר. אז בסופו של דבר, השרת מתמלא (df מראה 99%), ואת התסריט שלי לא לשלוח עוד קבצים שם, למעט אולי יש כמה עשרות GB של שטח פנוי שם.

יש לי noatime דגל על ​​מחיצות רכוב אם זה משנה.


107
2018-02-08 07:36




האם זה קורה על מחיצה אחת או על כל המחיצות? - Khaled
ובכן, זה קורה על המחיצה הנתונים הראשי שלי, שהוא היחיד שאכפת לי, שכן אני רק לכתוב / להסיר קבצים על זה.
נא להאיר לי את הפתרון, או קישור אחד.
מה מערכת הקבצים (ים)? DF עושה סטאט של superblock, זה יכול להיות כי מערכת הקבצים שלך לא מעדכן את sb inode. האם ניסית לשטוף את הקובץ השמור? - beans
שימוש ב- ext4. איך אתה מסמיק במטמון?


תשובות:


מחיקת שם הקובץ לא ממש מוחקת את הקובץ. תהליך אחר מחזיק את הקובץ פתוח, גורם לו להיות לא נמחק; הפעל מחדש או להרוג את התהליך כדי לשחרר את הקובץ.

להשתמש

lsof +L1

כדי לברר איזה תהליך משתמש בקובץ שנמחק (לא מקושר).


183
2018-02-08 07:48



קבצים שהוסרו לא היו נגישים יותר מחודש, והתהליך היחיד שמגיע אליהם הוא nginx, ולכן ספק.
+1. כמו כן, "lsof + L1" יגיד לך איזו תוכנית מחזיקה את הקבצים הפתוחים. - pehrs
כמו להריץ שורש "lsof -n | קובץ grep," אתה תהיה מופתע כמה זמן קבצים יכולים להישאר סביב בשל תהליכים להשאיר אותם פתוחים מכל סיבה שהיא. אם כל השאר נכשל, אתחול מחדש, אני מרגיש רע מציע את זה אבל זה בהחלט יהיה לוודא שום דבר לא מחזיקים את הקובץ. לפי pehrs, lsof + L1 היא כנראה הדרך הטובה ביותר ללכת. - ScottZ
אתה פשוט הצלת אותי! נמחק קובץ יומן 93G ולא קיבל את החלל בחזרה ולא הצליח להבין למה. תודה. - Luke Cousins
לאורך אותם קווים ובמקרה זה עוזר לאחרים, מחקתי קובץ nginx גדול nginx אבל היה רק ​​מסוגל לשחזר את החלל לאחר הפעלה מחדש nginx: שירות nginx מחדש - Nick


כפי שמציין Ignacio, מחיקת הקובץ לא תשחרר את החלל עד שתמחק את התהליכים בעלי ידיות פתוחות כנגד קובץ זה.

עם זאת, אתה יכול להחזיר את החלל מבלי להרוג את התהליכים. כל שעליך לעשות הוא להסיר את מתארי הקבצים.

ראשית לבצע lsof grep שנמחק כדי לזהות את תהליך החזקת הקובץ

[hudson@opsynxvm0055 log]$ /usr/sbin/lsof |grep deleted
java       8859   hudson    1w      REG              253,0 3662503356    7578206 /crucible/data/current/var/log/fisheye.out (deleted)

לאחר מכן בצע את הפעולות הבאות:

cd /proc/PID/fd

לאחר מכן

[hudson@opsynxvm0055 fd]$ ls -l |grep deleted
total 0
l-wx------ 1 hudson devel 64 Feb  7 11:48 1 -> /crucible/data/current/var/log/fisheye.out (deleted)

"1" יהיה מתאר הקובץ. עכשיו סוג "> FD" כדי להחזיר את החלל

> 1

ייתכן שיהיה עליך לחזור על הפעולה אם קיימים תהליכים אחרים המחזיקים את הקובץ.


21
2018-02-07 01:24



מה עושה ה > FD לעשות? - Pred
הוא מסיר את מתאר הקובץ - Adrián Deccico
עושה את זה > הפקודה יש ​​שם? הייתי צריך לעבור מ zsh כדי bash כדי להיות מסוגל להשתמש בו. האם ניתן להפעיל אותו ב- zsh? - ariera
זה הפניה מחדש הפלט ולכן מקטין את הקובץ. זמן ארוך יהיה "הד -n> 1" או "נכון 1". זה לא באמת להסיר את FD, זה רק מצביע על קובץ ריק לאחר מכן. - eckes


אפשרות אחת היא כי הקובץ (ים) מחקת יש יותר הפניות במערכת הקבצים. אם יצרת קישורים קשיחים, מספר שמות קבצים יצביעו על אותם נתונים, והנתונים (התוכן בפועל) לא יסומנו כחסרי / שמיש עד שכל ההפניות אליו יוסרו. לפני שאתה מוחק קבצים, או stat אותם (קישורים בשם קישורים) או לעשות ls-l עליהם (צריך להיות בעמודה השנייה).

אם יתברר שהקבצים מוזכרים במקום אחר, אני מניח שתצטרך לסמן את הקובץ (ים) כדי לאתר את מספר ה- inode, ולאחר מכן לעשות חיפוש עם מספר <inode-number> כדי למצוא את הפניות אחרות לקובץ זה (אתה כנראה גם רוצה להשתמש -mount להישאר בתוך מערכת הקבצים גם כן).


8
2018-02-08 10:01





הקובץ עדיין נעול על ידי תהליך פתיחת אותו. כדי לפנות מקום, בצע את הפעולות הבאות:

  1. הפעלה sudo lsof | grep deleted ולראות איזה תהליך מחזיק את הקובץ. תוצאה לדוגמה:

    $ sudo lsof | grep deleted
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
    cron     1623 root    5u   REG   0,21        0 395919638 /tmp/tmpfPagTZ4 (deleted)
    
  2. להרוג את התהליך באמצעות sudo kill -9 {PID}. במדגם לעיל, ה- PID הוא 1623.

    $ sudo kill -9 1623
    
  3. הפעלה df כדי לבדוק אם החלל כבר משוחרר. אם זה עדיין מלא, אולי אתה צריך לחכות כמה שניות לבדוק שוב.


3
2018-02-16 05:31





אם המחיצה הוגדרה לשמירה על חלק מסוים של שטח דיסק רק עבור שימוש שורש, df לא יכלול שטח זה כזמין.

[root@server]# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/optvol           625G  607G     0 100% /opt
...

גם לאחר החלל יוחזר על ידי מחיקת קבצים / ספריות, המשתמש שאינו השורש לא יוכל לכתוב למחיצות מסוימות.

אתה יכול בקלות לבדוק אם זה המקרה שלך על ידי מנסה ליצור קובץ על התקן כמו שורש ולא השורש המשתמש.

בנוסף אתה יכול לבדוק את תצורת מערכת הקבצים על ידי הפעלת

tune2fs -l <device> | egrep "Block count|Reserved block count

ואת חישוב בפועל% בעצמך.

כדי לשנות את הדיסק% שמורות לשימוש של שורש בלבד, בצע את הפעולה

tune2fs -m <percentage> <device>

2
2018-05-08 10:31





התשובות האחרות נכונות: אם תמחק קובץ, והחלל לא ישתחרר, זה בדרך כלל גם בגלל שהקובץ עדיין פתוח, או שיש קישורים אחרים אליו.

כדי לסייע בפתרון בעיות, השתמש בכלי המודיע לך היכן מנוצל שטח הכונן: באפשרותך להשתמש du כדי לקבל סקירה כללית של המקום שבו הוא הולך. אפילו יותר טוב, להשתמש בכלי גרפי כמו xdiskusage (יש רבים כאלה) לצוד את העבריין. xdiskusage וחברים לתת לך לתחקר למטה חזירים החלל הגדול ביותר כדי למצוא מקום שבו הוא הולך.

בדרך זו, תוכל למצוא במהירות קבצים שעדיין לתפוס מקום בגלל hardlink השני. זה גם יציג שטח תפוס על ידי נמחק, אבל קבצים פתוחים (כמו (הרשאה רשות), אני מאמין, שכן הוא לא יכול לקרוא את שם הקובץ).


1
2018-02-08 10:11





מאז אני יודע טון של אתה עושה את זה עבור redhat ב /var ו gzipping קבצים מצפה FS להתכווץ, אבל במקום זה גדל, רק לוודא שאתה שירות מחדש syslog. ו

lsof -v file

יראה לך את זה בכל מקרה.


1
2018-03-23 15:02



זה לא באמת להוסיף הרבה; את התשובה המקובלת כיסה את ההיגיון מאחורי זה בשנת 2001. כאשר יש לך נציג 50, השתמש הערות אם אתה רוצה להוסיף מוקדמות התשובות הקיימות. - Andrew B


אפשרות אחת נוספת: הדיסק עשוי להיות מלא בשל תהליך זה הוא יצירת נתונים ברציפות: יומני, ליבות וכדומה. זה אפשרי כי החלל הוא בעצם להיות משוחרר אבל הוא מתמלא מיד. אני ממש ראיתי מקרה כזה. df במקרה זה פשוט לא נותן את התמונה חור. להשתמש du ללמוד 'יותר.


0
2017-07-17 12:01





אני משתמש EXT2, FSCK עזר לי במצב זה. נסה shudown -F עכשיו, לאחר כמה הפעלה מחדש ו fscks, אני רואה שטח בשימוש חצי.


0
2018-01-16 09:00



מרשלוס היקר, הפתרון שלך מוקף בתשובה המקובלת; ולפעמים אתה לא רוצה לעשות אתחול מחדש אם אתה לא נאלץ ... - Deer Hunter


כדי לבדוק אילו קבצים שנמחקו יש זיכרון תפוס, הזן את הפקודה

 $ sudo lsof | grep deleted

הוא יציג את הקבצים שנמחקו שמחזיקים בזיכרון.

ואז להרוג את התהליך עם pid או שם

$ sudo kill <pid>
$ df -h

לבדוק עכשיו יהיה לך את אותו זיכרון

אם לא הקלד את הפקודה למטה כדי לראות איזה קובץ הוא זיכרון כובש

# cd /
# du --threshold=(SIZE)

להזכיר בכל גודל הוא יציג אילו קבצים הם כובשים מעל גודל הסף ולמחוק את הקובץ תוכלו למצוא את הזיכרון נשמר


-1
2018-03-06 07:16