MacでWindowsのゲームを動かす Whisky は開発が終わっていますが、手元のボトルはまだ動きます。Whisky亡きあと、Macで無料でどこまで遊べるのか で書いたとおり、eightは一度放置していたSteamを起動して自己更新を走らせ、ボトルを壊しました。あのとき戻せなかったのは、単純にバックアップを取っていなかったからです😅

そこで今回は、ボトルをバックアップして、別の場所に引っ越して、壊れたら戻す——この一連を実際にやって測りました。Whiskyの代わりに何を使うか で「22GBのうち持ち出す価値があるのは2.7MBだけ」と書いた話の、具体的な手順版です。

先に結論を3つ書いておきます。

  • 22GBのうち、本当に持ち出す必要があるのは6.3MBでした(★前回の2.7MBは数え落としがありました)
  • ★方式を間違えると、Mac全体をバックアップし始めます。cp -RL は12秒で3.3GB書き込んでいました
  • ★復元は、エラーを出さずに失敗します。「戻したつもり」で何も起きていない状態になります

実験は4つあります。章タイトルに【承前】と付いている章は、直前の章の続きです。

この記事での約束ごと
手元のボトル4個は読むだけにして、書き込む実験はすべてコピーか、新しく作った実験用のプレフィックスに対して行いました。Whisky.app 自体も起動していません(起動が自己更新のきっかけになるためです)。作業のあと、4個の更新日時が変わっていないことを確認しています。

【前置き】壊れてから気づくのでは遅い

スポンサーリンク

互換レイヤーで作った環境は、ふとしたきっかけで壊れます。よくあるのは次の3つです。

  • 放置していたアプリを起動したら自己更新が走って、古いWineでは動かなくなった(eightが踏んだのはこれです)
  • Wineのバージョンを上げたら動かなくなった。しかも下げても戻らない
  • Macを買い替える/初期化することになった

どれも「壊す前に戻せる状態を作っておく」だけで済む話です。ただ、ボトルは22GBありました。毎回まるごと退避するのは現実的ではありません。そこで「何を残せば戻せるのか」を先に確定させます。

用語集

用語平たく言うとなぜそれが効くのか
ボトル / プレフィックスWindowsのふりをするための「Cドライブ一式」が入ったフォルダ。Whiskyではボトルと呼ぶこれ1つが1つのWindows環境。壊れる単位でもある
dosdevicesWindowsのドライブレターとMacの場所を対応づけるフォルダ★この中身が今回の主役
シンボリックリンク「本体は別の場所にある」という道しるべだけのファイル★追いかける方式で固めると、本体のほうを全部コピーしてしまう
レジストリ
(system.reg ほか)
Windowsの設定を書き溜めたテキストファイル。ボトルの直下にある★入れ直しでは戻らない情報がここに入っている
wineserverWineの裏方。プレフィックスごとに常駐して、レジストリなどを預かる★これが生きていると、ファイルを差し替えても上書きされる
APFSのクローンMacのファイルシステムの機能で、中身を共有したままコピーしたことにする仕組み一瞬で終わって容量も食わない。★ただしバックアップにはならない
拡張属性ファイル本体とは別に付いている覚え書き(ダウンロード元など)方式によっては落ちる。ditto なら保たれる

【下調べ】ボトルは何でできているのか

まず手元の4個を数えました。読み取りだけです。

ボトル容量ファイル数フォルダ数シンボリックリンク
steam20.45GB1,6241762
tools0.45GB1,62117217
tools0.45GB1,61617115
steam23.68GB12,3178683

ここで大事なのは容量よりもファイル数です。空のボトルでも1,600個以上の小さなファイルでできています。「1個の大きなファイル」ではないので、コピーの方式によって速度がはっきり変わります。

ボトルの中身 左が「入れ直せるもの」、右が「戻せないもの」 drive_c ── Windowsから見えるCドライブ Program Files (x86)/Steam/steamapps … 18GB(ゲーム本体) users/…/AppData/Local/Steam … 1.2GB(キャッシュ) windows … 767MB(Wineが作る足回り) Steam/userdata … 2.68MB(設定とクラウド前のセーブ) ★これは戻せない ボトル直下 ── レジストリ system.reg … 3.53MB user.reg … 0.08MB userdef.reg … 0.01MB ★入れ直しでは戻らない dosdevices ── ドライブの対応表 c: → ../drive_c z: → / ★Mac全体

