ValveSoftware / steam-runtime

A runtime environment for Steam applications
Other
1.17k stars 86 forks source link

Can't bind mount /oldroot/../SteamLinuxRuntime_sniper/var/.. to /newroot/.. No space left on device #637

Closed br3eze closed 6 months ago

br3eze commented 6 months ago

Your system information

Please describe your issue in as much detail as possible:

Can't start any game (Win/Lin) getting this:
"bwrap: Can't bind mount /oldroot/home/.../SteamLinuxRuntime_sniper/var/.../usr/etc/services on /newroot/etc/services: Unable to mount source on destination: No space left on device" Already tried: reboot, reinstall Steam, delete or move to a new location ~/.local/share/Steam, enable Steam Beta.

Error screenshot

Steps for reproducing this issue:

Move some games and Proton tools to the main Library ~/.local/share/Steam from another location. Then start any Proton game. At least in my situation. Native games are playable.

UPDATE: Native (Compat checkbox is unchecked) Couter Strike 2 didn't start because of bwrap: Can't bind mount /oldroot/.../common/SteamLinuxRuntime_sniper/var/tmp-RIWDG2/usr/etc/environment on /newroot/etc/environment: Unable to mount source on destination: No space left on device

br3eze commented 6 months ago

It's not a steam as I can understand. So I just need to clear all the settings and do fresh install of the Steam_Sniper. But I already did rm -r .local/share/Steam.. mb there is something else somewhere?

And one more thing. Some games, Neverwinter Online (Proton) as I can remember, don't want to move to a new location (another Library), because of some "third party" something. So You need to reinstall it into the new one. Is it an issue too? Because there is no difference for a Proton game where to be. Isn't it?

br3eze commented 6 months ago

image

rm -r ..something..sniper.. by hand, then reinstalled it through verifying some game. No luck. Tried to remove it through Steam GUI. No chance to be happy.

Please, rework all if checks and uninstall part in the code for this sniper. User should be able to do clear install in this like situations when nothing can help.

And No space left while You have 100 Gb free isn't normal too.

smcv commented 6 months ago

Unable to mount source on destination: No space left on device

This indicates that a Linux kernel system call (probably mount(2)) is returning the error code ENOSPC for some reason. Unfortunately, when something as low-level as this fails, the only information we can get is a single integer error code, and it's common for an error code that was originally intended to mean one specific thing (like ENOSPC, which is usually insufficient space on a particular filesystem) to be reused to mean something vaguely similar (like maybe some arbitrary limit on the number of mount points is being exceeded).

ENOSPC is not a documented error return for mount(2), so the best we can do is to guess.

smcv commented 6 months ago

The "missing shared content" message in your screenshot is https://github.com/ValveSoftware/steam-for-linux/issues/8473. That issue is in another part of Steam, and Steam Runtime developers cannot fix it.

br3eze commented 6 months ago

@smcv Yes - "No space left on device". But I've just reinstalled linux and 100Gb free on a fresh system. Everything works fine, even games in Lutris/Wine. If there is only one Steam dir: ~/.local/share/Steam, then I don't know what to do..

smcv commented 6 months ago

Please collect a detailed log from the sniper runtime so that we can see more information about what is happening. The easiest way is to set the launch options for an affected game to:

STEAM_LINUX_RUNTIME_LOG=1 STEAM_LINUX_RUNTIME_VERBOSE=1 %command%

and then try to run it. You'll get a log file in SteamLinuxRuntime_sniper/var/slr-latest.log.

My best guess so far is that something in the kernel is (ab)using ENOSPC to mean something that is not really "No space left on device", but actually more like "There is an arbitrary limit to some resource and you have used all of it". I can't tell which resource or what the limit is, but hopefully a log would help to find out.

smcv commented 6 months ago

And one more thing

If you think there is a separate issue, please report it separately, either after we have resolved this one or in parallel. If we discuss two different issues on the same issue number, it quickly gets confusing.

"Unable to mount source on destination: No space left on device" is a Steam Runtime issue, but anything to do with the "package management" parts of Steam (for example being unable to install, uninstall or remove a game) would be a https://github.com/ValveSoftware/steam-for-linux/ issue.

br3eze commented 6 months ago

@smcv Ok. I will open a new one issue for that game.

Honestly, I don't know where to look at. slr-app582500-t20240102T235913.log

UPD: May be it will help somehow

smcv commented 6 months ago

Thanks, I'll see what I can do with that log.

Rechecked, mount --bind works fine

It works fine when you set up one bind-mount, but not necessarily when the container runtime framework does somewhere around 100 of them!

smcv commented 6 months ago

What is the content of /proc/sys/fs/mount-max? (It's 100000 on my system.)

br3eze commented 6 months ago

And You're right! It was 100. I've set it to 3000 and it works now. Thank You very much! )

smcv commented 6 months ago

If you want Steam Linux Runtime, Flatpak and similar frameworks to be reliable, you should leave that sysctl at its default value (which seems to be 100000 in upstream kernels) instead of setting it to a much lower value.

smcv commented 6 months ago

If accepted, containers/bubblewrap#615 will change this error message to something more like:

bwrap: Can't bind mount /oldroot/run on /newroot/run: Unable to mount source on destination: Limit exceeded (ENOSPC). (Hint: Check that /proc/sys/fs/mount-max is sufficient, typically 100000)

which would hopefully have pointed you in the right direction.

smcv commented 2 months ago

If accepted, containers/bubblewrap#615 will change this error message to something more like:

bwrap: Can't bind mount /oldroot/run on /newroot/run: Unable to mount source on destination: Limit exceeded (ENOSPC). (Hint: Check that /proc/sys/fs/mount-max is sufficient, typically 100000)

which would hopefully have pointed you in the right direction.

Today's Steam Linux Runtime 2.0 (soldier) and 3.0 (sniper) betas, versioned 0.20240415.x, have that change included.