1. 程式人生 > >【Linux】no space left on device 磁碟空間不足原因及排查方法

【Linux】no space left on device 磁碟空間不足原因及排查方法

在系統使用中,經常會遇到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