root目录占用大量空间
今天看了一下测试服务器,突然发现根目录已使用100%了,赶紧检查了一下。
查看了隐藏文件,找到了。
进入.vnc目录是一个日志文件占用了空间,将其删除,另外将/home中的一个安装文件也删除了。奇怪的是空间却没有释放,
以前看到过用文件句柄恢复误删的oracle数据文件的案例, 还是要理解Linux下文件系统的原理。文件系统中分为两个部分:数据和指针,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,如果进程仍然一直在读写这个文件,就可能由于进程锁定导致指针未从metadata中清除,系统就认为此文件未被删除。
接下来执行 lsof | grep deleted 有进程在使用刚才删除的文件
现在有两种方式处理,1、kill 进程释放文件句柄;2、将/root/.vnc/racdb1:1.log 拷贝回去,然后将其清空 echo ‘’>/root/.vnc/racdb1:1.log。
最开始处理的太简单,不应该删除,发现是VNC的日志文件就应该用清空的方式处理的,在实际的这种方式可保障进程继续向文件写入日志,不会对应用产生影响。
现在用第二种方式处理
空间还是没有释放。将当前文件句柄清空,应该会释放空间。
lsof
command PID USER FD type DEVICE SIZE NODE NAME
lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。