No space left on device的原因

來源:互聯網
上載者:User
看到這個錯誤,第一個反應是磁碟空間滿了;但 df 一看,每個分區的空間都還富餘的很。從 munin 的監控圖表上看 Filesystem usage 也很平穩,但下面的 Inode usage 就有問題了,其中一個分區的 usage 已經到了100%。趕緊跑到伺服器上 df -i 檢查,果然是 Inode 耗盡。原來這個分區是用來扔各種日誌和臨時檔案的,其中有某個程式產生的臨時檔案又小又多,又沒有進行定時復原,造成在磁碟空間耗盡之前檔案系統的 Inode 就被用光了。

  Linux/Unix like OS 的檔案系統中每個分類樹中的節點並不是像 Windows 那樣直接包含檔案的具體資訊,而只包含了檔案名稱和 Inode number 。通過 Inode number 所找到對應於檔案名稱的 Inode 節點中才真正記錄了檔案的大小/物理地址/所有者/存取權限/時間戳記/被永久連結的次數等實際的 metadata 。因此你可以在 Linux 系統中通過永久連結( hard link ) 的方式給某個檔案建立無數個位於不同目錄下的檔案名稱,而實際的檔案資料只需要一份拷貝。

  但也正因為這種檔案系統的結構,當你在 Linux 中進行 IO 操作的時候,需要的資源除了磁碟空間以外,還要有剩餘的 Inode 才行。預設情況下, Linux 在系統安裝過程中按照1個 Inode 對應 2k 磁碟空間來計算每個分區的最大 Inode 數。一旦檔案系統建立之後,每個分區可用 Inode 數就無法進行動態調整。

  正常來說,一般不太會出現某個分區的 Inode 耗盡而磁碟空間尚餘的情況,除非像我碰到的這樣垃圾小檔案瘋長而又沒進行有效清理。但如果確實需要的話,可以在建立檔案系統(比如用 mke2fs )的時候根據實際需要來調整這個參數(比如分區如果用於存放超大視頻檔案的話 Inode 的數量可以少一些;如果打算存放的檔案是大量小於 2k 的迷你檔案的話就要考慮多建立一些 Inode)。

  附:Inode Definition by The Linux Information Project

  其它人碰到的 No space left on device 原因:

  超出系統中同時啟動並執行最大 message queue 個數限制 : 在 root 下用 sysctl kernel.msgmni 檢查該參數, sysctl -w kernel.msgmni=XXX 重新設定即可。

  cvs 異常斷開的串連在 /tmp 目錄下留下大量的臨時檔案導致 /tmp 目錄滿

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.