V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhoudaiyu
V2EX  ›  Linux

Linux 系统如果把磁盘写满了继续写会怎么样?

  •  
  •   zhoudaiyu ·
    PRO
    · Apr 5, 2020 via iPhone · 7161 views
    This topic created in 2213 days ago, the information mentioned may be changed or developed.
    昨天发生了一件事: celery 写的 worker 日志把磁盘写满了,然后 CPU 突然拉到 100,今早发现所有任务都积压了....我想知道写满了磁盘后继续写文件系统会发生啥?
    21 replies    2020-04-06 17:08:49 +08:00
    mritd
        1
    mritd  
       Apr 5, 2020 via iPhone
    写不进去
    zhoudaiyu
        2
    zhoudaiyu  
    OP
    PRO
       Apr 5, 2020 via iPhone
    @mritd 那把要写的东西扔到哪里了?/dev/null?
    inwar
        3
    inwar  
       Apr 5, 2020 via Android
    抛 io 异常了吧
    lisonfan
        4
    lisonfan  
       Apr 5, 2020
    我记得好像是抛异常
    zhoudaiyu
        5
    zhoudaiyu  
    OP
    PRO
       Apr 5, 2020 via iPhone
    @inwar 没来得及看日志直接清掉了 着急恢复功能 有可能抛异常吧
    bruce2000
        6
    bruce2000  
       Apr 5, 2020
    我遇到过,SSH 都无法远程登陆,只能接显示器删点东西后才能登陆
    zhoudaiyu
        7
    zhoudaiyu  
    OP
    PRO
       Apr 5, 2020 via iPhone
    @bruce2000 这个倒是能登...可能是因为只是 /opt 满了...
    wdlth
        8
    wdlth  
       Apr 5, 2020
    会导致很多程序异常,甚至是系统服务,所以一般把应用数据放在其他挂载点。
    laminux29
        9
    laminux29  
       Apr 5, 2020
    思考一个问题,如果是你操作系统,向用户提供一个写数据的接口,你会如何设计?
    julyclyde
        10
    julyclyde  
       Apr 5, 2020
    为什么 100%呢?既然都没事可干了
    pilgrim_kevin
        11
    pilgrim_kevin  
       Apr 5, 2020
    可以自己模拟一下,就知道会发生什么了:cat /dev/zero > zero.fill;sync;
    wanguorui123
        12
    wanguorui123  
       Apr 5, 2020 via iPhone
    崩溃
    MilkShake
        13
    MilkShake  
       Apr 5, 2020
    写不进去,会导致你的应用无法正常允许。
    W1angMh
        14
    W1angMh  
       Apr 5, 2020
    抛异常 服务全挂
    oahebky
        15
    oahebky  
       Apr 5, 2020
    只要涉及(依赖)读写文件(包括打开文件)的行为都不能用。
    其它不涉及(依赖)的都可以用。
    就这么回事。
    zhoudaiyu
        16
    zhoudaiyu  
    OP
    PRO
       Apr 5, 2020 via iPhone
    @oahebky 为啥 CPU 被拉满了 是一直在尝试写么?
    feelinglucky
        17
    feelinglucky  
       Apr 5, 2020   ❤️ 4
    你们还是太年轻呀,从业那么多年竟然没有被日志撑暴过硬盘…🤣
    MOONLIGHTT
        18
    MOONLIGHTT  
       Apr 5, 2020
    msg7086
        19
    msg7086  
       Apr 6, 2020
    写文件用的是 write 调用。
    write 调用在磁盘满了的时候会报 ENOSPC 。

    ENOSPC The device containing the file referred to by fd has no room for the data.

    有一些程序会在磁盘满了的时候继续重试。
    RickyC
        20
    RickyC  
       Apr 6, 2020
    比如 MySQL 可能会崩溃不能启动
    oahebky
        21
    oahebky  
       Apr 6, 2020
    @zhoudaiyu 不会直接影响到 CPU 。你可以当做整个系统都能正常使用。就像我说的,除了涉及(依赖)读写文件的行文不能用。
    比如说打开一个新的 ssh 链接,这是要涉及到不止一个文件打开读取的,所以就不能用。

    但是你在已经打开过的 ssh 链接中执行 ls,rm 操作等等,是可以正常使用的。

    但是 cpu 一般情况下会是正常的,除非有某个进程因为无法读写(包括打开)文件,然后里面什么代码逻辑写的不对,会死循环占用 cpu,这样是会占满 cpu 的,这种情况是有可能发生的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1015 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 19:05 · PVG 03:05 · LAX 12:05 · JFK 15:05
    ♥ Do have faith in what you're doing.