
# 常见的磁盘空间不足的问题和解决办法
该章节用于统一整体所有的常见的磁盘空间不足的问题和解决办法。减少相关问题文档的重复内容。
#### 问题现象
训练过程中复制数据/代码/模型时出现如下报错：
图1错误日志   
![](https://support.huaweicloud.com/trouble-modelarts/figure/zh-cn_image_0000001473387321.png "点击放大")
#### 原因分析
出现该问题的可能原因如下：
- 本地数据、文件保存将"/cache"目录空间用完。
- 数据处理过程中对数据进行解压，导致数据大小膨胀，将"/cache"目录空间用完。
- 数据未保存至/cache目录或者/home/ma-user/modelarts/目录，导致数据占满系统目录。系统目录仅支持系统功能基本运行，无法支持大数据存储。
- 部分训练任务会在训练过程中生成checkpoint文件，并进行更新。如更新过程中，未删除历史的checkpoint文件，会导致/cache目录逐步被用完。
- 实际存储空间足够，却依旧报错"No Space left on device"。可能是inode不足，或者是触发操作系统的文件索引缓存问题，导致操作系统无法创建文件，造成用户磁盘占满。也可能是用户单目录下写入文件过多，同时每个文件名还字段超长，超过欧拉系统的限制。
  ![](https://support.huaweicloud.com/trouble-modelarts/public_sys-resources/note_3.0-zh-cn.png)
  触发条件和下面的因素有关：
  - 文件名越长，文件数量的上限越小。
  
  - blocksize越小，文件数量的上限越小。 blocksize系统默认为4096B，总共有三种大小：1024B、2048B、4096B。
  
  - 创建文件越快，越容易触发（机制大概是：有一个缓存，这块大小和上面的1和2有关，目录下文件数量比较大时会启动，使用方式是边用边释放）。
    
- 程序运行过程中，产生了core文件，core文件占满了"/"根目录空间。
 
#### 处理方法
1. 排查数据集大小、数据集解压后的大小，checkpoint保存文件大小，是否占满了磁盘空间。具体规格的空间大小可参见[训练环境中不同规格资源"/cache"目录的大小](https://support.huaweicloud.com/modelarts_faq/modelarts_05_0090.html)
2. 如数据大小已超过/cache目录大小，则可以考虑通过SFS来额外挂载数据盘进行扩容。
3. 将数据和checkpoint保存在/cache目录或者/home/ma-user/modelarts/目录。
4. 检查checkpoint相关逻辑，保证历史checkpoint不会不断积压，导致/cache目录用完。
5. 如文件大小小于/cache目录大小并且文件数量超过50w，则考虑为inode不足或者触发了操作系统的文件索引相关问题。需要：
   - 分目录处理，减少单个目录文件量。
   
   - 减慢创建文件的速度。如数据解压过程中，sleep 5s后再进行下一个数据的解压。
    
6. 如果训练作业的工作目录下有core文件生成，可以在启动脚本最前面加上如下代码，来关闭core文件产生。并推荐先在开发环境中进行代码调试。
   ```
   import os
   os.system("ulimit -c 0")
   ```
   
7. 控制单个目录下的最大文件数在约5,200,000 个文件以下，同时考虑到达这个上限的50%的时候性能就会显著下降，所以推荐实际使用上限为200W-250W。
 
#### 建议与总结
在创建训练作业前，推荐您先使用ModelArts开发环境调试训练代码，避免代码迁移过程中的错误。
- 直接使用线上notebook环境调试请参考[使用JupyterLab开发模型](https://support.huaweicloud.com/devtool-modelarts/devtool-modelarts_0012.html)。
- 配置本地IDE（Pycharm或者VSCode）连接云上环境调试请参考[使用本地IDE开发模型](https://support.huaweicloud.com/devtool-modelarts/devtool-modelarts_0019.html)。
 
