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

Linux下Python在特定目录创建长文件名文件报错:设备无剩余空间

问题排查与解决方案

你遇到的是ext4文件系统下,单个目录存满大量文件时,长文件名创建失败但短文件名/上级目录长文件名可正常创建的异常情况,以下是具体排查方向和解决办法:


排查步骤

  1. 排除Python环境干扰
    直接用系统命令手动创建目标长文件名文件,验证是否是Python的问题:

    touch /mnt/disks/hdd/chunk/UCHLqIOMPk20w-6cFgkA90jw_id_V_YudpRpUpY_180.txt
    

    如果同样报错,说明问题出在文件系统而非Python;如果能创建,再检查IPython的open函数是否有自定义限制。

  2. 确认文件名/路径长度合规
    ext4单文件名最大支持255字节,系统路径最大支持4096字节,用命令核实:

    # 检查文件名字节长度
    echo -n "UCHLqIOMPk20w-6cFgkA90jw_id_V_YudpRpUpY_180.txt" | wc -c
    # 检查完整路径字节长度
    echo -n "/mnt/disks/hdd/chunk/UCHLqIOMPk20w-6cFgkA90jw_id_V_YudpRpUpY_180.txt" | wc -c
    

    只要数值分别小于255和4096,就不是长度限制导致的问题。

  3. 检查目录元数据占用情况
    单个目录下文件极多时,目录自身的元数据块(存储所有文件名条目)会被大量占用,即使磁盘剩余空间和inode充足,也可能出现目录元数据耗尽的情况。查看目录本身的大小:

    du -sh /mnt/disks/hdd/chunk
    

    对比上级目录/mnt/disks/hdd的大小,如果chunk目录大小异常大,说明是单目录文件过多导致元数据块过载。

  4. 检查ext4目录索引与预留空间

    • 查看ext4是否启用了目录索引(dir_index,默认启用):
      tune2fs -l /dev/你的磁盘设备名 | grep "Dir Index"
      
      目录索引在文件极多时可能出现哈希冲突或索引块分配异常,导致长文件名无法写入。
    • 检查磁盘预留空间(默认root预留5%):
      tune2fs -l /dev/你的磁盘设备名 | grep -E "Reserved block count|Reserved blocks uid"
      
      如果预留空间被占满,普通用户可能无法写入新的元数据块,但短文件名因占用空间小可能仍能写入。

解决方案

  1. 拆分目录(最稳妥)
    将chunk目录下的文件按规则拆分到多个子目录(比如按文件名首字符、哈希前缀分目录),减少单个目录的文件数量,从根本上解决单目录元数据过载的问题。

  2. 重置目录索引(谨慎操作)
    如果确认是dir_index导致的问题,可尝试禁用后重新启用目录索引(需卸载磁盘,操作前务必备份数据):

    # 卸载磁盘
    umount /mnt/disks/hdd
    # 禁用目录索引
    tune2fs -O ^dir_index /dev/你的磁盘设备名
    # 重新启用目录索引
    tune2fs -O dir_index /dev/你的磁盘设备名
    # 重新挂载磁盘
    mount /mnt/disks/hdd
    
  3. 调整磁盘预留空间
    如果是预留空间不足,可适当减少root预留的磁盘比例(比如改为1%):

    tune2fs -m 1 /dev/你的磁盘设备名
    

内容的提问来源于stack exchange,提问作者menon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:01:22