雲伺服器 ECS Linux 磁碟空間滿(含inode滿)問題排查方法
問題描述
在雲伺服器ECS Linux系統內建立檔案時,出現類似如下空間不足提示:
No space left on device …
問題原因
導致該問題的可能原因包括:
- 磁碟分割槽空間使用率達到百分之百。
- 磁碟分割槽inode使用率達到百分之百。
- 殭屍檔案:已刪除檔案因控制代碼被佔用未釋放導致相應空間未釋放。
- 掛載點覆蓋:在原有檔案系統的相應目錄下已經存在大量檔案。掛載了新磁碟後,導致使用
df
命令能統計到相關空間使用,而使用su
命令統計不到。
處理辦法
不同的原因需要通過不同的方法解決:
分割槽容量滿
如果是分割槽容量滿導致磁碟空間滿,按以下步驟操作:
執行
df -h
檢視磁碟使用率。返回結果如下圖所示。注意:
返回結果裡Mounted on
下顯示的是掛載目錄。迴圈執行如下指令,找到容量比較大的目錄並進入目錄,直到找到最精確的檔案或目錄,再結合業務情況等判斷,刪除相關檔案或目錄。您也可以購買更大的資料盤來分擔處理。
cd /
du -sh *
inode容量滿
如果是inode容量滿導致磁碟空間滿,按以下步驟操作:
執行以下命令分析根目錄下每個目錄下面有多少個檔案。
for i in/*;do echo $i; find $i | wc -l;done
返回結果如下圖所示。
逐層進入inode佔用最高的目錄,繼續執行上述指令,逐步定位佔用過高空間的檔案或目錄,最後進行相應清理。
修改inode數量
ECS Linux 例項的inode節點中,記錄了檔案的型別、大小、許可權、所有者、檔案連線的數目、建立時間與更新時間等重要的資訊,還有一個比較重要的內容就是指向資料塊的指標。一般情況不需要特殊配置;如果存放檔案很多,需要配置。有時磁碟空間有剩餘但是不能存放檔案,可能是由於inode耗盡所致。
按以下步驟調整inode節點數量:
注意:
inode的調整需要重新格式化磁碟,請確保您已經備份了資料再執行以下操作。
執行以下命令查詢inode使用情況。
df -i
返回結果如下圖所示。
執行以下命令解除安裝系統檔案。假設解除安裝的檔案系統為 /home。
umount /home
執行以下命令重新建立檔案系統,指定inode節點數。
mkfs.ext3 /dev/xvdb -N 1638400
(可選)執行命令
vim /etc/fstab
修改fstab檔案。執行以下命令檢視修改後的inode節點數。
dumpe2fs -h /dev/xvdb | grep node
返回結果如下圖所示。
殭屍檔案分析刪除
如果磁碟和inode都沒有問題,則需要檢視是否存在未被清除控制代碼的僵死檔案。這些檔案實際上已經被刪除,但是有服務程式在使用這些檔案,導致這些檔案一直被佔用,無法釋放磁碟空間。如果這些檔案過多,會佔用很大的磁碟空間。
按以下步驟檢視並刪除殭屍檔案:
執行以下命令安裝lsof。
yum install lsof -y
執行以下命令檢視殭屍檔案佔用情況。
lsof |grep delete | more
返回結果示例如下圖所示。
採用以下方法釋放控制代碼,以清除殭屍檔案:
- 重啟伺服器。
- 正常停止或殺掉佔用這些檔案的服務程序。
掛載點覆蓋
先取消磁碟掛載,再檢查原掛載目錄下的空間佔用情況。