Linux中限制文件夹严格不超过指定容量(如500MB)须用镜像文件挂载:1.用dd创建500MB空白镜像;2.通过losetup绑定到loop设备;3.格式化为ext4;4.挂载至目标目录;5.写入超限时立即报“No space left on device”。

要让某个文件夹严格占用不超过指定容量(比如500MB),不能靠改权限或配额策略临时应付,必须用挂载隔离的方式固化限制,否则写入操作不会被拦截。
用镜像文件挂载实现硬性大小限制
这一步创建的是一个“虚拟磁盘”,它的物理尺寸就是你设定的上限,挂载后所有写入都受限于这个镜像容量,超出立即报错。
第一步:生成指定大小的空白镜像文件
执行 dd if=/dev/zero of=/opt/limited.img bs=1M count=500,生成一个500MB的全零镜像。注意不要用 /dev/urandom,它会显著拖慢生成速度且无必要。
第二步:绑定镜像到 loop 设备
运行 losetup -f 查看可用 loop 设备(如 /dev/loop3),再执行 losetup /dev/loop3 /opt/limited.img。若提示 Device is busy,说明该 loop 已被占用,换下一个编号即可。
第三步:格式化为 ext4 文件系统
执行 mkfs.ext4 /dev/loop3。这一步不可跳过,未格式化的设备无法挂载;也不建议用 xfs,ext4 在小容量镜像上更稳定、元数据开销更低。
第四步:创建挂载点并挂载
先运行 mkdir -p /srv/limited 建立目录,再执行 mount -t ext4 /dev/loop3 /srv/limited。此时 /srv/limited 就是一个严格 500MB 上限的文件夹。
第五步:验证限制是否生效
进入该目录,执行 dd if=/dev/zero of=test.bin bs=1M count=600,系统会报错 No space left on device 并在写入约500MB后中断——这说明限制已起效。
卸载与清理操作
当不再需要该限制时,必须按顺序执行以下两步,否则会导致设备残留或无法删除镜像。
先卸载挂载点:umount /srv/limited。如果提示 target is busy,检查是否有进程正在该目录下工作(如 shell 当前路径、rsync 进程等),用 lsof +D /srv/limited 定位并终止。
再解绑 loop 设备:losetup -d /dev/loop3。这一步失败通常是因为上一步卸载不彻底,务必确认 mount | grep limited 无输出后再执行。
最后可安全删除镜像文件:rm -f /opt/limited.img。【删除前请确认该镜像未被其他挂载点复用】
替代方案:用磁盘配额控制用户级目录
如果你要限制的是某个用户的主目录(如 /home/alice)总用量,而不是任意路径下的单个文件夹,配额机制更合适,它按用户统计、支持软硬双限、还能控文件数量。
方法一:启用分区级配额支持
编辑 /etc/fstab,在目标分区(如 /home 所在行)的挂载选项中加入 usrquota,例如将 defaults 改为 defaults,usrquota,保存后执行 mount -o remount /home。
方法二:初始化配额数据库
运行 quotacheck -cug /home,会在 /home 根目录生成 aquota.user 文件。若提示 Cannot stat() mounted device,说明 fstab 修改未生效或 remount 失败,需回头检查。
方法三:设置用户硬限制
执行 setquota -u alice 524288 524288 0 0 /home,表示对用户 alice 设置 512MB 硬限制(单位 KB),软限制也为同值即不允许任何宽限期超限。


















