Linux 磁盘删除大文件后磁盘还是满的 --- 以及常见的磁盘爆满问题解决方法

本文详细介绍了Linux系统中遇到磁盘空间满、分区使用率达到100%及inode耗尽等问题时的排查思路与解决办法。包括通过lsof命令查找并释放僵尸文件,使用df和du命令分析磁盘与目录占用,以及如何清理和调整inode数量。这些方法有助于优化系统性能和保障服务正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


问题描述:

创建文件提示空间不足,报错如下

No space left on device …
  • 有以下三种情况

一、磁盘删除大文件后磁盘还是满的

1.思路分析:

  • 先去排查一下inode号和磁盘,如果磁盘和inode都没有问题,则需要查看是否存在未被清除句柄的僵尸文件。这些文件实际上已经被删除,但是有服务程序在使用这些文件,导致这些文件一直被占用,无法释放磁盘空间。如果这些文件过多,会占用很大的磁盘空间。

2.解决方案:

  1. 安装lsof
yum install lsof -y
  1. 执行以下命令,查看僵尸文件占用情况。
lsof |grep delete | more
  1. 如果僵尸文件过多,会占用很大的磁盘空间。可以通过以下两种方法释放句柄,以清除僵尸文件。
#方法一
重启服务器,验证效果。重启服务器,系统会退出现有的进程,开机后重新加载。该过程会释放调用的deleted文件的句柄。



#方法二
根据lsof命令列出的pid进程号,使用kill命令正常停止或结束占用这些文件的服务进程。
说明:如果服务器正在运行业务,可能会影响到业务,请慎重操作。

二、磁盘分区空间使用率达到百分之百

1.思路分析

  • 就是有大文件占用了太多的空间

2.解决方案

  1. 使用df -h命令查看磁盘使用率,其中的Mounted on指挂载的目录。
  2. 进入根目录,执行以下指令,逐级查看哪个目录占用磁盘空间较大,进入相应的目录,直到找到最精确的文件或目录。
du -sh *
  1. 最后,结合业务情况等判断对相关文件或目录进行删除,或者购买更大的数据盘分担处理。

三、inode容量满的处理

1.思路分析

  • Linux的inode节点中,记录了文件的类型、大小、权限、所有者、文件连接的数目、创建时间与更新时间等重要的信息,还有一个比较重要的内容就是指向数据块的指针。一般情况不需要特殊配置,如果存放文件很多,则需要配置。有时磁盘空间有剩余但是不能存放文件,可能是由于inode耗尽所致。

2.解决方案

  1. 查询inode的使用情况。
df -i
  1. 如果inode使用率达到或者接近100%,可以通过以下两种方式进行处理:
方法一:删除占用最高的文件或目录

