磁盘写满疾速排查与解决

问题引子

PHP 报错如下,此问题根本能够确定是因为磁盘写满导致 session 不能写入造成。

Warning: session_start(): open(/tmp/sess_rvo5pg9op1ej55vop0g72b0jeu, O_RDWR) failed: No space left on device (28)

解决写满问题

上面记录一下,疾速排查用到的几个命令。

1.查看磁盘占用

> df -h 
文件系统                 容量  已用  可用 已用% 挂载点devtmpfs                 3.9G     0  3.9G    0% /devtmpfs                    3.9G     0  3.9G    0% /dev/shmtmpfs                    3.9G  401M  3.5G   11% /runtmpfs                    3.9G     0  3.9G    0% /sys/fs/cgroup/dev/mapper/centos-root   44G   44G  0     100% //dev/sda1               1014M  192M  823M   19% /boottmpfs                    783M     0  783M    0% /run/user/0

能够看到根分区曾经被写满,接下来要定位大文件的地位进行清理。

2.定位大文件地位

> du -sh *

-s 示意汇总, -h 示意以KB, MB, GB, TB格局进行人性化显示。

0    bin160M    boot4.3G    data0    dev36M    etc15G    home0    lib0    lib640    media0    mnt379M    opt0    proc……6.2G    usr332M    var

这样能够显示出目录下的文件大小总和。而后,从根目录开始一级一级的定位大文件和大目录的地位。

3.批量删除文件

个别磁盘写满都是日志造成,日志文件个别以天为单位为一个记录文件,如下。

-rw-r--r-- 1 www www        0 3月  18 10:13 test20210101.log-rw-r--r-- 1 www www        0 3月  18 10:13 test20210102.log-rw-r--r-- 1 www www        0 3月  18 10:13 test20210103.log-rw-r--r-- 1 www www        0 3月  18 10:13 test20210104.log-rw-r--r-- 1 www www        0 3月  18 10:13 test20210201.log-rw-r--r-- 1 www www        0 3月  18 10:13 test20210204.log

对于这些文件,咱们要进行批量删除。

基于文件名中的工夫进行批量删除

批量删除2021年1月份的日志

> ls | grep test202101 | xargs rm -f

基于文件的批改工夫(mtime)属性进行批量删除

批量删除30天之前的以.log结尾的文件

> find ./ -type f -name "*.log" -mtime +30 -delete

rsync替换原理删除大目录

假如 testlog 下的大量文件,先创立空目录 blank,以空目录替换 testlog ,此时 testlog 则为空。

这种办法要比 rm -rf testlogs/ 效率高

> mkdir blank> rsync -a --delete blank/ testlogs/

PS:

查看某文件或目录属于哪个分区

> df -h 目录/文件名