解析Linux磁盘爆满问题


原博客连接: linux磁盘释放解决

删除文件但是磁盘没有释放:

在Linux系统中,通过rm或者文件管理器删除文件,只是将它会从文件系统的目录结构上解除链接(unlink),也就是说只是删除了文件和系统目录结构的链接;

如果文件在删除时是被打开的(有一个进程正在使用该文件,文件被进程锁定或者有进程一直在向这个文件写数据等)状

态,那么进程将仍然可以读取该文件,也就是说没有删除掉文件在读取的状态,所以磁盘空间也就会一直被占用。

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,

这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占

用的空间就可以被覆盖并写入新的内容,之所以出现删除文件后,空间还没释放,就是因为有进程还在一直向这个文件写

入内容,导致虽然删除了文件,但文件对应的指针部分由于进程锁定,并未从meta-data中清除,而由于指针并未被删

除,那么系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放也就不足为奇了。

清除大文件的方法
a)# echo " " > /a.log

b)# cat /dev/null > /a.log

c)# > /a.log
解决删除文件磁盘没释放问题
  • 先df -lh查看一下磁盘使用状况, 发现/data分区下的Used已用空间很大, 但是实际查看并没有占用那么大的空间!

  • 找到被删除文件所在的分区, 比如/data分区

  • 查看被删除了的所有文件:lsof -n /data |grep deleted

  • 杀死这些文件的delete进程, 释放空间: lsof -n /data |grep deleted|awk ‘{print $2}’|xargs kill -9

  • 接着再运行lsof -n /data |grep delete,应该就没有结果了。

  • 注意: 刚杀死deleted进程时, df -h查看/data 分区, Used已用空间可能时瞬间显示过大, 但随着deleted进程杀死, 资

    源逐渐释放, /data分区下的Used已用空间会逐渐变小, Avail可用空间会逐渐变大)

调整磁盘预留空间

在Linux系统中,ext2、ext3、ext4文件系统上通常会默认预留5%的磁盘空间

[root@ss-server ~]# df -T
Filesystem     Type     1K-blocks    Used Available Use% Mounted on
/dev/vda1      ext4      41151808 4962148  34076228  13% /
devtmpfs       devtmpfs   1931468       0   1931468   0% /dev
tmpfs          tmpfs      1941204       0   1941204   0% /dev/shm
tmpfs          tmpfs      1941204     652   1940552   1% /run
tmpfs          tmpfs      1941204       0   1941204   0% /sys/fs/cgroup
tmpfs          tmpfs       388244       0    388244   0% /run/user/0
 
[root@ss-server ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  4.8G   33G  13% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  620K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs           380M     0  380M   0% /run/user/0
 
比如上面"/"分区是ext4文件系统,默认系统预留了5%也就是2G的空间。
现在可以通过"tune2fs"命令将系统预留空间改为2%。
 
[root@ss-server ~]# tune2fs -m 2 /dev/vda1
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 2% (209704 blocks)
 
执行后,发现"/"分区腾出了1G的空间,这时系统预留空间也就是2%了。
[root@ss-server ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  4.8G   34G  13% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  620K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs           380M     0  380M   0% /run/user/0
 
注意:
Linux下只有ext2、ext3、ext4文件系统时,系统才会默认预留5%的磁盘空间。
如果文件系统是xfs、tmpfs、devtmpfs、overlay等,则系统默认不会预留磁盘空间。
inode爆满问题

使用"df -h"命令发现磁盘使用率没有占满,但是无法写入文件,提示"no space left on device"!

原因:磁盘的inode节点使用爆满了!("df -i"命令查看/var空间的inode爆满)。

索引节点(inode)爆满问题处理

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值