You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Debian 12中正确设置磁盘空间预留以避免系统因磁盘耗尽变砖

如何在Debian 12中正确设置磁盘空间预留以避免系统因磁盘耗尽变砖

首先得搞清楚你之前遇到的问题:用tune2fs -m5设置的5%预留空间,是专门留给root用户使用的——普通用户根本写不到这块区域,但如果是root用户自己把磁盘(包括预留区)占满(比如你用root跑的dd命令),那系统自然还是会挂掉,因为预留区本来就是给root留的应急空间,root当然有权限用它。

那要彻底解决“磁盘被写满导致系统变砖”的问题,需要结合全局预留+用户配额+额外防护三方面来做,下面一步步讲:

1. 正确配置tune2fs的root预留空间

这个命令本身是对的,但你得明白它的作用边界:

  • 检查当前预留设置:执行tune2fs -l /dev/sda1 | grep -E 'Reserved block (percentage|count)',可以看到当前的预留百分比和具体块数。
  • 合理调整预留比例:对于大磁盘(比如1TB以上),5%的预留可能太大(50GB),可以改成2%甚至1%;如果是小磁盘,保留5%更稳妥。命令格式还是:
    /sbin/tune2fs -m2 /dev/sda1
    
    记住:这块空间只有root能访问,用来在普通用户把磁盘占满时,root还能登录、清理文件、恢复系统。但root自己如果硬要把这块也用掉,那谁也救不了。

2. 给普通用户设置磁盘配额(Quota)

要阻止普通用户把可用空间(非预留区)写满,就得用磁盘配额工具,它能给每个用户/用户组设置硬限制:

步骤:

  • 先安装配额工具:
    apt update && apt install quota
    
  • 编辑/etc/fstab,给你的根分区(/dev/sda1)的挂载参数加上usrquota,grpquota,比如原来的行可能是:
    /dev/sda1 / ext4 defaults 0 1
    
    修改后变成:
    /dev/sda1 / ext4 defaults,usrquota,grpquota 0 1
    
  • 重新挂载根分区(或者直接重启系统):
    mount -o remount /
    
  • 初始化配额文件:
    quotacheck -cug /
    
  • 启用配额:
    quotaon /
    
  • 设置用户硬限制:比如给你的用户nexkex设置最大可用空间为90GB(1块=1KB,所以90GB=9010241024=94371840块),执行:
    edquota -u nexkex
    
    在弹出的编辑器里,修改blocks对应的hard值(软限制soft可以设成85GB,达到时会给用户发警告),示例:
    Disk quotas for user nexkex (uid 1000):
      Filesystem                   blocks       soft       hard     inodes     soft     hard
      /dev/sda1                    123456    89128960    94371840      12345        0        0
    
    保存退出后,这个用户就再也写不到超过90GB的空间了。

3. 额外的防护措施

  • 监控磁盘使用率:设置定时任务(cron),当磁盘使用率超过85%时自动发警告邮件。比如创建一个脚本disk_monitor.sh:
    #!/bin/bash
    USE=$(df -h / | awk '{print $5}' | tail -n1 | sed 's/%//')
    if [ $USE -ge 85 ]; then
        echo "Root partition is $USE% full!" | mail -s "Disk Space Alert" your_email@example.com
    fi
    
    然后给脚本加执行权限,加到cron里每天检查一次:
    chmod +x disk_monitor.sh
    crontab -e
    # 添加一行:
    0 8 * * * /path/to/disk_monitor.sh
    
  • 临时文件自动清理:把/tmp挂载成tmpfs(内存文件系统),重启后临时文件自动消失,避免/tmp占满磁盘。在/etc/fstab里加一行:
    tmpfs /tmp tmpfs defaults,size=4G 0 0
    
    这里的size=4G可以根据你的内存大小调整,比如16GB内存可以设成8G。
  • 避免root误操作:测试磁盘空间时,不要真的用dd写满整个磁盘,比如可以限制dd的输出大小:dd if=/dev/zero of=testfile bs=1G count=10(只写10GB的测试文件)。

这样一套组合拳下来,既能保证root有应急空间,又能限制普通用户的磁盘使用,再加上监控和临时文件清理,基本就能避免系统因磁盘耗尽变砖的问题了。

备注:内容来源于stack exchange,提问作者nexkex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:43:01