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