最近經(jīng)常收到磁盤空間不足的告警,但是去定位可刪除文件的時(shí)候,發(fā)現(xiàn)了一個(gè)問(wèn)題,df顯示磁盤滿了,但是du計(jì)算得到的磁盤總空間卻只占到磁盤空間的50%左右。 經(jīng)過(guò)查詢后終于找到原因
最終原因
文件如果在被某個(gè)進(jìn)程打開后刪除,還會(huì)存在文件系統(tǒng)中,只是標(biāo)記為(deleted)狀態(tài)。
df統(tǒng)計(jì)是文件系統(tǒng)(FileSystem)中的空閑磁盤大小,這個(gè)數(shù)值可以在文件系統(tǒng)中直接得到,所以命令執(zhí)行很快
du統(tǒng)計(jì)的目錄及文件占用的磁盤大小,如果文件刪除(被標(biāo)記為deleted狀態(tài))則不統(tǒng)計(jì)
問(wèn)題展示
[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的空間占用
問(wèn)題定位
查看打開的文件列表
[tenmao@vm ~]$ lsof | grep deleted
less 12998 (省略) /home/tenmao/test4 (deleted)
可以看到文件/home/tenmao/test4被進(jìn)程12998打開后, 又被其他進(jìn)程或命令刪除,在lsof命令中顯示為deleted狀態(tài)
解決問(wèn)題
停掉或重啟進(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命令的大小基本一致了。
一個(gè)猜測(cè)
創(chuàng)建文件的時(shí)候,如果df顯示磁盤滿,但是du顯示有空間,是否可以創(chuàng)建文件?
結(jié)果顯示:創(chuàng)建文件的時(shí)候,判斷磁盤空間使用但是df的結(jié)果
(這也很符合預(yù)期,因?yàn)槲募€是交給文件系統(tǒng)來(lái)管理的)