OSError: [Errno 16] Device or resource busy: ‘.nfs*‘报错解决办法

目录

  • 1 项目场景&问题描述:
  • 2 原因分析:
    • 2.1 问题背景:
  • 3 解决方案:
    • 3.1 创建存放临时文件的目录
    • 3.2 使用该目录
      • 3.2.1 设置环境变量 TMPDIR
      • 3.2.2 运行时设置(推荐)
      • 3.2.3 代码中设置
  • 4 总结


1 项目场景&问题描述:

Linux下在加载DataLoader中报错

Testing DataLoader 0: 100%|██████████| 21/21 [00:04<00:00,  5.06it/s]Traceback (most recent call last):File "/root/miniconda3/envs/pli/lib/python3.8/multiprocessing/util.py", line 300, in _run_finalizersfinalizer()File "/root/miniconda3/envs/pli/lib/python3.8/multiprocessing/util.py", line 224, in __call__res = self._callback(*self._args, **self._kwargs)File "/root/miniconda3/envs/pli/lib/python3.8/multiprocessing/util.py", line 133, in _remove_temp_dirrmtree(tempdir)File "/root/miniconda3/envs/pli/lib/python3.8/shutil.py", line 718, in rmtree_rmtree_safe_fd(fd, path, onerror)File "/root/miniconda3/envs/pli/lib/python3.8/shutil.py", line 675, in _rmtree_safe_fdonerror(os.unlink, fullname, sys.exc_info())File "/root/miniconda3/envs/pli/lib/python3.8/shutil.py", line 673, in _rmtree_safe_fdos.unlink(entry.name, dir_fd=topfd)
OSError: [Errno 16] Device or resource busy: '.nfs05fc000000a862ca0000099b'
Traceback (most recent call last):File "/root/miniconda3/envs/pli/lib/python3.8/multiprocessing/util.py", line 300, in _run_finalizersfinalizer()File "/root/miniconda3/envs/pli/lib/python3.8/multiprocessing/util.py", line 224, in __call__res = self._callback(*self._args, **self._kwargs)File "/root/miniconda3/envs/pli/lib/python3.8/multiprocessing/util.py", line 133, in _remove_temp_dirrmtree(tempdir)File "/root/miniconda3/envs/pli/lib/python3.8/shutil.py", line 718, in rmtree_rmtree_safe_fd(fd, path, onerror)File "/root/miniconda3/envs/pli/lib/python3.8/shutil.py", line 675, in _rmtree_safe_fdonerror(os.unlink, fullname, sys.exc_info())File "/root/miniconda3/envs/pli/lib/python3.8/shutil.py", line 673, in _rmtree_safe_fdos.unlink(entry.name, dir_fd=topfd)
OSError: [Errno 16] Device or resource busy: '.nfs65fc000000a862ca00000999'

2 原因分析:

与在 Linux 系统上使用无状态的文件服务器(如 NFS)时遇到的文件访问和临时文件处理有关。

2.1 问题背景:

当文件被一个进程使用时,Linux 在删除该文件时不会立即从磁盘上删除,而是将其重命名为一个以 .nfs 开头的临时文件(例如 .nfs0000)。这意味着,其他进程在文件被删除时仍然可以继续访问这个文件。
迁移文件时,将整个文件迁移到了文件服务器上,临时文件也存储在了这个无状态的文件服务器上。当一个进程在尝试删除这些临时文件时,由于其他进程仍在使用它们,就会引发 OSError: [Errno 16] Device or resource busy 错误。


3 解决方案:

3.1 创建存放临时文件的目录

mkdir -m 1777 /你要存放的路径/tmp

创建了一个目录,权限设为 1777,意味着任何用户都可以读、写、执行该目录。

3.2 使用该目录

3.2.1 设置环境变量 TMPDIR

可以通过设置环境变量 TMPDIR 来指定临时文件的目录。常见的环境变量包括:

  • TMPDIR
  • TEMP
  • TMP
    通过这些环境变量,系统或程序会将临时文件写入你指定的目录。具体设置可以通过在命令行运行以下命令:
export TMPDIR=/路径/tmp

3.2.2 运行时设置(推荐)

或者在启动容器时直接设置这个变量。例如,在运行 PyTorch 的程序时,你可以在命令行中运行:

TMPDIR=/路径/tmp python your_script.py

这样,程序中的临时文件就会被写入到 /路径/tmp。

推荐默认后台运行记录log,记得先创建与main.py同级目录的log文件夹

nohup TMPDIR=/路径/tmp python main.py > ./log/running.log &

3.2.3 代码中设置

如果你在代码中想要控制临时文件的路径,可以通过 Python 的 tempfile 模块来设置。例如,使用 tempfile 时可以显式指定 dir 参数:

import tempfile
# 创建一个临时文件,临时文件存放在指定的目录中
with tempfile.TemporaryDirectory(dir="/路径/tmp") as tmpdirname:print('Temporary directory created at', tmpdirname)

对于 PyTorch 中的 DataLoader,可以尝试设置临时路径到新目录:

import os
os.environ['TMPDIR'] = '/路径/tmp'

这样,PyTorch 生成的临时文件也会放置在你创建的新目录下,而不会出现 NFS 的问题。

4 总结

我的设置的临时文件目录是/dataNfs/tmp,这样运行的临时文件就在这里了。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149745.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法

本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;搭载了瑞芯微RK3566芯片&#xff0c;类树莓派设计&#xff0c;是Laval官方社区主荐的一款鸿蒙开发主板。 一、安装输入法并查看输入…

CSS05-Emment语法

Emmet语法的前身是Zen coding&#xff0c;它使用缩写&#xff0c;来提高html/css的编写速度&#xff0c;Vscode内部已经集成该语法。 作用&#xff1a; 1.快速生成HTML结构语法 2.快速生成CSS样式语法

linux 安装 tomcat9、java环境

一、安装 Java环境 1. 下载文件 https://repo.huaweicloud.com/java/jdk/ 或者网盘&#xff1a;通过网盘分享的文件&#xff1a;jdk-8u192-linux-x64.tar.gz 链接: https://pan.baidu.com/s/1V3pQWzgSLJxdrUdmmKueRA 提取码: qspw 2. 查看Linux系统是否有自带的jdk&#xf…

【TabBar嵌套Navigation案例-产品推荐-CollectionView的layout设置 Objective-C语言】

一、我们接着来做这个产品推荐页面啊 1.我们之前,把这个产品推荐页面做出来了,就是长的丑了点儿,所以呢,我们需要去给它设置一下itemSize啦,等等一些东西, 好,首先呢,在这个里边,我们找到我们的layout这块儿, 然后呢,这个layout里边,我们一个一个来设置, 首先呢…

Excel DATE函数怎么用,DATE函数的使用方法来了

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f4c5; 在处理Excel中的日期数据时&#xff0c;我们经常需要创建特定的日期或从多个单元格中合并日期。DATE 函数是Excel中一个非常实用的工具&#xff0c;它可以帮助我们从年、月、日的单独信息中创建一个正确的日期…

Kylinsec操作系统

外网源 发布地址&#xff1a;http://mirrorlist.kylinsec.com.cn:8888/publicrepo/

Git(5):分支合并merge和rebase

git merge 假设有两个分支&#xff1a;master 分支和 feature 分支&#xff0c;现在需要将 feature 分支合并到 master 分支。 git checkout mastergit merge feature在合并分支时&#xff0c;git 提供了不同的合并策略&#xff0c;用于处理不同的合并场景。 Fast-forward 如…

《百家姓》中排名第八却是中国人口第一大姓-王姓

王姓在《百家姓》中虽然排名第八&#xff0c;但根据近年来的统计数据和实际人口分布&#xff0c;王姓已成为中国第一大姓。以下是对王姓作为“百家姓之首”的详细解析&#xff1a; 一、人口数量与分布 人口数量&#xff1a;截至当前时间&#xff08;2024年&#xff09;&#x…

Jmeter 配置元件-计数器时间变量

计数器 在 JMeter 中&#xff0c;计数器是一个非常有用的配置元件&#xff0c;可以帮助你在每次请求时生成递增的数字。 在线程组下新增计数器 配置计数器 开始值&#xff08;Starting value&#xff09;&#xff1a;给定计数器的起始值、初始值&#xff0c;第一次迭代时&…