【下調べ・承前】Zドライブは Mac 全体につながっている

ボトルの dosdevices を覗くと、こうなっていました。

dosdevices/z:  → /                                    ← ★Mac全体
dosdevices/c:  → ../drive_c
dosdevices/d:  → /Volumes/VOICEVOX 0.22.4-arm64
dosdevices/f:  → /Volumes/OBS Studio 31.0.0 (Apple)
dosdevices/h:  → /Library/Developer/CoreSimulator/Volumes/iOS_22A3351
dosdevices/j:  → /Library/Developer/CoreSimulator/Volumes/iOS_21F79

Wineは「Zドライブ=Macのルート」という約束で、Windows側のソフトからMacのファイルに触れるようにしています。さらに、ボトルを作ったときにマウントされていたディスクイメージが、そのままドライブとして生えたままになっていました。toolsボトルには17個も残っています。

つまりボトルは、見た目は450MBのフォルダなのに、中に「Mac全体への入口」を持っていることになります。ここから、この記事でいちばん危ない話につながります。

【実験1】リンクを追いかける方式で固めるとどうなるか

バックアップの方式には、シンボリックリンクをそのままリンクとして記録するものと、リンクの先を読みに行って中身を記録するものがあります。後者でボトルを固めると、z: をたどってMac全体を詰め始めます。

本物のボトルで試すのは危ないので、同じ形をした小さな砂場(20KBのテキスト+z: → /)を作って確かめました。各方式は12秒で必ず打ち切り、その時点の出来高を記録しています。

方式結果出来高(元は0.02MB)
zip -r(既定)✕ 12秒たっても終わらない0MB(★書き始めてすらいない)
zip -ry◯ すぐ終了元のまま
tar -czf(既定)◯ すぐ終了元のまま
tar -czhf(-h付き)◯ 終わるには終わるが30.2MB=約1,500倍
cp -R(既定)◯ すぐ終了0.1MB
cp -RL(-L付き)✕ 12秒で打ち切り3,374MB=3.3GB書き込み中

覚えるのは1つだけ:zipには -y を付ける
cp -R・tar・ditto・rsync は、既定のままでリンクをリンクのまま扱います。危ないのは、わざわざ -L や -h を付けた場合だけです。
★例外が zip です。zipだけは既定が「追いかける」側なので、zip -ry と -y を足す必要があります。付け忘れると、20KBのフォルダを固めるだけの操作が永遠に終わりません😳

【実験2】コピーの方式を7つ比べる

次は普通に速さの比較です。426MB・ファイル1,624個のボトルを、方式を変えてコピーしました。

方式時間出来上がりファイル数リンク
cp -R1.39秒446.5MB1,6242 ◯
cp -a1.49秒446.5MB1,6242 ◯
ditto1.43秒446.5MB1,6242 ◯
rsync -aH1.30秒426MB1,6242 ◯
cp -c(APFSクローン)0.19秒446.5MB(見かけ)1,6242 ◯
tar(無圧縮)0.72秒448.0MB——
tar.gz8.38秒133.6MB——
zip -ry8.39秒133.1MB——

ボトルは3分の1近くまで縮みます(446MB → 133MB)。Wineが作る windows フォルダは似たようなファイルの集まりなので、圧縮がよく効きます。長期保存なら圧縮する価値があります。

【実験2・承前】APFSのクローンは du が嘘をつく

表の中で cp -c だけ0.19秒と桁違いに速いのが気になったので、本当にコピーされているのか確かめました。

クローン  (cp -cR) : du は 426M と言う → 実際に減った空き容量は  17MB
普通のコピー(cp -R) : du は 426M と言う → 実際に減った空き容量は 426MB

★容量を調べるコマンドは「426MBある」と答えるのに、ディスクの空きは17MBしか減っていません。APFSのクローンは中身を元のファイルと共有していて、書き換えられた部分だけが実体を持つ仕組みだからです。

速いのは魅力だが、これはバックアップではない
中身を共有しているということは、同じディスクが壊れたら両方消えるということです。
使いどころは「これから壊すかもしれない作業の直前に、一瞬で退避を作る」とき。0.19秒・実質17MBで済むので、気軽に取れます。保管したいなら、別のディスクへ普通にコピーしてください。

【実験2・承前】macOS の rsync には -X が無い

