Linux df -h 显示磁盘空间满,但实际未占用满——问题分析
生活随笔
收集整理的這篇文章主要介紹了
Linux df -h 显示磁盘空间满,但实际未占用满——问题分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題現象
工作中遇到一個問題,在 TX2 系統上,告警提示磁盤空間不夠,如圖所示
wohu@wohu:/$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 28G 28G 0 100% /
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 220K 7.7G 1% /dev/shm
tmpfs 7.7G 774M 7.0G 10% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
tmpfs 786M 16K 786M 1% /run/user/106
tmpfs 786M 0 786M 0% /run/user/1002
tmpfs 786M 0 786M 0% /run/user/1001
/dev/sda1 1.9T 1.4T 518G 73% /videos
問題分析
- 首先使用 sudo du / -h --max-depth=1 命令查看各個目錄的占用空間,試圖找到占用較多空間的目錄
wohu@wohu:/$ sudo du / -h --max-depth=1
[sudo] password for icsc-rudiadmin09:
8.0K /media
15M /bin
du: cannot access '/run/user/106/gvfs': Permission denied
774M /run
4.0K /snap
16K /lost+found
4.0K /srv
du: cannot access '/proc/19638': No such file or directory
du: cannot access '/proc/19639/task/19639/fd/4': No such file or directory
du: cannot access '/proc/19639/task/19639/fdinfo/4': No such file or directory
du: cannot access '/proc/19639/fd/3': No such file or directory
du: cannot access '/proc/19639/fdinfo/3': No such file or directory
0 /proc
4.0K /mnt
13M /etc
4.8G /usr
34M /boot
12M /sbin
1.5G /opt
1.7G /var
1.4T /videos
255M /lib
0 /sys
188K /dev
5.5M /root
1.8M /tmp
1.5G /home
1.4T /
但是從結果顯示來看并沒有占用大空間的磁盤,于是乎繼續分析。
- 查看 inode 的使用率,懷疑 inode 不夠導致此問題
wohu@wohu:/tmp$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/root 1835008 201065 1633943 11% /
devtmpfs 1994185 737 1993448 1% /dev
tmpfs 2010884 6 2010878 1% /dev/shm
tmpfs 2010884 1969 2008915 1% /run
tmpfs 2010884 6 2010878 1% /run/lock
tmpfs 2010884 16 2010868 1% /sys/fs/cgroup
tmpfs 2010884 14 2010870 1% /run/user/106
tmpfs 2010884 4 2010880 1% /run/user/1002
tmpfs 2010884 4 2010880 1% /run/user/1001
/dev/sda1 524437048 44385 524392663 1% /videos
通過 df -i 命令查看后發現 inode 使用率也正常的,只能進一步分析。
- 使用 lsof 檢查,懷疑是不是有可能文件已被刪除,但是進程還存活的場景
wohu@wohu:/tmp$ sudo lsof |grep delete
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/106/gvfsOutput information may be incomplete.
apache2 337 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 338 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 339 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 340 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 341 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 32749 root 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 32752 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 32753 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 32754 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 32755 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
apache2 32756 www-data 10u REG 179,1 0 393922 /tmp/.ZendSem.HuhGBk (deleted)
Linux 里的文件被刪除后,空間沒有被釋放是因為在 Linux 系統中,通過 rm 或者文件管理器刪除文件將會從文件系統的目錄結構上解除鏈接 (unlink) 。然而如果文件是被打開的(有一個進程正在使用),那么進程將仍然可以讀取該文件,磁盤空間也一直被占用。裝態為 deleted 為標記被刪除,其實該文件并沒有從磁盤中刪除,類似windows下的回收站狀態。
即使將如上所示的進程全部殺掉,發現空間占用仍是 100%,此時頭大呀。。
突然回想起,是不是由于掛載盤導致的,因為 TX2 空間本來就小,所以掛載了個移動硬盤。而且由于中間掛載盤丟失我又重新掛載的場景,于是繼續 Google,終于發現問題原因。
- 如果mount目錄下原來是有文件存在的,那么該目錄被 mount 之后這些文件就會被隱藏,不屬于該文件系統,使用du命令是看不到的。
- 卸載掛載盤
wohu@wohu:/$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 28G 28G 0 100% /
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 220K 7.7G 1% /dev/shm
tmpfs 7.7G 774M 7.0G 10% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
tmpfs 786M 16K 786M 1% /run/user/106
tmpfs 786M 0 786M 0% /run/user/1002
tmpfs 786M 0 786M 0% /run/user/1001
/dev/sda1 1.9T 1.4T 518G 73% /videos
wohu@wohu:/$ sudo unmount videos
-
查看卸載之后掛載盤大小
果然發現 videos 目錄下有較多的視頻占用了磁盤空間。
wohu@wohu:/videos$ cd ../
wohu@wohu:/$ du -h videos
...
...
...
18G videos/backup
18G videos
- 將 videos 目錄下的文件刪除或拷貝到其他目錄,并重新掛載
由此問題得到解決。
問題總結
在掛載目錄時,要確認掛載的目錄是否有文件,如果有文件那么掛載之后這些文件就會隱藏,此時使用 du 命令是看不到這些文件的。
總結
以上是生活随笔為你收集整理的Linux df -h 显示磁盘空间满,但实际未占用满——问题分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker 入门系列(7)- Dock
- 下一篇: 2017 年总结及 2018 年计划