ValveSoftware / Proton

Compatibility tool for Steam Play based on Wine and additional components
Other
24.63k stars 1.07k forks source link

OSError: [Errno 22] Invalid argument: '../drive_c' with NTFS #5168

Open Graphicscore opened 3 years ago

Graphicscore commented 3 years ago

Your system information

Please describe your issue in as much detail as possible:

If I try to run a game with proton steam will "launch" the game, nothing happens, and after a few seconds the steam client revokes the "running" status of the game. If I bypass the runtime container described in this post https://github.com/flightlessmango/MangoHud/issues/369#issuecomment-709902078 I am able to run the games. I have tested it with FFXIV and Space Engineers.

slr-app39210-t20210918T214247.log

Steps for reproducing this issue:

  1. Install a Game (eg. FFXIV or Space Engineers)
  2. Try Starting the Game
kisak-valve commented 3 years ago

Hello @Graphicscore, your system information looks healthy, and from your log this looks like the failure:

Traceback (most recent call last):
  File "/usr/lib/python3.7/tarfile.py", line 2206, in makelink
    os.symlink(tarinfo.linkname, targetpath)
OSError: [Errno 22] Invalid argument: '../drive_c' -> '/run/media/graphicscore/SSD/Games/SteamLibrary/steamapps/common/Proton 6.3/dist/./share/default_pfx/dosdevices/c:'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/run/media/graphicscore/SSD/Games/SteamLibrary/steamapps/common/Proton 6.3/proton", line 1253, in <module>
    g_proton.extract_tarball()
  File "/run/media/graphicscore/SSD/Games/SteamLibrary/steamapps/common/Proton 6.3/proton", line 318, in extract_tarball
    tar.extractall(path=self.dist_dir)
  File "/usr/lib/python3.7/tarfile.py", line 2004, in extractall
    numeric_owner=numeric_owner)
  File "/usr/lib/python3.7/tarfile.py", line 2046, in extract
    numeric_owner=numeric_owner)
  File "/usr/lib/python3.7/tarfile.py", line 2124, in _extract_member
    self.makelink(tarinfo, targetpath)
  File "/usr/lib/python3.7/tarfile.py", line 2217, in makelink
    targetpath)
  File "/usr/lib/python3.7/tarfile.py", line 2118, in _extract_member
    self.makedir(tarinfo, targetpath)
  File "/usr/lib/python3.7/tarfile.py", line 2147, in makedir
    os.mkdir(targetpath, 0o700)
OSError: [Errno 22] Invalid argument: '/run/media/graphicscore/SSD/Games/SteamLibrary/steamapps/common/Proton 6.3/dist/./share/default_pfx/dosdevices/c:'

To me, this reads like an error on Proton's side and should be evaluated by the Proton devs first.

What filesystem are you using with /run/media/graphicscore/SSD/Games/? Also, are there any symlinks along the path in the error?

Graphicscore commented 3 years ago

The filesystem is NTFS since I am dualbooting Windows and share games between Linux and Windows.

kisak-valve commented 3 years ago

Proton interacting with NTFS is known to be finicky. This is most likely yet another example of NTFS causing trouble based on how you mounted the partition.

