אין או יש מקום בדיסק?

01/09/2024

הפלט של שתי הפקודות האלה על השרת הפתיע אותי -

ynon@schooler-prod-2:~$ touch a
touch: cannot touch 'a': No space left on device

ynon@schooler-prod-2:~$ df -h
Filesystem                                               Size  Used Avail Use% Mounted on
udev                                                     7.9G     0  7.9G   0% /dev
tmpfs                                                    1.6G  8.5M  1.6G   1% /run
/dev/sda                                                 315G  103G  197G  35% /
tmpfs

איך יכול להיות ש touch לא יכול ליצור קובץ חדש ומתלונן שאין מספיק מקום על הדיסק, כש df מראה שיש דווקא המון מקום? האם df משקר? האם יש corruption במערכת הקבצים? מה קורה פה?

ייתכן. אבל לפני שרצים להפעיל fsck שווה לנסות גם את df -i. מערכות קבצים בלינוקס צריכות לשמור בנוסף לקבצים עצמם גם אינדקס שמקשר בין שם הקובץ לתוכן שלו על הדיסק. האינדקס הזה גם תופס מקום והמבנה שלו יוצר מגבלה על מספר הקבצים שאפשר לשמור בתיקייה. הפקודה df -i מציגה כמה קבצים אפשר לשמור על כל כונן וכמה יש לכם, בלי קשר לגודל שלהם.

כשיש מקום על הדיסק אבל אין מספיק inodes פנויים, הפקודה touch (ויצירת קבצים באופן כללי) יציגו את אותה הודעת שגיאה מבלבלת No space left on device, למרות שהם היו צריכים להגיד Not enough free inodes on device.