今天早上,我的根分区出现了磁盘空间不足的警告。因此,我开始按照通常的调查路径进行调查,显然,我的第一个命令的结果如下所示。
[root@my-server /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 97G 86G 6.0G 94% /
tmpfs 12G 5.7G 6.1G 48% /dev/shm
/dev/sda2 360G 16G 326G 5% /www
/dev/sdb1 458G 38G 397G 9% /web
/dev/sdc1 458G 42G 393G 10% /server
/dev/sdd1 458G 44G 392G 10% /mysql
[root@my-server /]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 6406144 264687 6141457 5% /
tmpfs 3070273 175 3070098 1% /dev/shm
/dev/sda2 23928832 1373 23927459 1% /www
/dev/sdb1 30457856 52061 30405795 1% /web
/dev/sdc1 30457856 1995 30455861 1% /server
/dev/sdd1 30457856 793 30457063 1% /MySQL
但我想知道是谁占用了这么多空间,于是启动了磁盘使用情况,发现,
[root@my-server /]# du -shx /
24G /
[root@my-server /]# du -h --max-depth=1 /
1.6G /root
4.0G /home
14M /sbin
6.5G /var
0 /misc
12K /.dbus
4.0K /mnt
4.0K /media
5.7G /dev
4.8G /opt
0 /sys
52M /user
35M /etc
0 /net
4.0K /bak
43G /mysql
6.5G /usr
du: cannot access `/proc/3633/task/25117/fd/78': No such file or directory
du: cannot access `/proc/3633/task/7047/fd/70': No such file or directory
du: cannot access `/proc/24882/task/24882/fd/4': No such file or directory
du: cannot access `/proc/24882/task/24882/fdinfo/4': No such file or directory
du: cannot access `/proc/24882/fd/4': No such file or directory
du: cannot access `/proc/24882/fdinfo/4': No such file or directory
du: cannot access `/proc/24883': No such file or directory
0 /proc
244M /lib
4.0K /nas
4.0K /selinux
4.0K /srv
27M /lib64
42G /server
49M /boot
16G /www
16K /lost+found
38G /web
100M /tmp
8.9M /bin
168G /
哎呀,实际使用量大约为 30GB,我如何找出哪些文件占用了我的磁盘空间?
确认罪魁祸首是一个已删除的文件,如果文件不存在,则 find 或 du 之类的工具无法解析有问题的文件!好吧,找到它的实际操作顺序是,
[root@my-server ~]# lsof / | grep deleted
...
java 3633 wwwuser 1w REG 8,3 66975347588 396715 /home/wwwuser/apache-tomcat-7.0.29/logs/catalina.out (deleted)
...
哎呀,62GB 的文件,现在,
[root@my-server ~]# cd /proc/3633/fd/
[root@my-server fd]# ll | grep deleted
[root@my-server fd]# > 1
好吧,上面的命令是我从另一个 SO 答案中得出的https://stackoverflow.com/questions/17860257/unable-to-find-large-files-in-linux-using-du-h但我想知道最后一个命令是什么?它是如何回收孤立磁盘空间的?
答案1
我最喜欢的查找占用空间的命令是这个:
$ du -sh ./*
当你运行磁盘使用量使用这些选项的命令会显示该文件夹中文件和文件夹的大小。对于文件夹,大小包括所有内容的大小。这样可以一眼就看出哪些空间被用完了。
专家提示:如果这是您想要频繁运行的命令,您可以在文件中为其创建别名,~/.bashrc
如下所示:
alias showdisk='du -sh ./*'
现在,下次您打开终端时,您将输入$ showdisk
,它将在命令行上显示您所在文件夹中文件和文件夹的大小。希望这能帮助您加快速度 :D
答案2
我喜欢这个工具:
它基本上是 du 的 ncurses gui 包装器。我发现它比普通的 du 更有帮助,因为它同时执行所有工作,而不是每次进入使用率最高的目录时执行。它对于包含大量数据的磁盘树尤其有用。
答案3
我总是使用这个简单的脚本来打印大文件
find /var/log -type f -size +3G -exec ls -lh {} \; | awk '{ print $5 ": " $9 }' | sort -rh
但如果有文件夹包含大量小文件,我总是使用
du -sh folder
或者
du -hsx /* | sort -rh | head -10
查找重复文件,首先按大小,然后按 md5sume
find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate