Linux 磁盘空间不足分析

磁盘空间不足案例1:(block)
[root@libin3 /]# dd if= /dev/zero of=/tmp/1g bs=1M count=1000 # input file (从哪里来) output file (到哪里去) block size (每一次复制多大) count(复制多少次)
[root@libin3 tmp]# mkfs.xfs /tmp/1g #将该文件格式化
[root@libin3 tmp]# mount /tmp/1g /mnt/ #进行挂载,做成一个1g的磁盘
[root@libin3 rhca]# mkdir -p /mnt/rhca/libin{1..3} #在该磁盘中创建目录libin1 libin2 libin3
[root@libin3 rhca]# dd if=/dev/zero of=/mnt/rhca/libin1/hdoop.mkv bs=1M count=888 #模拟磁盘刷满,block满
||
用到以下的命令du -sh
[root@libin3 /]# du -sh /mnt/rhca/libin1/*
888M /mnt/rhca/libin1/hdoop.mkv

磁盘空间不足案例2:(block)
[root@libin3 /]# seq 500000000 >>/var/log/messages #模拟5亿行写入到日志,写满磁盘
[root@libin3 /]# du -sh /var/log/* | grep "G" #找到占用内存的大文件日志
[root@libin3 /]# rm -fr /var/log/messages #将该文件删除
[root@libin3 /]# df -h | head -n6 | grep "100%" #发现并没有清除
/dev/mapper/cl-root 10G 10G 24K 100% /
注:文件删除的原理(文件被彻底删除的条件)
1、硬连接数为0(入口没了)rm
2、没有人使用这个文件(进程占用数为0)lsof | grep 文件 #lsof:显示所有被打开的文件
[root@libin3 /]# lsof | grep messages #找出谁占用messages,看到有rsyslog
[root@libin3 /]# systemctl restart rsyslog.service abrtd.service #重启rsyslog.service abrtd.service(发临时邮件的服务abrt)
[root@libin3 /]# df -h #此时磁盘空间被消除
[root@libin3 /]# lsof | grep delete #lsof 会给硬连接数为0,进程调用数不为0的文件加上标记delete

例如:
[root@libin3 ~]# lsof | grep delete
[root@libin3 ~]# ps -ef | grep -v grep | grep gnome-ter
[root@libin3 ~]# kill -9 2778
[root@libin3 ~]# df -i #用信息索引点代替块表示使用状况

磁盘空间不足案例3:(inode,这种基本是定时任务导致)
[root@libin3 ~]# echo /mnt/{01..511990} | xargs touch #在/mnt/ 下创建/mnt/可用的索引文件数量,留几个
[root@libin3 ~]# df -i | tail -n 1 #可用看到索引使用率100%
/dev/loop0 512128 511997 131 100% /mnt
[root@libin3 ~]# touch /mnt/libin-{01..132}.txt #把索引节点挤满,此时会有一个问题
[root@libin3 ~]# ls /mnt/01 #此时 刚开始创建的文件就被删除了
ls: 无法访问/mnt/01: 没有那个文件或目录
[root@libin3 ~]# rm -fr /mnt/* #如果文件数太多,此时无法使用rm删除,此时只能使用xargs
bash: /usr/bin/rm: 参数列表过长
[root@libin3 mnt]# ls | xargs rm -f #必须要进入到/mnt/下,否则无法删除
[root@libin3 mnt]# df -i | grep "mnt" #此时就被释放了
/dev/loop0 512192 7 512185 1% /mnt

 

posted @ 2022-07-09 15:34  LB_运维技术  阅读(231)  评论(0编辑  收藏  举报