今天早上,我的根分区上出现了低磁盘警告。 所以我从平常的调查path开始,显然我的第一个命令的结果如下图所示。
[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什么文件正在吃我的磁盘?
确认疑犯是一个被删除的文件,如果文件不存在,没有什么比find或者du可以解决有问题的文件! 好吧,要find它的实际操作顺序是,
[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
那么,上述命令我从另一个SOfind答案在https://stackoverflow.com/questions/17860257/unable-to-find-large-files-in-linux-using-du-h但我想知道笏是那最后的命令? 它是如何回收孤立的磁盘空间?
我最喜欢的定位是什么占用空间的命令是这样的:
$ du -sh ./*
当您使用这些选项运行磁盘使用命令时,将显示该文件夹中的文件和文件夹的大小。 对于文件夹,大小还包括所有内容的大小。 这使得你一眼就能看到你的空间已经用完了。
Protip:如果这是一个你想要频繁运行的命令,你可以在你的~/.bashrc文件中为它做一个别名:
alias showdisk='du -sh ./*'
现在下次你加载你的terminal,你将会input$ showdisk ,它会显示你在命令行上的文件夹中的文件和文件夹的大小。 希望这可以帮助你加快速度:D
我喜欢这个工具:
它基本上是du的一个ncurses gui包装。 我发现它比普通du有更多的帮助,因为它同时执行所有的工作,而不是每次进入利用率最高的目录。 对于其中包含大量数据的磁盘树尤其有用。
我总是使用这个简单的脚本,将打印什么大的文件
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
find重复的文件,首先按大小然后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