磁盘写满疾速排查与解决
问题引子
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% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 401M 3.5G 11% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 44G 44G 0 100% /
/dev/sda1 1014M 192M 823M 19% /boot
tmpfs 783M 0 783M 0% /run/user/0
能够看到根分区曾经被写满,接下来要定位大文件的地位进行清理。
2. 定位大文件地位
> du -sh *
-s 示意汇总, -h 示意以 KB, MB, GB, TB 格局进行人性化显示。
0 bin
160M boot
4.3G data
0 dev
36M etc
15G home
0 lib
0 lib64
0 media
0 mnt
379M opt
0 proc
……
6.2G usr
332M 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 目录 / 文件名