磁盘写满快速排查与解决
磁盘写满快速排查与解决
问题引子
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 目录/文件名 本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu