1. 程式人生 > >雲伺服器 ECS Linux 磁碟空間滿(含inode滿)問題排查方法

雲伺服器 ECS Linux 磁碟空間滿(含inode滿)問題排查方法

問題描述

在雲伺服器ECS Linux系統內建立檔案時,出現類似如下空間不足提示:

  1. No space left on device

問題原因

導致該問題的可能原因包括:

  • 磁碟分割槽空間使用率達到百分之百。
  • 磁碟分割槽inode使用率達到百分之百。
  • 殭屍檔案:已刪除檔案因控制代碼被佔用未釋放導致相應空間未釋放。
  • 掛載點覆蓋:在原有檔案系統的相應目錄下已經存在大量檔案。掛載了新磁碟後,導致使用 df 命令能統計到相關空間使用,而使用 su 命令統計不到。

處理辦法

不同的原因需要通過不同的方法解決:

分割槽容量滿

如果是分割槽容量滿導致磁碟空間滿,按以下步驟操作:

  1. 執行 df -h 檢視磁碟使用率。返回結果如下圖所示。

    注意
    返回結果裡 Mounted on 下顯示的是掛載目錄。

    檢視磁碟使用率

  2. 迴圈執行如下指令,找到容量比較大的目錄並進入目錄,直到找到最精確的檔案或目錄,再結合業務情況等判斷,刪除相關檔案或目錄。您也可以購買更大的資料盤來分擔處理。

    1. cd /
    2. du -sh *

    檢視目錄

inode容量滿

如果是inode容量滿導致磁碟空間滿,按以下步驟操作:

  1. 執行以下命令分析根目錄下每個目錄下面有多少個檔案。

    1. for i in/*;do echo $i; find $i | wc -l;done

    返回結果如下圖所示。
    查根目錄下有多少個檔案

  2. 逐層進入inode佔用最高的目錄,繼續執行上述指令,逐步定位佔用過高空間的檔案或目錄,最後進行相應清理。

修改inode數量

ECS Linux 例項的inode節點中,記錄了檔案的型別、大小、許可權、所有者、檔案連線的數目、建立時間與更新時間等重要的資訊,還有一個比較重要的內容就是指向資料塊的指標。一般情況不需要特殊配置;如果存放檔案很多,需要配置。有時磁碟空間有剩餘但是不能存放檔案,可能是由於inode耗盡所致。

按以下步驟調整inode節點數量:

注意
inode的調整需要重新格式化磁碟,請確保您已經備份了資料再執行以下操作。

  1. 執行以下命令查詢inode使用情況。

    1. df -i

    返回結果如下圖所示。
    檢視inode使用情況

  2. 執行以下命令解除安裝系統檔案。假設解除安裝的檔案系統為 /home。

    1. umount /home
  3. 執行以下命令重新建立檔案系統,指定inode節點數。

    1. mkfs.ext3 /dev/xvdb -N 1638400
  4. (可選)執行命令 vim /etc/fstab 修改fstab檔案。

  5. 執行以下命令檢視修改後的inode節點數。

    1. dumpe2fs -h /dev/xvdb | grep node

    返回結果如下圖所示。
    檢視修改後的inode節點數

殭屍檔案分析刪除

如果磁碟和inode都沒有問題,則需要檢視是否存在未被清除控制代碼的僵死檔案。這些檔案實際上已經被刪除,但是有服務程式在使用這些檔案,導致這些檔案一直被佔用,無法釋放磁碟空間。如果這些檔案過多,會佔用很大的磁碟空間。

按以下步驟檢視並刪除殭屍檔案:

  1. 執行以下命令安裝lsof。

    1. yum install lsof -y
  2. 執行以下命令檢視殭屍檔案佔用情況。

    1. lsof |grep delete | more

    返回結果示例如下圖所示。
    檢視殭屍檔案數量

  3. 採用以下方法釋放控制代碼,以清除殭屍檔案:

    • 重啟伺服器。
    • 正常停止或殺掉佔用這些檔案的服務程序。

掛載點覆蓋

先取消磁碟掛載,再檢查原掛載目錄下的空間佔用情況。

如果問題還未能解決,您可以到阿里雲社群進行免費諮詢,或聯絡雲市場商家尋求幫助。