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

問題描述

在雲服務器ECS Linux系統內創建文件時,出現類似如下空間不足提示:

  1. No space left on device

問題原因

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

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

處理辦法

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

分區容量滿

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

  1. 遠程連接Linux實例

  2. 運行 df -h 查看磁盤使用率。返回結果如下圖所示。

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

    查看磁盤使用率

  3. 循環執行如下指令,找到容量比較大的目錄並進入目錄,直到找到最精確的文件或目錄,再結合業務情況等判斷,刪除相關文件或目錄。您也可以購買更大的數據盤來分擔處理。

    1. cd /
    2. du -sh *

    查看目錄

inode容量滿

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

  1. 遠程連接Linux實例

  2. 運行以下命令分析根目錄下每個目錄下面有多少個文件。

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

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

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

修改inode數量

ECS Linux 實例的inode節點中,記錄了文件的類型、大小、權限、所有者、文件連接的數目、創建時間與更新時間等重要的信息,還有一個比較重要的內容就是指向數據塊的指針。一般情況不需要特殊配置;如果存放文件很多,需要配置。有時磁盤空間有剩餘但是不能存放文件,可能是由於inode耗盡所致。

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

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

  1. 遠程連接Linux實例

  2. 運行以下命令查詢inode使用情況。

    1. df -i

    返回結果如下圖所示。
    查看inode使用情況

  3. 運行以下命令卸載系統文件。假設卸載的文件系統爲 /home。

    1. umount /home
  4. 運行以下命令重新建立文件系統,指定inode節點數。

    1. mkfs.ext3 /dev/xvdb -N 1638400
  5. (可選)運行命令 vim /etc/fstab 修改fstab文件。

  6. 運行以下命令查看修改後的inode節點數。

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

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

殭屍文件分析刪除

如果磁盤和inode都沒有問題,則需要查看是否存在未被清除句柄的僵死文件。這些文件實際上已經被刪除,但是有服務程序在使用這些文件,導致這些文件一直被佔用,無法釋放磁盤空間。如果這些文件過多,會佔用很大的磁盤空間。

按以下步驟查看並刪除殭屍文件:

  1. 遠程連接Linux實例

  2. 運行以下命令安裝lsof。

    1. yum install lsof -y
  3. 運行以下命令查看殭屍文件佔用情況。

    1. lsof |grep delete | more

    返回結果示例如下圖所示。
    查看殭屍文件數量

  4. 採用以下方法釋放句柄,以清除殭屍文件:

    • 重啓服務器。
    • 正常停止或殺掉佔用這些文件的服務進程。

掛載點覆蓋

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章