zoukankan      html  css  js  c++  java
  • linux 删除文件空间未释放问题

    现象:我们测试环境上,导出数据文件时,由于作业报错,重复导出,空间使用到达100%,按理说,导出的文件时在相同的路径下,文件名也是一致的,会自动替换。

    那么之前导出的文件会被删除,问题就出现在删除这一步。

    在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink).然而假设文件是被
    打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用。而我删除的是作业正在运行的导出文件
    删除的时候文件应该正在被使用

    解决办法:

    lsof |grep delete

    gds   10099    use     15w    REG   253,0 6616432640      788101  /home/use/share/srctab50/ft_kr_pms_pms_ca_acct_detail_in_elk_w.dat.0(deleted)

    一种方法是kill掉相应的进程,或者停掉使用这个文件的应用,让os自己主动回收磁盘空间

    我这个环境有非常多进程在使用的这个文件,停掉进程有点麻烦,再有就是风险非常大

     

    当linux打开一个文件的时候,Linux内核会为每个进程在/proc/ 『/proc/nnnn/fd/文件夹(nnnn为pid)』建立一个以其pid
    为名的文件夹用来保存进程的相关信息,而其子文件夹fd保存的是该进程打开的全部文件的fd(fd:file descriptor)。

    kill进程是通过截断proc文件系统中的文件能够强制要求系统回收分配给正在使用的的文件。
    这是一项高级技术,仅到管理员确定不会对执行中的进程造成影响时使用。应用程序对这样的方
    式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题

    把进程删除:

    kill -9 10099 

    查看空间使用率就将下来了

     

    学习下lsof命令

     

    lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,不论什么事物都是文件,
    设备是文件,文件夹是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。

    lsof是linux最常常使用的命令之中的一个,通常的输出格式为:

     

    引用
    COMMAND     PID   USER   FD      TYPE     DEVICE     SIZE       NODE NAME

     

    常见包含例如以下几个字段:许多其他的可见manual。

    1、COMMAND
    默认以9个字符长度显示的命令名称。可使用+c參数指定显示的宽度,若+c后跟的參数为零,则显示命令的全名
    2、PID:进程的ID号
    3、PPID
    父进程的IP号,默认不显示,当使用-R參数可打开。
    4、PGID
    进程组的ID编号,默认也不会显示,当使用-g參数时可打开。
    5、USER
    命令的执行UID或系统中登陆的username称。默认显示为username,当使用-l參数时,可显示UID。
    6、FD
    是文件的File Descriptor number,或者例如以下的内容:
    (这里非常难翻译相应的意思,保留英文)

     

    引用
    cwd  current working directory;
    Lnn  library references (AIX);
    jld  jail directory (FreeBSD);
    ltx  shared library text (code and data);
    Mxx  hex memory-mapped type number xx.
    m86  DOS Merge mapped file;
    mem  memory-mapped file;
    mmap memory-mapped device;
    pd   parent directory;
    rtd  root directory;
    tr   kernel trace file (OpenBSD);
    txt  program text (code and data);
    v86  VP/ix mapped file;

     

     

    文件的File Descriptor number显示模式有:

     

    引用
    r for read access;
    w for write access;
    u for read and write access;
    N for a Solaris NFS lock of unknown type;
    r for read lock on part of the file;
    R for a read lock on the entire file;
    w for a write lock on part of the file;
    W for a write lock on the entire file;
    u for a read and write lock of any length;
    U for a lock of unknown type;
    x for an SCO OpenServer Xenix lock on part  of the file;
    X  for an SCO OpenServer Xenix lock on the entire file;
    space if there is no lock.

     

     

    7、TYPE

    引用
    IPv4 IPv4的包;
    IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;
    DIR 文件夹
    LINK 链接文件

    详情请看manual中许多其他的凝视。

     

    8、DEVICE
    使用character special、block special表示的设备号
    9、SIZE
    文件的大小,假设不能用大小表示的,会留空。使用-s參数控制。
    10、NODE
    本地文件的node码,或者协议,如TCP等
    11、NAME
    挂载点和文件的全路径(链接会被解析为实际路径),或者连接两方的地址和端口、状态等

  • 相关阅读:
    第二十一章流 1流的操作 简单
    第二十章友元类与嵌套类 1友元类 简单
    第十九章 19 利用私有继承来实现代码重用 简单
    第二十章友元类与嵌套类 2嵌套类 简单
    第十九章 8链表类Node 简单
    第二十一章流 3用cin输入 简单
    第十九章 10 图书 药品管理系统 简单
    第十九章 11图书 药品管理系统 简单
    第二十一章流 4文件的输入和输出 简单
    第十九章 12 什么时候使用私有继承,什么时候使用包含 简单
  • 原文地址:https://www.cnblogs.com/hello-wei/p/10641316.html
Copyright © 2011-2022 走看看