linux命令检查当前文件夹子目录所占空间大小

今天开发服务器[linux]上的mongodb数据库突然挂了,打开mongodb日志发现如下提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2017-06-19T15:32:51.629+0800 [initandlisten] ERROR: Insufficient free space for journal files
2017-06-19T15:32:51.629+0800 [initandlisten] Please make at least 3379MB available in ../data/journal or use --smallfiles
2017-06-19T15:32:51.629+0800 [initandlisten]
2017-06-19T15:32:51.641+0800 [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating
2017-06-19T15:32:51.641+0800 [initandlisten] dbexit:
2017-06-19T15:32:51.641+0800 [initandlisten] shutdown: going to close listening sockets...
2017-06-19T15:32:51.642+0800 [initandlisten] shutdown: going to flush diaglog...
2017-06-19T15:32:51.642+0800 [initandlisten] shutdown: going to close sockets...
2017-06-19T15:32:51.642+0800 [initandlisten] shutdown: waiting for fs preallocator...
2017-06-19T15:32:51.642+0800 [initandlisten] shutdown: lock for final commit...
2017-06-19T15:32:51.642+0800 [initandlisten] shutdown: final commit...
2017-06-19T15:32:51.642+0800 [initandlisten] shutdown: closing all files...
2017-06-19T15:32:51.642+0800 [initandlisten] closeAllFiles() finished
2017-06-19T15:32:51.642+0800 [initandlisten] journalCleanup...
2017-06-19T15:32:51.642+0800 [initandlisten] removeJournalFiles
2017-06-19T15:32:51.643+0800 [initandlisten] shutdown: removing fs lock...
2017-06-19T15:32:51.643+0800 [initandlisten] dbexit: really exiting now

从日志文件明显看出,linux服务器磁盘空间不足。
使用df-hl命令查看磁盘空间发现果然如此,/opt挂载盘可用空间为0

1
2
3
4
5
6
7
8
9
[root@hs010 proc]# df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/sysvg-rootlv 4.8G 2.4G 2.2G 53% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sda1 477M 55M 398M 12% /boot
/dev/mapper/sysvg-homelv 4.8G 10M 4.6G 1% /home
/dev/mapper/sysvg-optlv 40G 38G 0 100% /opt
/dev/mapper/sysvg-tmplv 9.8G 86M 9.2G 1% /tmp
/dev/mapper/sysvg-varlv 9.8G 766M 8.5G 9% /var

通过find . -type f -size +800M -print0 | xargs -0 ls -l命令查找大于800M的文件发现 zookeeper.out日志文件比较大。如下:

1
2
3
4
5
6
7
[root@hs010 /]# find . -type f -size +800M -print0 | xargs -0 ls -l
find: `./proc/3677/task/3677/fd/5': No such file or directory
find: `./proc/3677/task/3677/fdinfo/5': No such file or directory
find: `./proc/3677/fd/5': No such file or directory
find: `./proc/3677/fdinfo/5': No such file or directory
-rw-r--r-- 1 root root 991461376 Jun 18 05:46 ./opt/pcserv/zookeeper/bin/zookeeper.out
-r-------- 1 root root 140737486266368 Jun 19 16:03 ./proc/kcore

找到大文件删除后,重启mongodb服务ok

另外还可用du命令进行当前目录下子目录所占空间的查询

1
2
3
4
5
6
7
8
du -h --max-depth=1 |grep [TG] |sort #查找上G和T的目录并排序
du -sh #统计当前目录的大小,以直观方式展现
du -h --max-depth=1 |grep 'G' |sort #查看上G目录并排序
du -sh --max-depth=1 #查看当前目录下所有一级子目录文件夹大小
du -h --max-depth=1 |sort #查看当前目录下所有一级子目录文件夹大小 并排序
du -h --max-depth=1 |grep [TG] |sort -nr #倒序排