This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: os.mknod() fails on NFS mounted directories
Type: behavior Stage:
Components: IO Versions: Python 2.6
process
Status: closed Resolution: wont fix
Dependencies: Superseder:
Assigned To: Nosy List: exarkun, georg.brandl, neologix, nikratio, pitrou
Priority: normal Keywords:

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 <module>
    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:00adminsetgithub: 52733
2010-04-21 18:13:19georg.brandlsetstatus: open -> closed

nosy: + georg.brandl
messages: + msg103877

resolution: wont fix
2010-04-21 17:52:38neologixsetnosy: + neologix
messages: + msg103871
2010-04-21 16:58:40pitrousetnosy: + exarkun
2010-04-21 16:58:33pitrousetnosy: + pitrou
messages: + msg103865
2010-04-21 15:57:18nikratiocreate