I'm still working on this (albeit slowly).
I was able to have a chat with a podman developer who confirmed that this
behaviour was a result of using an unprivileged container, which causes
fuse-overlayfs to be used (which is what everyone suspected) and
fuse-overlayfs is where the issue is happening.
The fuse(8) man page has the following interesting tidbit:
noforget
remember=T
Normally, libfuse assigns inodes to paths only for as long as the kernel is aware of
them. With this option inodes are instead assigned for at least T seconds (or, in the
case of noforget, the life-time of the filesystem). This will require more memory,
but may be necessary when using applications that make use of inode numbers.
It looks like fuse-overlayfs's has a FORGET command that is part of its
user←→kernel protocol that, by default, will drop inodes after a period of
(what it thinks is) inactivity. If my understanding is correct, then this is
very likely what is upsetting pseudo.
The podman developer was hoping that I could set the "noforget" option in a
mountopt setting in a storage.conf file; I tried a couple ways of doing this,
but none had any noticeable effect. However, I'm on openSUSE 15.3, and
although this is openSUSE's latest release, it does bundle a rather old
version of podman (2.1.1) so it's possible that with a new version of podman
I might be able to actually fix this. Upgrading podman is a bit… tricky it
seems.
The podman developer also indicated that privileged vs non-privileged
containers are handled differently (i.e. overlay-via-the-kernel vs
fuse-overlayfs) but that with newer kernels they won't be. I.e. with a new
kernel all containers will be handled with the overlay-via-the-kernel method,
avoiding fuse-overlayfs, and, thus, avoiding this issue. So hopefully this
issue will go away in time.
My --tmpfs /tmp solution is a complete band-aid. Non-privileged containers use
fuse-overlayfs for filesystems, which, by default, will FORGET inodes after a
period of time. Adding --tmpfs /tmp to the podman call simply sidesteps the
use of fuse-overlayfs for the /tmp drive. By coincidence, /tmp is where files
are being placed and if those inodes change pseudo notices and throws a fault.
It's a "fix" in the loose sense of the word :-) Better solutions would be to
wait for the host's kernel to get updated, or to add the "noforget" option,
somehow, to fuse-overlayfs (via libfuse).
I'm just a bit stuck proving either of these solutions will work.
Thoughts?