Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
br3eze opened this issue Dec 27, 2023 · 14 comments · Fixed by containers/bubblewrap#615

Comments

@br3eze
Copy link

br3eze commented Dec 27, 2023

Your system information

  • Steam Beta Branch: Steam Beta Update, Version: 1703100617
  • Artix Linux x86_64 (based on Archlinux) with fresh updates, X11, Fluxbox
  • Steam Beta: Tried both variants stable and beta
  • Steam Logs: logs.tar.gz
  • Nvidia Optimus + Intel - tried both if it matters

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
Copy link
Author

br3eze commented Dec 27, 2023

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?

@kisak-valve kisak-valve transferred this issue from ValveSoftware/steam-for-linux Dec 27, 2023
@br3eze
Copy link
Author

br3eze commented Dec 29, 2023

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
Copy link
Contributor

smcv commented Jan 2, 2024

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
Copy link
Contributor

smcv commented Jan 2, 2024

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

@br3eze
Copy link
Author

br3eze commented Jan 2, 2024

@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
Copy link
Contributor

smcv commented Jan 2, 2024

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
Copy link
Contributor

smcv commented Jan 2, 2024

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
Copy link
Author

br3eze commented Jan 2, 2024

@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

  • Linux pc-user51 6.6.7-artix1-1 #1 SMP PREEMPT_DYNAMIC Thu, 14 Dec 2023 10:09:41 +0000 x86_64 _GNU/Linux_
  • Every partition is ext4
  • Rechecked, mount --bind works fine

@smcv
Copy link
Contributor

smcv commented Jan 2, 2024

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
Copy link
Contributor

smcv commented Jan 2, 2024

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

@br3eze
Copy link
Author

br3eze commented Jan 3, 2024

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

@br3eze br3eze closed this as completed Jan 3, 2024
@smcv
Copy link
Contributor

smcv commented Jan 3, 2024

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 added a commit to smcv/bubblewrap that referenced this issue Jan 3, 2024
mount(2) uses ENOSPC to represent an arbitrary anti-denial-of-service
limit being exceeded, which is outside the usual meaning of
"No space left on device". We can make this clearer by catching that
particular failure mode and giving users a hint.

Reference: https://bugzilla.kernel.org/show_bug.cgi?id=218336
Resolves: ValveSoftware/steam-runtime#637
Signed-off-by: Simon McVittie <[email protected]>
@smcv
Copy link
Contributor

smcv commented Jan 3, 2024

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 added a commit to smcv/flatpak that referenced this issue Mar 27, 2024
* `--symlink` is now idempotent, meaning it succeeds if the
  symlink already exists and already has the desired target
  (containers/bubblewrap#549, flatpak#2387,
  flatpak#3477, flatpak#5255)
* Report a better error message if `mount(2)` fails with `ENOSPC`
  (containers/bubblewrap#615, ValveSoftware/steam-runtime#637)
* Fix a double-close on error reading from `--args`, `--seccomp` or
  `--add-seccomp-fd` argument (containers/bubblewrap#558)
* Improve memory allocation behaviour
  (containers/bubblewrap#556, containers/bubblewrap#624)
* Silence various compiler warnings (containers/bubblewrap#559)

Resolves: flatpak#2387
Resolves: flatpak#3477
Resolves: flatpak#5255
Signed-off-by: Simon McVittie <[email protected]>
smcv added a commit to flatpak/flatpak that referenced this issue Mar 27, 2024
* `--symlink` is now idempotent, meaning it succeeds if the
  symlink already exists and already has the desired target
  (containers/bubblewrap#549, #2387,
  #3477, #5255)
* Report a better error message if `mount(2)` fails with `ENOSPC`
  (containers/bubblewrap#615, ValveSoftware/steam-runtime#637)
* Fix a double-close on error reading from `--args`, `--seccomp` or
  `--add-seccomp-fd` argument (containers/bubblewrap#558)
* Improve memory allocation behaviour
  (containers/bubblewrap#556, containers/bubblewrap#624)
* Silence various compiler warnings (containers/bubblewrap#559)

Resolves: #2387
Resolves: #3477
Resolves: #5255
Signed-off-by: Simon McVittie <[email protected]>
@smcv
Copy link
Contributor

smcv commented Apr 16, 2024

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.

GeorgesStavracas pushed a commit to GeorgesStavracas/flatpak that referenced this issue Apr 26, 2024
* `--symlink` is now idempotent, meaning it succeeds if the
  symlink already exists and already has the desired target
  (containers/bubblewrap#549, flatpak#2387,
  flatpak#3477, flatpak#5255)
* Report a better error message if `mount(2)` fails with `ENOSPC`
  (containers/bubblewrap#615, ValveSoftware/steam-runtime#637)
* Fix a double-close on error reading from `--args`, `--seccomp` or
  `--add-seccomp-fd` argument (containers/bubblewrap#558)
* Improve memory allocation behaviour
  (containers/bubblewrap#556, containers/bubblewrap#624)
* Silence various compiler warnings (containers/bubblewrap#559)

Resolves: flatpak#2387
Resolves: flatpak#3477
Resolves: flatpak#5255
Signed-off-by: Simon McVittie <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants