【Linux】no space left on device 磁碟空間不足原因及排查方法
阿新 • • 發佈:2018-12-18
在系統使用中,經常會遇到no space left on device 磁碟空間不足的情況, 下面來詳細的介紹一下產生這種情況的幾種原因及解決辦法:
1. 首先我們要清楚inode 和 block的概念:
inode在格式化建立檔案系統的時候誕生,用來存放檔案的屬性資訊,存放著block的位置,沒有檔名,建立一個非空檔案佔用一個inode和至少1個block
block是實際存放資料的位置,block大小 1k 4k 8k centos 6.x(分割槽大於500M 預設是4k),檔案很大的話佔用多個block, 檔案非常小的時候1k block剩餘的空間不能繼續使用,所以系統中block消耗更快
所以磁碟慢了就分為,inode滿了,和block滿了,以及一種特殊的情況,下面我們來具體分析,以及對應的解決方案
檢視是否是block滿了
[[email protected] testuser]# df -h ###檢視所有block使用情況
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 8.8G 0 100% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
[[email protected] -os testuser]# du -sh /usr/* |grep G ###查詢大檔案
7.3G /usr/local
[[email protected] testuser]# du -sh /usr/local/* |grep G
7.3G /usr/local/bin
[[email protected] testuser]# du -sh /usr/local/bin/* |grep G
7.3G /usr/local/bin/1g
[[email protected] testuser]# \rm -f /usr/local/bin/1g ###刪除大檔案
[[email protected] testuser]#
[[email protected] testuser]# df -h ###接著檢視發現已經解決
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
檢視是否inode滿了(df -h發現還有空間)
[[email protected] logs]# touch {1..118}.txt
[[email protected] logs]# touch {1..118}.txt
touch: cannot touch `118.txt': No space left on device
[[email protected] logs]# df -i ###檢視inode使用情況
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 593344 56998 536346 10% /
tmpfs 238282 1 238281 1% /dev/shm
/dev/sda1 51200 39 51161 1% /boot
/tmp/1m 128 128 0 100% /app/logs
[[email protected] logs]# pwd
/app/logs
[[email protected] logs]# \rm -f *.txt ###如果小檔案太多,採用a*.txt b*.txt 一批一批的刪
[[email protected] logs]# df -i ###接著檢視
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 593344 56998 536346 10% /
tmpfs 238282 1 238281 1% /dev/shm
/dev/sda1 51200 39 51161 1% /boot
/tmp/1m 128 11 117 9% /app/logs
###如果不知道小檔案都在哪裡怎麼查詢?
###查詢系統中 目錄大小大於1M(目錄一般大小為4K,所以目錄要是大了那麼檔案必然很多)
[[email protected] testuser]# find / -size +4k -type d |xargs ls -ldhi
11 drwx------ 2 root root 12K Sep 23 00:49 /boot/lost+found
946 drwxr-xr-x 12 root root 4.1K Sep 22 17:53 /dev
1114113 drwxr-xr-x 88 root root 12K Sep 22 19:55 /etc
262145 drwxr-xr-x 13 root root 12K Sep 22 18:59 /lib
檢視是不是檔案被佔用一直沒被徹底刪除(特殊原因),這種情況往往是容易被忽略,也是讓人鬱悶的,因為你會發現df -h明明已經有空間了,但是就是放不進去東西
[[email protected] ~]# lsof |grep deleted
rsyslogd 1250 root 1w REG 8,3 4888889358 140789 /var/log/messages (deleted)
[[email protected] ~]# #lsof 顯示出系統中被開啟的檔案
[[email protected] ~]# #第一列 軟體/服務的名稱
[[email protected] ~]# #第八列 檔案的大小
[[email protected] ~]# #第10列 檔案的名字
[[email protected] ~]# #第11列 標記(硬連結數為0 程序呼叫數不為零 就會有 delete)
####重啟對應的服務 釋放磁碟空間
[[email protected] ~]# /etc/init.d/rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
/tmp/1m 1003K 19K 933K 2% /app/logs
本文轉載自:https://blog.csdn.net/jiedao_liyk/article/details/78497625