V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kisshere
V2EX  ›  程序员

Linux 根文件夹满了,但找不到根源问题在哪?

  •  
  •   kisshere · 2022-12-27 11:56:28 +08:00 · 4499 次点击
    这是一个创建于 731 天前的主题,其中的信息可能已经有所发展或是发生改变。
    cd /
    df -h
    
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/md2         25G   24G     0 100% /
    

    但是根文件夹下显示所有文件夹(比如 usr 、var 、tmp 等文件夹)大小之和为 10G ,根本没用到 24G

    删了一个 2G 的日志文件,有趣的来了,根文件夹所有文件夹大小之和变为 8G ,Avail 立马变为 2G ,然后 1.8G ,1.6G ,1.5G......不断缩小,直至为 0 。但根文件夹所有大小之和还是 8G

    这是怎么造成的?怎么排查?

    43 条回复    2022-12-29 12:00:54 +08:00
    angryPHP
        1
    angryPHP  
       2022-12-27 11:58:43 +08:00
    du 命令
    kisshere
        2
    kisshere  
    OP
       2022-12-27 12:04:53 +08:00 via Android
    @angryPHP 命令全部?怎么排查?
    yinheli
        3
    yinheli  
       2022-12-27 12:05:54 +08:00   ❤️ 1
    lsof -nP | grep 'deleted'
    yinheli
        4
    yinheli  
       2022-12-27 12:06:14 +08:00
    看看有没有删掉的,但是句柄还在的文件
    aaa5838769
        5
    aaa5838769  
       2022-12-27 12:06:26 +08:00
    用 du 命令 从根目录开始往下找到是那个目录占用最大。
    chrawsl
        6
    chrawsl  
       2022-12-27 12:06:31 +08:00
    du / -h -d1

    -d1 代表递归深度
    ooxxcc
        7
    ooxxcc  
       2022-12-27 12:09:33 +08:00   ❤️ 2
    ncdu
    kisshere
        8
    kisshere  
    OP
       2022-12-27 12:15:03 +08:00
    @aaa5838769
    @chrawsl 我把根目录下面所有文件夹都计算过了的,总共只占用了 8G ,但是还是显示 Used 是 24G
    idblife
        9
    idblife  
       2022-12-27 12:20:30 +08:00
    yum install ncdu
    不用谢
    zzfra
        10
    zzfra  
       2022-12-27 12:23:22 +08:00
    我不负责地猜测一下,docker 导致的问题
    AoEiuV020CN
        11
    AoEiuV020CN  
       2022-12-27 12:26:39 +08:00
    发现 Avail 在变小就应该马上切 u 盘系统再考虑怎么排查,
    css3
        12
    css3  
       2022-12-27 12:32:54 +08:00
    看下回收站是否清空
    nbweb
        13
    nbweb  
       2022-12-27 12:35:40 +08:00 via Android
    先把 md2 umount 了再看看容量。
    troilus
        14
    troilus  
       2022-12-27 12:38:12 +08:00
    大概率是 docker ,前几天同样问题
    lerry
        15
    lerry  
       2022-12-27 12:51:08 +08:00
    @yinheli #4 我遇到过,重启后好了
    ladypxy
        16
    ladypxy  
       2022-12-27 12:54:25 +08:00 via iPhone
    reboot first
    xyjincan
        17
    xyjincan  
       2022-12-27 13:07:58 +08:00
    删除没有关闭的文件,重启系统 or 进程就好了

    建议使用 echo > xxx.log 删除日志文件
    defunct9
        18
    defunct9  
       2022-12-27 13:12:37 +08:00
    lsof +L1
    villivateur
        19
    villivateur  
       2022-12-27 13:17:03 +08:00   ❤️ 8
    @defunct9 这次居然没让开 ssh ?
    dd991
        20
    dd991  
       2022-12-27 13:17:06 +08:00
    temp 文件夹
    limbo0
        21
    limbo0  
       2022-12-27 13:30:07 +08:00
    du -sh -- * | sort -rh
    Jirajine
        22
    Jirajine  
       2022-12-27 13:35:22 +08:00
    下个 gdu 看看
    gamexg
        23
    gamexg  
       2022-12-27 13:42:56 +08:00
    linux 下正在打开的文件也可以删除,但是这个删除只是 ls 不显示,实际这个文件还是存在,并且占用空间。直到使用这个文件程序释放这个文件,文件才被真的删除,空间才会被释放。

    所以最简单的办法,重启下再看空间占用。
    labnotok
        24
    labnotok  
       2022-12-27 13:45:12 +08:00 via Android
    ncdu -x
    McreeWu
        25
    McreeWu  
       2022-12-27 13:50:35 +08:00
    一般是 deleted 文件导致的,如果找不到的话可以看看磁盘预留空间
    wjx0912
        26
    wjx0912  
       2022-12-27 13:53:16 +08:00
    github search: ncdu
    V2April
        27
    V2April  
       2022-12-27 13:58:40 +08:00
    我遇到过一次这个,是 onlyoffice 的日志文件
    stephenyin
        28
    stephenyin  
       2022-12-27 14:05:07 +08:00
    找 /home/xxx 下大于 500M 的文件:find /home/xxx -size +500m -name -type f
    stephenyin
        29
    stephenyin  
       2022-12-27 14:05:41 +08:00
    @stephenyin #28 find /home/xxx -size +500m -type f
    stephenyin
        30
    stephenyin  
       2022-12-27 14:07:14 +08:00
    @stephenyin #29 🤣 find /home/xxx -size +500M -type f
    DingJZ
        31
    DingJZ  
       2022-12-27 14:29:49 +08:00
    遇到过一次 Inodes 的问题,df -i 查看 Inodes 占用,如果是的话清 /tmp
    julyclyde
        32
    julyclyde  
       2022-12-27 15:01:58 +08:00
    这么经典的故障

    丢失的空间可能都是类似于你“删除了一个日志”这类操作导致的
    pingpp00
        33
    pingpp00  
       2022-12-27 15:24:04 +08:00
    在根目录下执行 du -shx * ,然后依次排查
    QKgf555H87Fp0cth
        34
    QKgf555H87Fp0cth  
       2022-12-27 15:43:43 +08:00
    sudo du -hsx * | sort -rh
    gam2046
        35
    gam2046  
       2022-12-27 15:46:51 +08:00
    是某个应用占用了个大文件,但是你已经通过 rm 把这个文件删掉,同时程序并未释放此文件的句柄,所以会造成你这种情况。因为句柄被占用,文件在内核中并未真正释放。

    如果记得是哪个程序占用的大文件,重启这个程序即可。
    如果不记得是哪个程序,重启系统即可。
    JohnBull
        36
    JohnBull  
       2022-12-27 15:58:11 +08:00
    肯定是有个超大的匿名文件
    zooo
        37
    zooo  
       2022-12-27 16:09:55 +08:00
    ncdu 确实好用些
    lelandsu
        38
    lelandsu  
       2022-12-27 20:50:48 +08:00 via iPhone
    ncdu -x /
    还找不到问题再来讨论
    xwayway
        39
    xwayway  
       2022-12-28 11:14:55 +08:00
    楼上各位大哥说得都很在理,我就想蹲一个结果
    gearfox
        40
    gearfox  
       2022-12-28 14:22:48 +08:00
    @lelandsu 这样应该直接就解决了,哈哈哈
    ninvfeng2020
        41
    ninvfeng2020  
       2022-12-28 17:07:04 +08:00
    1. 执行 du -sh / 看看哪个文件夹最大
    2. 然后进最大的文件夹执行 du -sh ./*
    重复执行第二步就能找到最大的文件在哪
    如果删除后空间没释放就重启一下对应的程序
    julyclyde
        42
    julyclyde  
       2022-12-29 09:07:58 +08:00
    @ninvfeng2020 你这个和 OP 错的一样啊
    zhuanggu
        43
    zhuanggu  
       2022-12-29 12:00:54 +08:00
    不是文件夹大啊,而是根目录下有隐藏文件。ls -a
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   991 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:39 · PVG 03:39 · LAX 11:39 · JFK 14:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.