Issue 8487: os.mknod() fails on NFS mounted directories (original) (raw)

Created on 2010-04-21 15:57 by nikratio, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (4)
msg103860 - (view) Author: Nikolaus Rath (nikratio) * Date: 2010-04-21 15:57
$ cat test.py #!/usr/bin/env python import os import stat dbfile = './testfile.test' with open(dbfile, 'w') as fh: print('Opened file for writing') os.unlink(dbfile) os.mknod(dbfile, stat.S_IRUSR | stat.S_IWUSR stat.S_IFREG) print('Mknod\'ed file') [cliff@ih ~]$ cd tmp <-- nfs mounted on a 64bit Fedora box [cliff@ih tmp]$ ~/tmp/test.py Opened file for writing Traceback (most recent call last): File "/home/cliff/tmp/test.py", line 9, in os.mknod(dbfile, stat.S_IRUSR stat.S_IWUSR stat.S_IFREG) OSError: [Errno 2] No such file or directory [cliff@ih tmp]$ cd /tmp <-- locally mounted on a HD [cliff@ih tmp]$ ~/tmp/test.py Opened file for writing Mknod'ed file I think the mknod() call really shouldn't fail if it tries to create an ordinary file that can be created with open() with problems.
msg103865 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2010-04-21 16:58
Well, this looks like a filesystem problem more than a Python problem. The error (errno 2) comes from the mknod() system call itself.
msg103871 - (view) Author: Charles-François Natali (neologix) * (Python committer) Date: 2010-04-21 17:52
> Well, this looks like a filesystem problem more than a Python problem. The error (errno 2) comes from the mknod() system call itself. Definitely. @Nikratio Just to be sure, could you provide the result of: - strace ~/tmp/test.py from NFS-mounted directory - the relevant line of "mount" output - "nfsstat -a" on client (and maybe server) But you should know that mknod is disabled on some NFS servers for security reasons, and see man mknod: " POSIX.1-2001 says: "The only portable use of mknod() is to create a FIFO- special file. If mode is not S_IFIFO or dev is not 0, the behavior of mknod() is unspecified." However, nowadays one should never use mknod() for this purpose; one should use mkfifo(3), a function especially defined for this purpose. Under Linux, this call cannot be used to create directories. One should make directories with mkdir(2). There are many infelicities in the protocol underlying NFS. Some of these affect mknod()." So try to avoid mknod over NFS...
msg103877 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2010-04-21 18:13
Closing this, as it is not an issue with Python.
History
Date User Action Args
2022-04-11 14:57:00 admin set github: 52733
2010-04-21 18:13:19 georg.brandl set status: open -> closednosy: + georg.brandlmessages: + resolution: wont fix
2010-04-21 17:52:38 neologix set nosy: + neologixmessages: +
2010-04-21 16:58:40 pitrou set nosy: + exarkun
2010-04-21 16:58:33 pitrou set nosy: + pitroumessages: +
2010-04-21 15:57:18 nikratio create