V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhoudaiyu
V2EX  ›  Linux

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

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

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

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

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

    但是 cpu 一般情况下会是正常的,除非有某个进程因为无法读写(包括打开)文件,然后里面什么代码逻辑写的不对,会死循环占用 cpu,这样是会占满 cpu 的,这种情况是有可能发生的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2632 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:48 · PVG 23:48 · LAX 07:48 · JFK 10:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.