找不到可用的临时目录
Posted
技术标签:
【中文标题】找不到可用的临时目录【英文标题】:No usable temporary directory found 【发布时间】:2013-06-04 11:17:25 【问题描述】:我正在寻找一个临时目录, 但是当我试图获取目录时使用
tempfile.gettempdir()
它给我的错误
File "/usr/lib/python2.6/tempfile.py", line 254, in gettempdir
tempdir = _get_default_tempdir()
File "/usr/lib/python2.6/tempfile.py", line 201, in _get_default_tempdir
("No usable temporary directory found in %s" % dirlist))
IOError: [Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/home/openerp/openerp-server']
该目录的权限是root拥有的777。
【问题讨论】:
我只知道磁盘已满时才会出现此问题,因为该方法通过尝试写入临时文件来找到有效目录。我想这不是你的问题? @BhajunSingh:我对你声称 Python 会通过实际尝试在那里创建文件来确定直接使用哪个文件感到震惊。但这是真的:hg.python.org/cpython/file/2.7/Lib/tempfile.py#l176 - 见_get_default_tempdir()
。不使用os.access()
来检查是否可以写入目录似乎很奇怪。
我认为@BhajunSingh 是对的,磁盘可能已满。 ***.com/questions/7518297/…
@BrentWashburne 我已经检查了那个答案,然后我会检查磁盘使用情况。
【参考方案1】:
这种错误发生在两种情况
-
权限(应为 drwxrwxrwt 并由 root 拥有)
空间
要检查空间(磁盘使用情况)只需在终端上运行命令
df -h
将列出unix上的磁盘使用情况并得到类似的输出
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 28G 15G 12G 58% /
如果根(挂载在 / 上)使用率为 100%。
你需要清理tmp目录或者重启机器或者在root上腾出一些空间。
【讨论】:
【参考方案2】:如果 inode 已满,也会出现问题。
你可以输入df -i
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 253841 322 253519 1% /dev
tmpfs 255838 430 255408 1% /run
/dev/xvda1 5120000 5120000 0 100% /
tmpfs 255838 1 255837 1% /dev/shm
tmpfs 255838 7 255831 1% /run/lock
tmpfs 255838 16 255822 1% /sys/fs/cgroup
tmpfs 255838 4 255834 1% /run/user/1000
【讨论】:
点赞。因为这绝对是导致此问题的另一个原因。我正在缓存很多超过 inode 限制的日志。输入 df -I ,如果是 100%,那么你需要清除这些文件。记录的文件和不同文件中的数据缓存一定是可能的问题。 要么空间不足,要么你可以创建的文件数量用完。【参考方案3】:当文件系统已切换到只读模式时,可能会发生此错误。
【讨论】:
说出如何解决问题会更有帮助,而不仅仅是它是什么。 有什么解决办法...? 您可以通过mount
命令检查这是否是问题所在。如果您的文件系统有ro
而不是rw
,则您处于只读模式。【参考方案4】:
我在 Docker 中运行 python 脚本时遇到了同样的问题。以下命令为我修复了它:
docker rmi $(docker images --quiet --filter "dangling=true")
【讨论】:
这为我解决了问题,但删除的内容超出了需要。【参考方案5】:当 / 上没有空格时,我遇到了同样的问题。
问题:
文件 "/usr/lib64/python2.6/tempfile.py", line 201, in _get_default_tempdir("No usable temporary directory found in %s" % dirlist)) IOError: [Errno 2] 在 ['/tmp', '/var/tmp', '/usr/tmp', '/'] 中找不到可用的临时目录 [FAILED]
[root@master hue]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_master-lv_root
35G 34G 0 100% /
tmpfs 7.8G 72K 7.8G 1% /dev/shm
/dev/sda1 477M 34M 418M 8%/开机
当我清理出一些空间时,它对我来说效果很好。
[root@master log]# service hue start
开始色调:[OK]
[root@master 日志]#
【讨论】:
我在大学容器上的虚拟机上工作,您的回答对我没有帮助。问题依然存在!【参考方案6】:肯定是磁盘空间问题,
在终端上输入df -h
您应该会看到如下输出(注意其中一个文件系统上的 100%)
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 992M 0 992M 0% /dev
tmpfs 200M 21M 179M 11% /run
/dev/xvda1 7.8G 7.8G 0 100% /
tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
tmpfs 200M 0 200M 0% /run/user/997
tmpfs 200M 0 200M 0% /run/user/1042
在这种情况下,您需要通过删除路径根/
上的文件、工件文件夹等来腾出空间
【讨论】:
【参考方案7】:我在 Windows 7x64 机器上遇到了同样的问题。磁盘空间和权限没问题。
当我执行时
tempfile.mkdtemp(prefix='MyPrefix_')
在 python 控制台中手动创建了目录%TEMP%\MyPrefix_xxxx
。
但是当我从脚本中执行相同操作时,我收到了错误IOError: [Errno 2] No usable temporary directory found in [...]
。
我使用dir
参数解决了这个问题:
# '.' is a default value for example
tempfile.mkdtemp(prefix='MyPrefix_', dir=os.environ.get('TEMP', '.'))
从脚本之后它运行良好。
【讨论】:
【参考方案8】:我今天早些时候遇到了这个问题。我在去吃午饭之前启动了一个嵌入在 jupyter 中的查询,然后我返回 jupyter 并抛出某种类型的错误(不记得它到底是什么)。当我尝试在终端中重新启动 jupyter 时,我收到了 OP 问题中描述的错误(没有可用的临时目录)。上面的答案不起作用,所以我尝试重新启动我的整个虚拟机,此时我得到了here 描述的错误。按照该线程的最佳答案中的说明进行操作后,问题已解决。
【讨论】:
嗨,欢迎来到 SO。仅供参考,这应该是评论而不是答案 谢谢-您能详细说明一下吗?我想如果有人咨询这个线程来回答 OP 的问题,他们可能会对我提供的解决方案感兴趣。由于它并不真正适合任何其他答案的对话,我不知道我会在哪里发表评论。【参考方案9】:当我的 Ubuntu 上的根驱动器 (/dev/sda1
) 损坏时,我得到了这个。
重新启动,收到错误/dev/sda1 contains a file system with errors
。
按照此处的说明进行操作:https://askubuntu.com/questions/885062/root-file-system-requires-manual-fsck,即 fsck -y <dev/xxx reported to have error>
两次。然后exit
重启。
【讨论】:
以上是关于找不到可用的临时目录的主要内容,如果未能解决你的问题,请参考以下文章