ゲーム (Apex) をするために Windows をデュアルブートすることにした (大奮闘)

Apex Legends というゲームをやろうという話になったのだけれど,これはどうにも Windows でしか動かなさそうなので,諦めて Windows を入れることにした.

www.ea.com

Apex の感想については一番最後に書いたので,結果を知りたい場合は飛ばすことができる.

Wine

ja.wikipedia.org

最初は Wine で動かそうとしていたが,Wine では動かないことが知られている.EAC (Easy Anti-cheat) があるので Wine と相性が悪いと評判.

Wine の互換性レポートでは Garbage という評価が与えられている:

https://appdb.winehq.org/objectManager.php?sClass=application&iId=19271

自分が試したときはそもそもセットアップまでいかなくて,まず前提になっている EA が提供している Origin というプラットフォームのインストールにことごとく失敗した.

f:id:mangano-ito:20200819083211p:plain
エラーが起きる

Steam Play

ところで,Steam はマルチプラットフォームで,Windows 以外のプラットフォームにもインストールできる.しかしながら,そのゲームが Windows 以外の実行形式を提供しているかは別問題で,たいてい Windows 以外では実際は動かないというおもしろい仕組みになっている.

GNU/Linux 版には Steam Play という機能があって,Wine を使ってゲームを動かすことで Windows 用のゲームを動かす仕組みが備わっている.

steamcommunity.com

デフォルトでは確認されたタイトルしか Stream Play を有効にできないのだけれど,設定ですべてのタイトルに関して有効にすることができる.

Cluedo

また話は変わるが,Cluedo というゲームが最近流行っている (YouTuber の間で).

store.steampowered.com

このゲームは Steam で遊べるので Steam で遊んだところ,Steam Play 対象タイトルではないので全タイトル有効にすることで問題なく遊ぶことができた.

f:id:mangano-ito:20200819083425p:plain
問題ない

Apex

そして Apex に立ち返ると,Steam 上では(まだ)提供されていないようなのでうまく行かないし,Steam Play でもうまく遊べるのか疑問だ.とすると,最早 Windows を入れてしまうほうが早い.

Virtualbox でできるのならいいのだけれど,確実にパフォーマンスは落ちるのでゲームの用途は厳しいのではないかと思われる.

ところで Reddit には r/ApexLegendsOnLinux/ という subreddit があって聖杯戦争になっている:

www.reddit.com

デュアルブート (めんどい)

デュアルブートすることにした.デュアルブートするには数ステップ必要で面倒臭さと戦う必要がある.

  1. パーティションをいじって Windows をインストールできるくらい空ける
  2. Windows をインストールする
  3. インストールしたらブートローダーを戻す
  4. Windows の環境をととのえる

なんか文字で書くと楽な気がしてくる.

パーティション

パーティションが時間的には一番かかる.というのも,普通は容量フルフルで割り当てているので,どこかのパーティションを縮小してから,未確保の領域を作らないといけなくてそれなりに時間がかかる操作になる.

今回は SSDGNU/Linux/ (root) パーティションを縮小して,50 GiB ほど Windows に割り当てるための未確保領域を作ることにした:

  • EFI Partition (FAT32; 100 MiB)
  • GNU/Linux システム (ext4; 200 GiB くらい) ← 縮小 させた
  • Windows 用 (unallocated; 50 GiB くらい) ← 作った

時間は測ってないけど結構かかった気がする.HDD だとどうだろうという気分になる.

Windows をインストールしよう

できたので Windowsインストーラーを起動させてマニュアルインストールすると「システムパーティションの容量が少ないよ〜」みたいなメッセージが出てきて進めないという現象にぶち当たった.

Windows 用のパーティションは 50 GiB あるので容量的には十分だけれど,EFI パーティションが 100 MiB あって GNU/Linux 用のファイルで 88 MiB ほど使われているので,Windows ブート用のファイルがおけない状態になっていた.

EFI パーティションを拡張しよう

なので,EFI パーティションを 100 MiB から 300 MiB くらいに拡張することにした.実際には後続の Linuxパーティションを後ろにずらして縮小してから -- (1),EFI パーティションをそのスキマを埋めるように拡張する -- (2) 操作になる.

アンマウントして作業する必要があるので,Ubuntu の Live 環境で GParted を使って操作する.こういうときに 1 つ Live 環境があると便利だけど,なかったので USB メモリに焼き焼きした.

ところがどっこい,GParted が中途半端にエラーが出て (1) ができたけど (2) に失敗して嫌な感じになってしまった.ファイルシステムは 100 MiB のママで,後続に 200 MiB の確保されない領域がスキマで空くことになってしまっている:

f:id:mangano-ito:20200819093446p:plain
300 MiB だけど警告が出てる

GParted (libparted) には謎の仕様があって,256 MB 以下の FAT32 を拡縮できない:

bugzilla.gnome.org

なのでその操作だけ失敗して歯抜けの状態になってしまう

f:id:mangano-ito:20200819020958p:plain
We're working on it!

ところで Microsoft のドキュメントでは

このパーティションの最小サイズは 100 MB であり、FAT32 ファイル形式を使用してフォーマットされている必要があります。

Advanced Format 4K ネイティブ ドライブ (セクターあたり 4 KB) ドライブの場合は、FAT32 ファイル形式の制限のために、最小サイズは 260 MB です。 FAT32 ドライブの最小パーティション サイズは、セクター サイズ (4 KB) x 65527 = 256 MB で計算されます。

となっていて複雑な事情がからんでいる:

docs.microsoft.com

f:id:mangano-ito:20200819095535p:plain
300 MiB だけど 200 MiB が排他的経済水域になっている

diskpart でがんばろう

Workaround としていったん ext4 にフォーマットしなおすと拡張できるので,その後 FAT32 にフォーマットし直してファイルを戻すというのが挙げられている.

嫌なので餅は餅屋ということで Windows で操作することにした.Windows のインストール前にコマンドラインが開けるので diskpart extend で拡張しようという魂胆だ.

ところがどっこい,EFI パーティションdiskpart では操作できないようになっている:

superuser.com

再び GParted

何回やらせるねんという感じで再び Ubuntu の Live 環境を起動して GParted でやることにした.もう素直に提案されていた方法で,マウントした HDD に EFI パーティション/boot をコピーしてフォーマットすることにした.

f:id:mangano-ito:20200819092152p:plain
適当なところに一時的にコピーすることにした

これはうまくいった.ext4 にしなくても ざっくりと FAT32 でフォーマットしなおせば 300 MiB のパーティションが確保できるしファイルシステムもうまく構築される.あとはコピーしておいたファイルを戻して,eps,boot のフラグをつければ元通りの EFI パーティションになる.

f:id:mangano-ito:20200819093704p:plain
フルフルで使えるようになった

この方法の問題としては EFI パーティションの UUID がフォーマットしたら変わるので,fstab とか grub とかが UUID で参照している箇所を変更する必要がある.もしかしたら UUID を固定することができたかもしれない.

通常どおりインストール

Windows のセットアップに戻ると今度はすんなりとインストールすることができた.インストール自体は数分で終わる.パーティションもろもろの操作のほうが時間がかかって計 4 時間くらいかかっている.

あとはグラフィックボードのドライバをインストールしたりもろもろの作業があるけど,再起動したりひたすら待つのに比べれば天国的な味わいだ.

最後に grub の設定を修正する

最後にこのままだと Windowsブートローダーに乗っ取られているし,UEFI セットアップから Linuxブートローダーを起動しても UUID が違っていてロードできないエラーが出た.

ので,再び Ubuntu の Live 環境に戻って,fstab を書き換えたり,普通のインストールのように各パーティションをマウントして chroot 後に grub-mkconfig して grub の設定をアップデートすればやっと完了となる.

f:id:mangano-ito:20200819092645p:plain
/etc/fstab

wiki.archlinux.jp

Windowsブートローダーに乗っ取られているのは UEFI セットアップで Linuxブートローダーを一番初めに読むようにして基本は Linux を起動させるようにする.ゲームをしたいときは起動時に F11 を連打してブートローダーを選択して起動することにした.

最終形

最終的には以下のようなパーティションの構成になった:

f:id:mangano-ito:20200819094333p:plain
決定版

Microsoft Reserved Partition はセットアップで勝手に切られる謎パーティションだ.

Windows インストール後に EFI パーティションは 113 MiB ほどになった.13 MiB のために大奮闘したことになる.なにかファイルを削除したりすれば余裕で空いたのではという説がある.

Apex

さて,Apex はというとバトルロイヤルの FPS ゲームで,最初に数名のパーティで飛行機から飛び降りて,適当な領地を漁って武器を手に入れて,どんどん活動可能範囲が狭まっていくなか,他パーティを倒して生き延びよう,というゲームだ.パフォーマンスは Windows 上なので当然まったく問題ない.

僕らはというと,1 人を除いて FPS 未経験なので 1 キルもすることができず,誰かに出くわすと即銃殺されるという蜂の巣体験を展開してトラウマが植え付けられて数回プレイしてロビーに戻ると全員無言になって終わった.