Also, "Application files installed by Steam for Linux should not be shared (e.g. between Windows and Linux). This is a requirement of the Steam for Linux client." (https://github.com/ValveSoftware/steam-for-linux/blob/master/RelNotes.md#installation) is relevant here as sharing a Steam library between multiple OSes is not supported and can lead to other undefined behavior.

malfunctioning-object commented 3 years ago

@kisak-valve I am really sorry but this matter is not communicated that well. And this piece of knowledge is really easy to miss when you are a new user and you are going through adjustment period. In addition to that, you linked to an ancient document (2013) from a repo that no one looks into. Steam is now built in base repositories, distro stores or even built-in into distros, there is little reason to enter Steam's github page.

Since Proton exploded, people will most likely find this: https://github.com/ValveSoftware/Proton/wiki/Using-a-NTFS-disk-with-Linux-and-Windows, and unfortunately this page does not educate you about issues, bugs, anomalies or errors linked to the usage of NTFS partition. I had to find discussions about those issues on linux gaming related Discords (!).

int-72h commented 3 years ago

One thing to note is this may be resolved with the new ntfs3 driver being mainlined in Linux kernel version 5.15, as it appears to give full NTFS support with none of the issues ntfs-3g had. I'm currently running the -rc4 kernel with the aforementioned new driver and I'll see if proton works fine on it.

Fijxu commented 2 years ago

The filesystem is NTFS since I am dualbooting Windows and share games between Linux and Windows.

This should fix it -> https://wiki.archlinux.org/title/Steam/Troubleshooting#Steam_Library_in_NTFS_partition I can start all my installed games from my NTFS drives without problems

FichteFoll commented 2 years ago

Here is the full traceback I receive:

Traceback (most recent call last):
  File "/home/fichte/.local/share/Steam/steamapps/common/Proton - Experimental/proton", line 1402, in <module>
    g_session.init_session(sys.argv[1] != "runinprefix")
  File "/home/fichte/.local/share/Steam/steamapps/common/Proton - Experimental/proton", line 1207, in init_session
    g_compatdata.setup_prefix()
  File "/home/fichte/.local/share/Steam/steamapps/common/Proton - Experimental/proton", line 738, in setup_prefix
    os.symlink("../drive_c", self.prefix_dir + "/dosdevices/c:")
OSError: [Errno 22] Invalid argument: '../drive_c' -> '/mnt/data_steam/steamapps/compatdata/397540/pfx//dosdevices/c:'

which makes sense because : is not a valid character on NTFS file systems (when used with Windows) and i use windows_names in my mount options for compatibility.

I tried working around that by symlinking from the NTFS to my ext4 root partition:

/mnt/data_steam/steamapps/compatdata $ mv -v 397540 ~/.steam/steam/steamapps/compatdata  
/mnt/data_steam/steamapps/compatdata $ ln -s ~/.steam/steam/steamapps/compatdata/397540 397540

which got rid of the error, but unfortunately the game still does not start. Not sure if that's a general issue or one with the game in particular (Borderlands 3). Edit: Made it work by re-installing into a different location instead of re-using the version I had from Windows.

Sqaaakoi commented 2 years ago

The filesystem is NTFS since I am dualbooting Windows and share games between Linux and Windows.

This should fix it -> https://wiki.archlinux.org/title/Steam/Troubleshooting#Steam_Library_in_NTFS_partition I can start all my installed games from my NTFS drives without problems

thank you so much it works now

Zireael07 commented 2 years ago

This is a prome candidate for some sort of a more readable error (custom exception, probably) AND better documentation (Proton wiki only mention "game does not run", does NOT mention any of the errors.

For the record, I had the same error with Gems of War installed on an NTFS partition.

Matthew0x commented 1 year ago

I would never guess that proton has issues mounting paths if I didn't open the terminal to check out why steam continues to silently kill the game processes...

Moving the proton folders and creating sys links indeed fixes the problem!

Turns out Wine has problems with NTFS, so that Arch wiki link is really relevant. Thanks a lot Fijxu!

Fijxu commented 1 year ago

I would never guess that proton has issues mounting paths if I didn't open the terminal to check out why steam continues to silently kill the game processes...

Moving the proton folders and creating sys links indeed fixes the problem!

Turns out Wine has problems with NTFS, so that Arch wiki link is really relevant. Thanks a lot Fijxu!

You welcome :)

Also, i found this some time ago, this make Windows able to read BTRFS partitions, so you can format you Hard Drives and Solid State Drives to BTRFS on Linux and Windows will be able to read them without problem. This also solves this issue because it's not NTFS

https://github.com/maharmstone/btrfs

I haven't used this driver to much since i barely use Windows now, but it was pretty stable. All my HDDs are formated in BTRFS and fully readable

Installation Guide if someone is intrested (For spanish speakers only): https://www.youtube.com/watch?v=iVzCZrwgo0Q

Installation Guide (English, not my video and kinda old): https://www.youtube.com/watch?v=ni-4fEtgTso

Artoria2e5 commented 1 year ago

@FichteFoll is right about windows_names, but I am strongly against the whole symlink thing because it defeats the point of having a game library disk where all the heavy stuff go. And man the compactdata place can surely grow: 200 MB for each game is not big for your average AAA game sizes, but imagine you are a weirdo with a bunch of small indie games and...

The thing is, NTFS is getting wrongly blamed. Y'all should be blaming udisks2 or whatever for trying to be clever with windows_names. Windows does not like these names, so what? It does not hang or crash when it gets to one of these names, it just fails to read it. And these are Wine symlinks, so Windows does not need to read it anyways! If chkdsk deletes them, proton recreates them -- these are symlinks, not important data.

The real way to fix it is to do the mount yourself without the bunch of options. rw,allow_other,user_id=1000,big_writes works just fine, so stick with it. And write it into /etc/fstab so your dumbass file explorer stops being smart with the options.