1.分析根目录下的每个二级目录下有多少个文件。
for i in /*; do echo $i; find $i | wc -l; done

2.然后,逐层进入inode占用最高的目录,继续执行上述指令,逐步定位占用过高空间的文件或目录,最后进行相应清理。

方法二:修改inode数量

如果不允许清理磁盘中的文件,或者清理后inode使用率仍然较高,则需要通过以下步骤,增加inode节点数量。
#inode的调整需要重新格式化磁盘,请确保数据已经得到有效备份后,再进行以下操作。
1.执行以下命令,卸载系统文件。
umount /home

2.执行以下命令,重新建立文件系统,指定inode节点数。
mkfs.ext3 /dev/xvdb -N 1638400
#本文指定inode节点数1638400,现场实际环境请以实际为准。

3.执行以下命令,修改fstab文件。
vim /etc/fstab

4.执行以下命令,查看修改后的inode节点数。
dumpe2fs -h /dev/xvdb | grep node

<think>好的,我现在需要解决用户提到的从宝塔面板删除文件后磁盘空间未释放的问题,以及了解128TB文件的情况。首先,我应该回顾用户提供的引用内容,看看有没有相关的信息可以应用。 用户提供的引用[3]提到宝塔解决负载爆满但CPU和内存正常的方法,其中有一条命令是`lsof | grep delete`,这应该用于查找已删除但未被完全释放的文件。这可能与磁盘空间未释放的问题有关,因为当文件被进程占用时,即使从面板删除,空间也不会立即释放。 接下来,用户还提到了128TB文件的情况。这可能涉及到大文件或分区类型的问题。引用[1]提到MBR分区类型有单盘容量上限为2TB左右,而GPT分区支持更大的容量。如果用户使用的是MBR分区,超过2TB的部分可能无法正确管理,导致显示异常,比如出现128TB这样的异常值。因此,检查分区类型是否是GPT很重要。 现在,我需要将这些信息整合成一个解决方案。首先,解决空间未释放的问题,需要找到并终止占用已删除文件的进程,然后释放空间。对于128TB的问题,需要确认分区类型,如果是MBR,可能需要转换为GPT,并检查文件系统是否有错误。 另外,用户可能误操作导致生成了异常大的文件,或者存在日志文件(如引用[2]中的ib_logfile)未正确清理,导致空间占用。需要检查相关的大文件,并定期清理日志。 最后,确保所有步骤都符合用户提供的系统级指令,比如正确使用LaTeX格式,生成相关问题,并用中文回答。同时,引用相关引用内容,比如引用[1]、[2]、[3]来支持解决方案的各个部分。</think>### 从宝塔面板删除文件后磁盘空间未释放的解决方案 #### 问题原因分析 1. **文件被进程占用未释放** 从面板删除文件后,若该文件仍被运行中的进程占用(如日志文件、数据库文件等),系统会标记文件为已删除但实际占用空间未释放。 引用案例:MySQL 的 `ib_logfile` 日志文件被删除后若未重启服务,磁盘空间不会释放[^2]。 2. **Linux 文件系统特性** Linux 系统下删除文件时,若文件处于被打开状态,其磁盘空间会延迟释放(直到进程关闭该文件句柄)。 #### 解决步骤 1. **查找被标记删除但未释放的文件** 执行命令列出所有已删除但未释放的文件及占用进程: ```bash lsof | grep delete # 查看状态为 "deleted" 的文件和进程[^3] ``` 输出示例: ``` nginx 1234 root 5w REG 253,0 10GB 123456 /var/log/nginx.log (deleted) ``` 2. **释放空间方法** - **重启相关服务**:若文件被 Nginx、MySQL 等进程占用,重启服务可释放空间: ```bash systemctl restart nginx # 重启占用文件的进程 ``` - **手动终止进程**:若为非关键进程,可通过 `kill` 命令终止进程: ```bash kill -9 1234 # 替换为实际进程PID ``` 3. **检查磁盘空间变化** 使用 `df -h` 或 `du -sh /*` 确认空间是否释放。 --- ### 关于 "128TB 文件" 的异常显示原因 #### 可能原因 1. **MBR 分区限制** MBR 分区表最大支持 2TB 单盘容量,若磁盘使用 MBR 分区且容量超过 2TB,系统可能显示异常值(如 128TB)[^1]。 解决方案: ```bash parted -l # 检查分区类型,若为 MBR 需转换为 GPT ``` 2. **文件系统错误** Ext4/XFS 等文件系统元数据损坏可能导致容量显示异常。 修复命令: ```bash fsck -y /dev/sda1 # 替换为实际分区设备 ``` 3. **特殊文件或符号链接** 若存在指向 `/dev/loop` 或虚拟设备的异常文件,可能显示超大容量。 排查命令: ```bash find / -type f -size +100G # 查找大于 100GB 的文件 ``` --- ### 宝塔面板磁盘管理建议 1. **定期清理日志文件** 如 MySQL 的 `ib_logfile*`、Nginx 的 `access.log` 等,避免空间被长期占用。 2. **使用 GPT 分区** 若磁盘容量超过 2TB,需使用 GPT 分区方案[^1]。 3. **监控磁盘空间** 宝塔面板内置「计划任务」可设置磁盘空间告警。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值