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環境。壊れる単位でもある |
| dosdevices | WindowsのドライブレターとMacの場所を対応づけるフォルダ | ★この中身が今回の主役 |
| シンボリックリンク | 「本体は別の場所にある」という道しるべだけのファイル | ★追いかける方式で固めると、本体のほうを全部コピーしてしまう |
| レジストリ ( system.reg ほか) | Windowsの設定を書き溜めたテキストファイル。ボトルの直下にある | ★入れ直しでは戻らない情報がここに入っている |
| wineserver | Wineの裏方。プレフィックスごとに常駐して、レジストリなどを預かる | ★これが生きていると、ファイルを差し替えても上書きされる |
| APFSのクローン | Macのファイルシステムの機能で、中身を共有したままコピーしたことにする仕組み | 一瞬で終わって容量も食わない。★ただしバックアップにはならない |
| 拡張属性 | ファイル本体とは別に付いている覚え書き(ダウンロード元など) | 方式によっては落ちる。ditto なら保たれる |
【下調べ】ボトルは何でできているのか
まず手元の4個を数えました。読み取りだけです。
| ボトル | 容量 | ファイル数 | フォルダ数 | シンボリックリンク |
|---|---|---|---|---|
| steam2 | 0.45GB | 1,624 | 176 | 2 |
| tools | 0.45GB | 1,621 | 172 | 17 |
| tools | 0.45GB | 1,616 | 171 | 15 |
| steam | 23.68GB | 12,317 | 868 | 3 |
ここで大事なのは容量よりもファイル数です。空のボトルでも1,600個以上の小さなファイルでできています。「1個の大きなファイル」ではないので、コピーの方式によって速度がはっきり変わります。
【下調べ・承前】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 -R | 1.39秒 | 446.5MB | 1,624 | 2 ◯ |
cp -a | 1.49秒 | 446.5MB | 1,624 | 2 ◯ |
ditto | 1.43秒 | 446.5MB | 1,624 | 2 ◯ |
rsync -aH | 1.30秒 | 426MB | 1,624 | 2 ◯ |
cp -c(APFSクローン) | 0.19秒 | 446.5MB(見かけ) | 1,624 | 2 ◯ |
tar(無圧縮) | 0.72秒 | 448.0MB | — | — |
tar.gz | 8.38秒 | 133.6MB | — | — |
zip -ry | 8.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.reg | 3.62MB | ✕ 戻せない |
| Steam/userdata | 2.68MB | ✕ 実質戻せない |
| Documents / Saved Games | 0B | —(今回は空でした) |
| 持ち出すべき合計 | 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の作りにあります。
対処は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 です。
この記事の数字は、すべてこの環境で実際に測ったものです。⚠機材や版が変われば結果も変わります。
それでは、今回はここまで。最後までありがとうございました😊