最初はよく紹介される rsync -aHX で測ろうとして、いきなり止まりました。

$ rsync -aHX src/ dst/
rsync: invalid option -- X

$ rsync --version
openrsync: protocol version 29
rsync version 2.6.9 compatible

★macOSに入っている rsync は、Apple製の openrsync という別物でした。Linux向けの記事にある -X(拡張属性を保つ指定)は受け付けません。-aH にするか、必要なら本家のrsyncを別に入れることになります。

ちなみに、ボトルのファイルには com.apple.provenance という拡張属性が1,800個ぶら下がっていました。拡張属性まできっちり保ちたいなら ditto が確実です。

【実験3】22GBのうち、本当に要るのは6.3MB

ここが本題です。22GBのボトルを、「入れ直せるもの」と「戻せないもの」に仕分けしました。

中身容量もう一度手に入るか
ゲーム本体(steamapps)18GB◯ 入れ直せる
キャッシュ(AppData/Local/Steam)1.2GB◯ 勝手に作り直される
Steam本体ほか1.3GB◯ 入れ直せる
windows(Wineの足回り)767MB◯ 10秒で作り直せる
system.reg / user.reg / userdef.reg3.62MB✕ 戻せない
Steam/userdata2.68MB✕ 実質戻せない
Documents / Saved Games0B—(今回は空でした)
持ち出すべき合計6.30MB

前回の数字を訂正します
p970では「持ち出す価値があるのは2.7MB」と書きましたが、あれは userdata だけを数えていました。レジストリ3.62MBを足して6.30MBが正しい数字です。
レジストリには「どのソフトをどこに入れたか」「Windowsの何版のふりをするか」が書かれています。ここを捨てると、入れ直しても同じ状態になりません。

もうひとつ気づいたことがあります。キャッシュが1.2GBまで育っていました。p970で測ったときはユーザーフォルダは空だったので、これは2026年7月にSteamの自己更新が走ったときの痕跡です。7月以降に更新されたファイルが328個ありました。壊れた記録まで丁寧にバックアップしても仕方がないので、ここも持ち出しません。

【実験4】6.3MBだけ戻して、本当に復元できるのか

仕分けが正しいかは、実際に戻してみないと分かりません。新しい空のプレフィックスを作って、6.3MBだけ流し込みました。

手順かかった時間できたもの
① 新しいプレフィックスを作る8.3〜10.8秒431MB
② 6.3MBを流し込む0.02秒—

結果です。

復元前: Microsoft Windows 10.0.19043   ← 作りたてのプレフィックス
復元後: Microsoft Windows 10.0.22000   ← ★レジストリのWindowsバージョン設定が効いた

$ wine reg query "HKCU\Software\Classes\steam\Shell\Open\Command"
    (既定)  REG_SZ  "C:\Program Files (x86)\Steam\steam.exe" -- "%1"

★Windowsの版が10から11相当(22000)に変わりました。これは元のボトルに入れてあった設定です。つまり6.3MBの中に「この環境をどう振る舞わせるか」がちゃんと入っていたことになります。Steamの登録も戻っています。

【承前】止めずに戻すと、黙って無かったことになる

——と、きれいに書きましたが、1回目は失敗しました。しかもエラーが1つも出ないままです。

ファイルをコピーして、確認のコマンドを叩いたら「そんなキーはありません」と返ってくる。おかしいと思ってコピーしたはずの user.reg を開いたら、目印にしていた行が0件になっていました。上書きしたはずのファイルが、元に戻っていたのです。

理由はWineの作りにあります。

なぜ「戻したつもり」になるのか ✕ wineserver が生きている場合 ① .reg ファイルを上書きコピーする ② wineserver はメモリ側の内容を持ったまま ③ 終了時にメモリの内容を書き戻す = コピーした内容は消える(無言) ◯ 先に止めた場合 ① wineserver -k で止める ② .reg ファイルを上書きコピーする ③ 次の起動時にファイルから読み込む = ちゃんと戻る Wineはレジストリをメモリに持ち、終了時にファイルへ書き戻す。だから「開いている最中の差し替え」は必ず負ける。

対処は1行です。

wineserver -k        ← 先に止める。それから .reg を上書きする

止めてから入れ直したら、目印の行は9件戻り、確認のコマンドも通りました。怖いのは、失敗しても何も言われないことです。復元したら必ず中身を確かめる——今回いちばんの教訓はこれでした。

