Linux删除文件后磁盘目录不释放
今天测试oracle数据库的时候,把表空间连带内容和数据文件一并删除了,但是删除之后,查看数据文件不存在了,但是目录的带下没有释放
SQL> drop tablespace users including contents and datafiles;
查看目录大小
$ df -h /dev/mapper/oravg01-oradglv01 30G 26G 2.7G 91% /oradata01
发现目录剩余空间只有2.7G大小,明显不对,进入目录查看是否存在有文件
$ ls control01.ctl control02.ctl redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf temp2_01.dbf undotbs01.dbf
发现并没有users01.dbf这个文件,说明这个文件已经被删除了
这就很奇怪了,没有数据文件,但是目录空间没有释放。这是因为删除文件时,删除的并不是磁盘上真正存在的数据文件,而是删除的目录,因此你看不到目录(文件路径报错文件名)
但是实际的数据仍在,也就是可覆盖的,这时候,如果有一个程序,打开了文件句柄,没有关闭,也就是仍然在往这个文件写东西的话,就没办法覆盖,因此目录没有释放
解决方法:
# lsof|grep -i delete oracle 11472 oracle 259u REG 253,4 17179877376 393221 /oradata01/monkey/users01.dbf (deleted) oracle 16477 oracle 261u REG 253,4 6442459136 393229 /oradata01/monkey/users01.dbf (deleted)
使用lsof命令(root),查看哪些进程还在往已经删除的文件中写数据
我这个找到后,是我打开的oracle客户端,因此我把oracle客户端关闭后,目录就释放出来了
# df -h /dev/mapper/oravg01-oradglv01 30G 9.3G 19G 34% /oradata01
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现