protonscr

Client hang when an automounted 'nofail' partition is unavailable

steamopen runtime
ValveSoftware/steam-for-linux#10571 · opened 2024-03-03 by StarterX4 · updated 2026-07-29 · 6 comments · github
SStarterX4 2024-03-03 github

Your system information

  • Steam client version (build number or date): 1709168962
  • Distribution: Arch
  • Opted into Steam client beta?: Yes
  • Have you checked for system updates?: Yes

Please describe your issue in as much detail as possible:

I have an /etc/fstab entry for a partition that's on an external drive, with the options of nofail (in case the drive wouldn't be connected so the OS' boot process wouldn't be unnecessarily interrupted) and x-systemd.automount.
UUID=1d023367-43fc-48ba-813f-cfbbb40e641c /mnt/hdd_gry ext4 defaults,noatime,nofail,inode_readahead_blks=64,nobarrier,x-systemd.automount 0 1

Today I've not had the drive connected.

Steam was hanging during the startup (steamwebhelper process was becoming a zombie process), then after like 2-3 mins crashing.

XRRGetOutputInfo Workaround: initialized with override: 0 real: 0xe0cd3dc0
XRRGetCrtcInfo Workaround: initialized with override: 0 real: 0xe0cd2500
steamwebhelper.sh[56698]: === Sat 02 Mar 2024 22:50:30 CET ===
steamwebhelper.sh[56698]: Starting steamwebhelper under bootstrap sniper steam runtime at /home/starterx4/.steam/steam/ubuntu12_64/steam-runtime-sniper
CAppInfoCacheReadFromDiskThread took 744 milliseconds to initialize
src/common/pipes.cpp (883) : fatal stalled cross-thread pipe.
src/common/pipes.cpp (883) : fatal stalled cross-thread pipe.
src/common/pipes.cpp (883) : Fatal assert; application exiting
src/common/pipes.cpp (883) : Fatal assert; application exiting
03/02 22:53:31 Init: Installing breakpad exception handler for appid(steam)/version(1709168962)/tid(56626)
assert_20240302225331_34.dmp[57315]: Uploading dump (out-of-process)
/tmp/dumps/assert_20240302225331_34.dmp
[starterx4@doadgrz ~]$ assert_20240302225331_34.dmp[57315]: Finished uploading minidump (out-of-process): success = yes
assert_20240302225331_34.dmp[57315]: response: CrashID=bp-6f1c7666-b934-48c7-b189-d6b852240302
assert_20240302225331_34.dmp[57315]: file ''/tmp/dumps/assert_20240302225331_34.dmp'', upload yes: ''CrashID=bp-6f1c7666-b934-48c7-b189-d6b852240302''

After like an hour or two of trying to find a reason and solution for it, Steamwebhelper finally told me that

steamwebhelper.sh[2621]: === Sat 02 Mar 2024 22:58:42 CET ===
steamwebhelper.sh[2621]: Starting steamwebhelper under bootstrap sniper steam runtime at /kesz/Steam/steam/ubuntu12_64/steam-runtime-sniper
bwrap: Can't bind mount /oldroot/mnt on /newroot/mnt: Unable to apply mount flags: remount "/newroot/mnt/hdd_gry": No such device

After just unmounting the unreachable partition (umount /mnt/hdd_gry) and starting Steam again, Steam started fine, like nothing happened.

Seems like it's Steam Sniper Runtime's bwrap's fault.
I don't remember it ever happened before steamwebhelper was wrapped inside Sniper Runtime's container.

Steps for reproducing this issue:

  1. Have an /etc/fstab entry for a partition with nofail,x-systemd.automount options, that is unreachable (eg. the physical drive is not connected);
  2. Try to launch Steam.

Related issues: #5899

Ssmcv 2024-03-04 github

I don't remember it ever happened before steamwebhelper was wrapped inside Sniper Runtime's container

This would most likely already have happened if you tried to launch Counter-Strike 2, Dota 2, Endless Sky, Retroarch or any game that runs via Proton, just not Steam itself.

This is probably not going to be straightforward to avoid in bubblewrap, because bubblewrap is a very constrained environment, and it can't make many assumptions about what is or isn't a security vulnerability - so if something fails, it usually has to assume "this could be bad, better to just fail" instead of carrying on regardless.

If you add nosuid,nodev to the device's mount options (which is probably a good idea for a removable device anyway), then that would probably avoid this, by removing the need for it to be remounted. Please try that?

Or, a workaround would be to use noauto,user instead of nofail,x-systemd.automount on your fstab entry for this device, and use your file manager to mount it if and only if it's actually attached.

Ssmcv 2024-03-04 github

@kisak-valve, please could you retitle this to mention automounts? That's the key fact here. "... when an automounted partition is unavailable" perhaps.

Aao2 2026-05-13 github