【ここから整理】目的別の手順3つ

ここまでの実測を、目的別の手順にまとめます。

① これから壊すかもしれない ── 作業直前の退避(0.2秒)

cp -cR "~/Library/Containers/com.isaacmarovitz.Whisky/Bottles/<ボトルのID>" ~/bottle_snapshot

APFSのクローンなので一瞬で終わり、ディスクもほとんど食いません(426MBのボトルで実質17MB)。放置していたアプリを起動する前に、これだけやっておけば戻せます。⚠同じディスクの中なので、保管用にはなりません。

② 長く保管する ── 圧縮して別のディスクへ

wineserver -k                          # 先に止める(開いたまま固めない)
tar -czf ~/bottle_backup.tar.gz -C <ボトルのある場所> <ボトルのID>
# zipを使うなら必ず -y を付ける:  zip -ry bottle.zip <ボトルのID>

426MBが133MBになりました。3分の1近くまで縮みます。

③ 引っ越す・作り直す ── 6.3MBだけ持っていく

# 持ち出すもの
<ボトル>/system.reg
<ボトル>/user.reg
<ボトル>/userdef.reg
<ボトル>/drive_c/Program Files (x86)/Steam/userdata
<ボトル>/drive_c/users/<ユーザー名>/Saved Games   ← ゲームによってはここにセーブがある
<ボトル>/drive_c/users/<ユーザー名>/Documents

# 戻す側
wineserver -k          ← ★これを忘れると、黙って失敗する
(新しいボトルを作ってから、上のファイルを同じ場所へ置く)

⚠ バックアップには個人情報が入ります
復元したレジストリを覗いたら、Steamの自動ログイン用のアカウント名が入っていました。レジストリは設定の集まりなので、ログイン名・インストール先のパス・ユーザー名などがそのまま残ります。
クラウドに置くときや、人に渡すときは中身を確認してください。この記事でも値そのものは伏せています。

つまずき集

  • ⚠ Wineのコマンドの出力は日本語が化けます(CP932のため)。iconv -f CP932 -t UTF-8 を通すと読めます
  • ⚠ zip -r は一時ファイルに書いてから最後に名前を変えるので、出来上がりのファイルだけ見ていると「何も書いていない」ように見えます。作業フォルダ全体の増え方で判断しました
  • ⚠ 実験に使う砂場は必ず制限時間を付けて打ち切ること。cp -RL は12秒で3.3GB書いていたので、放っておけばディスクを埋めます
  • ★ ボトルの更新日時を作業の前後で確認しておくと、「原本に触っていない」ことを自分で確かめられます

まとめ

  • ★22GBのボトルで、持ち出すべきは6.3MB(レジストリ3.62MB+セーブ2.68MB)。残りは入れ直せるか、10秒で作り直せる
  • ★p970で書いた「2.7MB」は数え落としでした。レジストリを入れて6.3MBが正しい
  • ★★ボトルには z: → /(Mac全体)へのリンクがある。リンクを追いかける方式で固めると、Mac全体を詰め始める。cp -RL は12秒で3.3GB、tar -czhf は元の約1,500倍になった
  • ★zipだけは既定が危ない側。zip -ry と -y を足す。cp -R・tar・ditto・rsync は既定のままで安全
  • ★APFSのクローンは du が嘘をつく(426MBと言うのに実際の消費は17MB)。一瞬で取れるが、同じディスクの中なのでバックアップではない。作業直前の退避に使う
  • ⚠macOSの rsync は openrsync で -X が無い。-aH にする
  • ★★復元は黙って失敗する。wineserverが生きているとレジストリを書き戻すので、wineserver -k で止めてから差し替える。戻したら必ず中身を確かめる
  • ⚠バックアップには個人情報が入る(アカウント名など)。置き場所と渡し先に注意する

バックアップの話は地味ですが、「壊してもいい」と思えると、実験がぐっと気楽になります。0.2秒で退避が取れると分かってから、ボトルをいじるのが怖くなくなりました😊

実測した環境
Mac 完結。Apple M4 / メモリ32GB / macOS 26.5.2 / APFS。計測日は 2026-08-13 です。
この記事の数字は、すべてこの環境で実際に測ったものです。⚠機材や版が変われば結果も変わります。

それでは、今回はここまで。最後までありがとうございました😊