Featured image of post 在 GNU/Linux 和 Windows 间共享 Steam 游戏库

在 GNU/Linux 和 Windows 间共享 Steam 游戏库

终于不用一份游戏装两遍了。

得益于与 Steam Deck 一同而来的 Proton,在常见的 GNU/Linux(以下简称 Linux)发行版上畅玩各类原本在 Windows 上才有的 3A 大作成为完全可行的选择,最近我也进行了这方面的尝试,效果已经较为理想,但随之而来的是一个问题,我总不可能把动辄上百G的游戏全都重新装一遍吧?硬盘没空间了不说,这么麻烦还不如切回 Windows 玩呢。

出现$代表是终端命令,下面跟着的是命令执行后的输出。

挂载 Steam 库所在的分区

起初我试图直接在 GUI 上挂载分区,但这样会遇到莫名其妙的问题,有这个想法的朋友请不要跳过这一部分。

找到目标分区的 UUID

1
2
3
4
5
6
$ sudo blkid
/dev/nvme1n1p8: UUID="421a3d00-81a8-4112-a2df-4d234c674a24" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="84e56276-a585-412c-9bf5-0071b2b4d4da"
/dev/loop1: TYPE="squashfs"
/dev/nvme0n1p1: PARTLABEL="Microsoft reserved partition" PARTUUID="bbdb2720-6722-42b3-80f5-385332da77c3"
/dev/nvme0n1p2: LABEL="Vault" BLOCK_SIZE="512" UUID="DC64DA2064D9FCE8" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="f884fe24-1c4d-4650-9847-d2f83b9a93ba"
......

如果你能在类似「磁盘管理」的应用里查到目标分区的 UUID,也可以直接使用。

能查到 UUID 就行

查询用户 ID 和组 ID

1
2
3
4
$ id -u
1000
$ id -g
1000

默认状态下,这两个值都是1000

创建挂载点并修改 fstab

1
2
$ sudo mkdir /media/gamedisk
$ sudo nano /etc/fstab

这里也可以使用任何你喜欢的编辑器。

在文件的末尾加上:

1
UUID=DC64DA2064D9FCE8 /media/gamedisk lowntfs-3g uid=1000,gid=1000,rw,user,exec,umask=000 0 0

如果你之前已经挂载过这个硬盘,请删除之前挂载产生的那一行。

大小写敏感可能会导致问题,这里使用的是lowntfs-3g,挂载后的 NTFS 卷将不会大小写敏感,以免出现因大小写敏感而找不到游戏文件的问题。1

防止出现 NTFS Read Error

⚠️注意:有报告称这样操作可能会造成数据丢失,请自行斟酌并承担风险。

由于 NTFS 的特性,如果创建在 Windows 上无效名称的文件/文件夹将导致 Read Error,进而导致游戏无法启动。最常见的问题是文件名中包含:字符,而 Proton 在 NTFS 磁盘上创建的文件名中就包含了这个字符。

修复这个问题相当简单:在挂载的 NTFS 磁盘上创建一个/compatdata文件夹,并将其 symlink 到 Linux 分区上的文件夹。

创建 symlink:

1
2
$ mkdir -p ~/.steam/steam/steamapps/compatdata
$ ln -s ~/.steam/steam/steamapps/compatdata /media/gamedisk/Steam/steamapps/

如果提示/compatdata已经存在,删除它并重新 symlink 即可。

最后,添加 Steam 库吧

操作完成后,重启电脑,目标磁盘就会在 Linux 上自动挂载,这时进入 Steam 正常添加游戏库即可

正常添加游戏库

操作完成后,可以正常游玩 Steam 库里所有的 Windows 游戏,并且可以在任何一边向库内添加游戏。

本文参考:Using a NTFS disk with Linux and Windows

Licensed under CC BY-NC-SA 4.0