通过Slurm提交R脚本作业遇磁盘空间不足错误求助
解决Slurm运行R脚本磁盘空间不足的方案
1. 更换输出目录
- 先执行
df -h查看当前输出目录的剩余空间,如果当前目录空间不足,直接把输出文件写到集群的大容量分区(比如scratch目录)。修改R脚本里的输出路径:write.table(models_df, file = paste0("/path/to/your/scratch/", genes_union[k], ".txt"), ...) - 提交Slurm作业时,也可以通过
--workdir=/path/to/scratch指定作业的工作目录,避免默认用提交目录的空间。
2. 管控临时文件
- R默认会在系统临时目录(如
/tmp)生成临时文件,这个目录通常空间有限。在R脚本开头指定自定义临时目录:Sys.setenv(TMPDIR = "/path/to/large/tmp") - 脚本中用完的中间数据对象,及时用
rm(对象名); gc()清理,释放内存和临时存储资源。
3. 优化输出文件策略
- 2150个单独的txt文件会占用大量inode(部分集群inode不足也会触发“空间不足”报错),建议合并输出:比如把所有基因的结果汇总到一个文件,或者每100个基因生成一个合并文件。
- 改用更紧凑的存储格式,比如R的
.rds或.feather,比纯文本txt节省空间,后续需要再转成txt即可:# 保存为rds格式 saveRDS(models_df, file = paste0("/path/to/scratch/", genes_union[k], ".rds"))
4. 检查存储配额
- 执行
quota命令查看个人存储配额是否用尽,若配额不足,清理名下的旧文件,或联系集群管理员调整配额。部分集群会给单作业分配临时存储限额,可通过Slurm文档或管理员确认。
5. 优化任务拆分的存储分配
- 之前拆分任务无效,可能是所有小任务仍往同一目录输出导致空间累积。可以按批次创建子目录分散输出:
# 每50个基因划分一个批次目录 batch_num <- floor((k-1)/50) batch_dir <- paste0("/path/to/scratch/batch_", batch_num) dir.create(batch_dir, recursive = TRUE, showWarnings = FALSE) write.table(models_df, file = paste0(batch_dir, "/", genes_union[k], ".txt"), ...)
内容的提问来源于stack exchange,提问作者rheabedi1
相关产品推荐
相关产品推荐

