實踐概述
您是否在使用Linux云主機過程中遇到過這樣的問題?


“No space left on device”表示您的磁盤空間不足,它可以直接導致您的系統崩潰、數據丟失、應用程序錯誤以及其他相關問題的發生。
通常導致磁盤空間不足有以下幾個原因:
云硬盤訂購容量過小,無法滿足數據空間需求。用戶可根據業務需求進行磁盤擴容,具體操作請參見擴容云硬盤。
磁盤分區空間使用率達到100%,您可以通過清理不常使用的較大文件或文件夾來進行空間釋放。
磁盤存在已刪除未釋放的僵尸文件,導致空間不足,用戶需要準確找到存在的僵尸文件,并清理掉這些文件。
磁盤分區索引節點Inode使用率超過100%,您可以刪除掉對Inode占用比較高的文件來清理或者直接選擇增加Inode節點。
針對這些導致磁盤空間不足的原因,分別用不同方式進行處理,詳情請參見本文具體操作步驟。
操作前準備
在進行具體操作之前,需要完成以下準備工作:資源規劃和資源創建。
資源規劃
本實踐以操作系統為“CentOS 7.6 64bit”的云主機為例,處理Linux云主機實例磁盤空間不足的方法,需要您提前做好資源規劃,具體資源如下:
資源創建
操作步驟
本文中將分別針對導致磁盤空間不足的三個原因,即“磁盤分區空間使用率高達100% ”、“僵尸文件冗余”、“磁盤分區索引節點Inode使用率高達100%”,來分別給出對應的處理方式。
清理占用空間較大的文件及目錄
當磁盤分區空間使用率高達100%時,用戶可通過清理占用空間較大的文件及目錄來達到清理空間的目的。
以下操作步驟中云主機的操作系統為“CentOS 7.6 64bit”,回顯僅供參考。
登錄控制中心。
單擊控制中心左上角的

,選擇地域,此處我們選擇華東1。單擊“計算>彈性云主機”,進入彈性云主機頁面。
單擊待操作的彈性云主機所在行的“操作>遠程登錄”。


以root用戶身份登入云主機,登錄之后如圖:


首先執行命令
df -h,來查看當前云主機的磁盤使用率。


用戶可以根據“Use%”這一列來確定使用率,從此圖中可以看出使用率最高的是/dev/vda1,使用率為4%。


用戶進入根目錄并執行命令
du -sh *查看哪個文件占用磁盤空間比較大,具體操作及回顯信息如下圖:


從此圖中可以看到/usr目錄占據磁盤空間較大。接下來進入到/usr目錄查看哪個目錄或文件占據空間最大,執行命令
du -sh *及回顯信息如下圖所示:

從圖中可以看到當前/usr路徑中/usr/lib占據空間最大,以此類推,最終根據業務和實際需求來判斷是否需要刪除相應文件,可以刪除不再使用的文件及目錄。
清理“僵尸文件”
在主機中可能存在一部分文件,被標注為“deleted”,顯示已被刪除,但是仍在占據磁盤空間,且這部分文件不能用常用的查詢文件命令查詢到,您可以采用以下方法來查詢并刪除文件:
以“root”用戶登錄彈性云主機,登錄成功如圖:


在登錄成功的彈性云主機中,首先安裝lsof工具,lsof是一個列出當前系統打開文件的工具,使用
yum install lsof -y命令來安裝,回顯信息如下圖所示:


從圖中可知,此臺云主機中系統自帶lsof工具,可直接使用。
執行命令
lsof |grep delete | sort -k7 -rn | more來查看此臺云主機中僵尸文件的空間占用情況,具體操作及回顯情況如下圖:


可以看到在本臺云主機中,目前沒有“僵尸文件”,當有“僵尸文件”時,需要您將其所在進程殺掉。您可以通過命令
lsof | grep delete來顯示進程號,并找出其中的”僵尸文件“進程號,使用kill <進程號>來結束進程,并釋放空間。
清理Inode占用較大空間文件
當云主機確認磁盤分區空間還沒有被用滿,也確認沒有“僵尸文件”的存在,可以考慮此臺云主機中是否磁盤分區的Inode使用率過高,用戶可以采用清理Inode占用空間較大文件的方法來處理此問題,具體步驟如下:
以“root”用戶登錄彈性云主機,登錄成功如圖:


查詢Inode使用率,執行命令
df -i,回顯信息如下圖:


目前的“IUse%”數值都較小,當您發現您云主機中的“IUse%”值接近100%需要繼續執行后續操作。
執行命令
for i in /*; do echo $i; find $i | wc -l; done來分析當前云主機上根目錄下的二級目錄中都分別有多少個文件,回顯信息如下圖所示:


上圖中,每一級目錄下方代表的數字為此目錄下的文件數,數字越大說明Inode占用越高,此示例中/usr目錄下的文件數最多。因此,用戶可查詢/usr目錄中二級目錄的文件數,再次找出文件數最多的目錄。以此類推,最終定位出占用Inode較大空間的文件及目錄,根據業務需要來確認是否清理來釋放空間。