# [Linux] 硬碟仍有空間,但無法讀寫新文件 "no space left on device" ###### tags: `linux` `Error` `public` ## 檢查磁碟容量 ```linux df -h ``` 若檢查後發現儲存空間已滿 可以透過資料夾檢查,來整理過大容量的資料 [reference link](https://officeguide.cc/linux-sorting-files-using-the-ls-command-tutorial/) ```linux # 檢查個別資料容量 du -hsc /pathway/* # 按照檔案大小排序 ls -lSh ## -l 列出資訊 ## -S 依據檔案大小排序(size) ## -h 顯示檔案大小 # 按照檔案修改時間排序 ls -lt ## -t依據時間排序(time) ls -ltr ## -r反向排序(reverse) ``` 若檢查後發現仍有儲存空間 可能是文件數量過多,導致inode空間不足 (接續下一段) ## 檢查inode容量 ```linux df -i ``` 如下圖的```/home3```硬碟的inode已滿 ![](https://i.imgur.com/LlRy8aO.png) **建議可以將較舊的資料移動至其他儲存裝置 或是刪除不必要temp檔案** ```linux # 檢查個別資料檔案數量 for i in /home3/*; do echo $i; find $i | wc -l; done ``` 詳細說明可以參考以下文章(轉載自[link](https://www.itread01.com/hkchklee.html)) > inode譯成中文就是索引節點,每個儲存裝置(例如硬碟)或儲存裝置的分割槽被格式化為檔案系統後,應該有兩部份,一部份是inode,另一部份是Block,Block是用來儲存資料用的。而inode呢,就是用來儲存這些資料的資訊,這些資訊包括檔案大小、屬主、歸屬的使用者組、讀寫許可權等。inode為每個檔案進行資訊索引,所以就有了inode的數值。作業系統根據指令,能通過inode值最快的找到相對應的檔案。 > > 這種情況的原因通常是:儘管那個分割槽的磁碟佔用率未滿,但是inode已經用完,應該是該磁碟的某些目錄下存在大量的小檔案導致。儘管小檔案佔用的磁碟空間並不大,但是數量太多,inode用盡。 > > 通過ls命令配合wc命令,可以檢視某個資料夾下的檔案數量。例如: > ```linux > ls -lt /tmp | wc -l > ```