Linux磁盘满问题分析

线上一台Linux服务器最近经常磁盘根分区满告警,
但不是普通的日志文件或数据文件过多过大,现象如下:

1)执行“df -h”查看各分区空间的使用情况
[root@XEN64 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.8G 8.7G 535M 95% /
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 7.7G 666M 7.1G 9% /run
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/sda3 20G 3.3G 16G 18% /usr/local

可以看到根分区使用率超过了预警值,
进入根目录,查看根目录下各子目录的大小:
[root@XEN64 /]# du -sm *
0 bin
180 boot
0 dev
24 etc
3 home
0 lib
0 lib64
1 lost+found
1 media
1 mnt
32 opt
du: cannot access 'proc/17842/task/17842/fd/4': No such file or directory
du: cannot access 'proc/17842/task/17842/fdinfo/4': No such file or directory
du: cannot access 'proc/17842/fd/4': No such file or directory
du: cannot access 'proc/17842/fdinfo/4': No such file or directory
0 proc
2 root
666 run
0 sbin
1 srv
0 sys
96 tmp
5856 usr
221 var

进一步检查/usr目录:
[root@XEN64 /usr]# du -sm *
358 1.2-compat
164 bin
1 etc
1 games
33 include
912 lib
432 lib64
101 libexec
3269 local
1 man
46 sbin
547 share
1 src
0 tmp

对比du和df的结果,可以发现两者的已使用大小不一致,
du命令得到的已用大小远小于df命令已用大小,初步猜测存已被删除文件仍然有进程在写它,导致du命令发现不了。
如果允许,最简单的处理方式是重启机器,不然用下列命令找出被删除的,但仍然可能有进程在写它的文件:
pids=`ps aux|awk '{print $2}'`;for pid in $pids; do lsof -p $pid|grep del; done

见到庐山真面目:
[root@XEN64 /proc]# pids=`ps aux|awk '{ if (NR>1) print $2}'`;for pid in $pids; do lsof -p $pid|grep del; done
stati 28885 root 1w REG 8,1 5969132048 409096 /tmp/process_monitor-root.log (deleted)
stati 28885 root 2w REG 8,1 5969132048 409096 /tmp/process_monitor-root.log (deleted)
stati 28885 root 3u REG 8,4 20480039 35651587 /data/consumer/log/consumer.log.5 (deleted)
consumer 29756 root 1w REG 8,1 5969132048 409096 /tmp/process_monitor-root.log (deleted)
consumer 29756 root 2w REG 8,1 5969132048 409096 /tmp/process_monitor-root.log (deleted)
consumer 29756 root 3u REG 8,4 20480039 35651587 /data/consumer/log/consumer.log.5 (deleted)

果然是有大量的已经删除文件,办法要么重启,要么重启持有它们的进程,问题即可解决。

转载于:https://www.cnblogs.com/aquester/p/10154834.html

### Linux 系统磁盘空间已时的排查方法 当遇到Linux系统磁盘空间不足的情况,可以采取一系列措施来诊断并解决问题。 #### 一、初步检查磁盘使用情况 利用`df -h`命令能够直观地看到各个分区的空间占用状况以及剩余可用容量[^1]。此操作有助于快速定位具体哪个分区出现了存储瓶颈。 对于inode耗尽的情形,则需借助`df -i`指令获取各文件系统的inode利用率信息[^2]。如果发现某个分区的inode接近饱和状态,即使实际字节级别的存储还有富余,也可能引发"No space left on device"错误提示。 #### 二、深入分析大文件与无用数据 一旦确认了有问题的目标分区之后,下一步便是寻找占据大量空间的大文件或是不再需要的历史备份等冗余资料: - 使用 `du -sh /* | sort -rh | head -n 10` 来找出根目录下最大的十个子项及其大小; - 对特定路径执行更细致化的扫描:`du -ah /path/to/directory | sort -rh | less` 上述两种方式可以帮助管理员识别出哪些部分占用了过多资源从而决定如何处理这些对象。 #### 三、清理临时文件和日志记录 很多应用程序会在运行过程中产生大量的临时文件或调试信息存放在/var/log或其他指定位置。定期清除这类不必要的文档既有利于释放宝贵的磁盘空间又不会影响正常业务流程: ```bash journalctl --vacuum-time=2weeks # 清理超过两周的日志条目 find /var/tmp -type f -mtime +7 -delete # 删除七天前创建的临时文件 ``` #### 四、调整预留百分比设置(谨慎) 默认情况下为了保障系统稳定性会给超级用户(root)保留一定比例(通常是5%)的未分配区域作为应急缓冲区。然而,在某些特殊场景下可以根据实际情况适当降低这个数值以增加普通用户的可支配额度。修改/etc/fstab配置文件中的相应字段即可实现这一目的,但务必小心行事以免造成不可预见的风险! #### 五、扩展现有卷组或者迁移至更大容量设备 面对物理层面确实已经触及上限的问题,考虑通过LVM(Logical Volume Manager)技术动态扩充逻辑卷尺寸不失为一种有效手段;另外还可以规划将重要服务迁移到具备更高性能指标的新硬件平台上继续提供支持和服务[^4]。 ```bash pvcreate /dev/sdb # 初始化新加入的硬盘成为物理卷 vgextend my_volume_group /dev/sdb # 将新的物理卷添加到现有的卷组里 lvresize -l +100%FREE /dev/my_volume_group/root_lv # 利用全部空闲空间扩大根分区对应的LV resize2fs /dev/my_volume_group/root_lv # 更新ext系列文件系统的元数据使之适应新的尺寸变化 ``` 以上即是在Linux环境下应对磁盘空间告急局面的主要思路和技术要点概述。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值