錯誤提示: no space left on device
經典版(block占用)
模擬
dd if=/dev/zero of=/var/log/nginx.log bs=1M count=2000
排查
#1. df -h 查看哪里空間不足,哪個分區#2. du -sh詳細查看目錄所占空間
du -sh /* 排查占用空間大的目錄
du -sh /var/*
du -sh /var/log/* #3. 最終通過du -sh 排查到具體的大文件或大的目錄#4. 找出后確認是否可以刪除.
inode 不足
現象
# df -h 查看發現磁盤空間沒有滿,那是什么原因導致的呢?# 排查:
1. df -h查看磁盤空間沒有滿,df -i查看inode使用情況
2. 找出這個分區中,大目錄(目錄本身大小大于1MB,du -sh目錄所占空間)就行
3. 找出有大量小文件的目錄
4. 確認是否可以刪除或處理.# 命令,篩選目錄本身大于 1M 的
find / -type d -size +1M# 命令,篩選目錄下,文件數量
find / -type f | xargs dirname | sort | uniq -c | sort
模擬
mkdir -p /lndsnx/test-inode
cd /lndsnx/test-inode
touch {01..100000} 可能報錯參數過長
echo {01..100000} | xargs touch
未徹底刪除
原理
文件徹底刪除的條件
- 刪除文件,硬鏈接數為 0,文件相當于被刪除了,使用 rm 命令
- 文件調用數為 0,文件是否被使用中
排查步驟:
- 如何知道連接數是否為 0,一般 ls,find查看,沒有則為 0
- 如何知道進程調用數是否為 0,lsof 顯示打開的文件,lsof | grep 文件名
模擬
# 模擬文件調用,但是刪除了文件入口
tail -f nohup.out# 通過 tail -f 調用占用著
rm -f nohup.out # 刪除# 查看調用
lsof | grep nohup.out