最近經(jīng)常收到磁盤空間不足的告警翅雏,但是去定位可刪除文件的時候敛苇,發(fā)現(xiàn)了一個問題,df顯示磁盤滿了板惑,但是du計算得到的磁盤總空間卻只占到磁盤空間的50%左右。 經(jīng)過查詢后終于找到原因
最終原因
文件如果在被某個進(jìn)程打開后刪除偎快,還會存在文件系統(tǒng)中冯乘,只是標(biāo)記為(deleted
)狀態(tài)。
df
統(tǒng)計是文件系統(tǒng)(FileSystem)中的空閑磁盤大小晒夹,這個數(shù)值可以在文件系統(tǒng)中直接得到裆馒,所以命令執(zhí)行很快
du
統(tǒng)計的目錄及文件占用的磁盤大小姊氓,如果文件刪除(被標(biāo)記為deleted
狀態(tài))則不統(tǒng)計
問題展示
[tenmao@vm ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 18G 72K 100% /
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.4M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 497M 171M 327M 35% /boot
tmpfs 182M 0 182M 0% /run/user/1000
[root@vm /]# du -h --max-depth=1
146M ./boot
0 ./dev
0 ./proc
9.4M ./run
0 ./sys
36M ./etc
44K ./root
4.0K ./tmp
344M ./var
2.6G ./usr
11G ./home
0 ./media
0 ./mnt
136M ./opt
0 ./srv
14G .
df顯示磁盤占用100%(磁盤一共18G),du命令卻只查找到14G的空間占用
問題定位
查看打開的文件列表
[tenmao@vm ~]$ lsof | grep deleted
less 12998 (省略) /home/tenmao/test4 (deleted)
可以看到文件/home/tenmao/test4
被進(jìn)程12998打開后喷好, 又被其他進(jìn)程或命令刪除翔横,在lsof
命令中顯示為deleted
狀態(tài)
解決問題
停掉或重啟進(jìn)程12998
kill 12998
[tenmao@vm /]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 14G 4.0G 78% /
devtmpfs 898M 0 898M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.4M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 497M 171M 327M 35% /boot
tmpfs 182M 0 182M 0% /run/user/1000
停掉進(jìn)程后,df命令與du命令的大小基本一致了梗搅。
一個猜測
創(chuàng)建文件的時候禾唁,如果df顯示磁盤滿,但是du顯示有空間无切,是否可以創(chuàng)建文件荡短?
結(jié)果顯示:創(chuàng)建文件的時候,判斷磁盤空間使用但是df的結(jié)果
(這也很符合預(yù)期哆键,因為文件還是交給文件系統(tǒng)來管理的)