Just to clarify the scope of the issue, just having the automount configured and unavailable does not seem to be enough to trigger the issue, it is necessary that something is also trying to access the mount point. At least with a recent systemd.

I set up the test case as shown in the OP description:

$ sudo sh -c 'echo "UUID=1d023367-43fc-48ba-813f-cfbbb40e641c /mnt/hdd_gry  ext4 defaults,noatime,nofail,inode_readahead_blks=64,nobarrier,x-systemd.automount    0  1" >> /etc/fstab'
$ sudo systemctl daemon-reload
$ sudo systemctl restart mnt-hdd_gry.automount

And the Steam client could start just fine on my system.

To trigger the issue I had to access the mount point in another terminal with something like:

$ while true; do ls /mnt/hdd_gry/; done

Only while the command above was running the Steam client would fail to start with the following error:

steam.sh[17707]: Log already open
steam-runtime-check-requirements[17853]: W: Child process killed by signal 15: bwrap: Can't bind mount /oldroot/ on /newroot/: Unable to apply mount flags: remount "/newroot/mnt/hdd_gry": No such device

steam.sh[17707]: Error: Steam now requires user namespaces to be enabled.

I guess this can happen on a desktop system if some backup daemon, or a filesystem tracker, or a file manager, is accessing the affected mount point.

https://github.com/containers/bubblewrap/issues/653 will help to address those cases.

Ssmcv 2026-06-23 github

In Steam Client beta 1780965181 or later (2026-06-09 or later), there is a workaround available for this: if you run Steam with the environment variable PRESSURE_VESSEL_WORKAROUNDS=limit-shared-dirs, it will disable automatic sharing of various top-level directories like /mnt and /srv with the Steam Client's container, and this can be used to work around automount points for unreachable network services or detached external drives.

If you were relying on a top-level directory like /mnt or /srv being shared with the Steam Client because it contains your games library, then you'll need to combine this workaround with PRESSURE_VESSEL_FILESYSTEMS_RW to share any directories that are necessary. For example, if you have games installed in /games and /mnt/local-drive as well as in your home directory, you could use:

env PRESSURE_VESSEL_WORKAROUNDS=limit-shared-dirs \
    PRESSURE_VESSEL_FILESYSTEMS_RW=/games:/mnt/local-drive \
      steam

Further work is still ongoing to use the option added for https://github.com/containers/bubblewrap/issues/653 to help to work around this automatically, but it's likely that the Steam Client will still take a long time to start up on systems that have a non-functioning automount point, and we probably cannot solve that. This sort of error behaviour is a general issue with using automounting for drives that are not always available, and I'd recommend avoiding this use of automounting if possible: having pieces of your filesystem that block for tens of seconds when accessed will tend to hurt performance and robustness, especially for anything that makes use of containers (like the Steam Client and Flatpak).

Ssmcv 2026-07-14 github

In Steam Client beta 1780965181 or later (2026-06-09 or later), there is a workaround available for this: if you run Steam with the environment variable PRESSURE_VESSEL_WORKAROUNDS=limit-shared-dirs, [see previous comment for more details]

This workaround is now also available in general availability (non-beta) Steam Client releases. The same workaround is now also available when launching games:

  • For games that run under Steam Linux Runtime 3.0 or SLR 4.0 (newer native Linux games, and Proton 8 or later) you should only need to set the environment variables.

  • For games that run under SLR 1.0 (older native Linux games) or SLR 2.0 (old versions of Proton), this workaround currently also requires opting in to the beta branch of SLR 2.0. The next update for SLR 2.0 will probably promote this beta to stable.

Further work is still ongoing to use the option added for containers/bubblewrap#653 to help to work around this automatically

This is likely to be in a future beta release of all of the various components.

but it's likely that the Steam Client will still take a long time to start up on systems that have a non-functioning automount point, and we probably cannot solve that

Tests indicate that a non-functioning automount will make Steam take about 5 minutes to start, and games will take about 90 seconds. This comes from the OS rather than the container runtime framework, and doesn't appear to be solvable. The PRESSURE_VESSEL_WORKAROUNDS=limit-shared-dirs workaround will avoid these delays.

This sort of error behaviour is a general issue with using automounting for drives that are not always available, and I'd recommend avoiding this use of automounting if possible

This is still true.

Ssmcv 2026-07-29 github

Further work is still ongoing to use the option added for containers/bubblewrap#653 to help to work around this automatically

This is now in the Steam Client public beta, and the public beta branches of Steam Linux Runtime 2.0, 3.0, 4.0. That'll change the failure mode from "container startup fails" to "container startup is very slow, but eventually succeeds".

The workaround described in https://github.com/ValveSoftware/steam-for-linux/issues/10571#issuecomment-4778839026 would speed this up, at the cost of not automatically making all top-level directories available to games and the Steam Client.