我们离生成式 AI 应用全面爆发还有多远?2024 全球产品经理大会透露了这些关键信号

GenAI 应用爆发何时到来、生成式 AI 应用到底该怎么做……大模型浪潮已经有将近两年的时间&#xff0c;去年狂卷模型&#xff0c;今年业内则一致认为是应用落地元年&#xff0c;但其间困惑诸多&#xff0c;产品人与创业者们该何去何从&#xff0c;答案尽在 2024 全球产品经理大…

Linux 常用命令(待更新)

1、pwd命令 2、cd命令 3、ls命令 4、locate命令 5、clear命令 6、cat命令 7、head命令 8、tail命令 9、grep命令 10、chmod命令 11、cp命令 12、mv命令 13、mkdir命令 14、rm命令 15、文件压缩和有关归档的命令 16、文件系统的命令 17、与系统管理相关的命令 …

七种修复错误:由于找不到msvcr110.dll 无法继续执行的方法

当你在运行某些程序时遇到“找不到msvcr110.dll”的错误提示&#xff0c;这通常意味着你的系统缺少了Microsoft Visual C 2012 Redistributable包中的一个重要文件。这个DLL文件是Microsoft Visual C Redistributable的一部分&#xff0c;用于支持许多使用Visual C编写的软件和…

Linux:文件描述符详解

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Linux中的所有进程&#xff0c;都拥有自己的文件描述符(File Descriptor, FD)&#xff0c;它是操作系统在管理进程和文件时的一种抽象概念。每个文件描述符由一个非负整…

链接器查找其他动态库的过程

export LD_DEBUGall 2./your_program 这将输出所有的调试信息&#xff0c;包括搜索路径、库的加载、符号解析等详细信息。 关闭用unset LD_DEBUG 常用的 LD_DEBUG 选项包括&#xff1a; all: 输出所有调试信息。paths: 显示搜索路径信息。files: 显示文件打开和关闭的信息。…

使用天地图实现只展示某个市的功能

可参考 天地图部分功能hooks封装useTdtMap.js 和 处理geoJson格式数据并能回显至天地图上 下面实现效果类似于百度地图-展示部分区域 功能图 部分代码 const initLoad () > {mapInit().then((res) > {map.value res;var layers map.value.getLayers();layers.forEac…

CSS04-Chrome调试工具

Chrome 浏览器提供了一个非常好用的调试工具&#xff0c;可以用来调试我们的 HTML结构和 CSS 样式。

成功使用DDNS动态域名访问我的群晖NAS(TP-link路由器)

当NAS设备部署在动态IP环境中&#xff08;如家庭或小型办公室宽带&#xff09;&#xff0c;远程访问常常受到IP地址频繁变动的困扰。为了解决这一问题&#xff0c;结合神卓互联NAS公网助手提供的DDNS&#xff08;动态域名服务&#xff09;功能&#xff0c;我们可以轻松实现通过…

keil软件编写第一个c语言单片机程序并下载到单片机点亮一个发光二极管

Project-->new project-->选择文件夹-->输入工程名如&#xff1a;lession_1-->选择单片机芯片类型&#xff08;Atml的89c52&#xff09;-->newfile -->保存输入C语言文件名lession_1.c-->在左侧source Group 1右键--->选择add files to group “Source…

FPGA实现频率、幅度、相位可调的DDS以及DDS Compiler IP核的使用验证

文章目录 一、DDS介绍二、DDS原理2.1 频率计算2.2 相位改变2.3 波形切换 三、Matlab生成波形文件四、FPGA实现DDS4.1 Verilog代码4.2 仿真验证4.2.1 改变频率4.2.2 切换波形4.2.3 相位调节4.2.4 幅度调节 五、Xilinx DDS Compiler的使用5.1 功能框图5.1.1 相位累加器5.1.2 SIN/…

Linux系统接口--信号量、互斥锁、原子操作和自旋锁的区别

1、基本概念 1.1 信号量&#xff08;Semaphore&#xff09; &#xff08;1&#xff09;定义 信号量是一种计数器&#xff0c;用于控制对共享资源的访问&#xff0c;允许多个线程同时访问一定数量的资源。 &#xff08;2&#xff09;特点 计数型信号量&#xff1a; 信号量有…