暗号化APFS環境で EFI Volume を消してしまった場合にどうするか

これは、MacBookPro13inch with touchbarにLinuxが`dd`焼きされたUSBメモリを指して、そのメモリを初期化しようと思っていた矢先の話である。

前提として、macOS X 10.13 High Sierra かつ、暗号化APFS環境の話です。
__FusionDriveの人は更に特殊なので、とっととGenius Barに持っていくこと！__

# やらかし

```
$ diskutil eraseVolume "Free Space" dummy disk0s1
```

はい注目、`disk0`です。理由理屈関係なく`disk0`を対象に`diskutil`でなにかしてはいけません！
ここで、`diskutil list`をつかって普通の構成を覗いてみましょう↓

```
$ diskutil list internal 
/dev/disk0 (internal): 
     #: TYPE NAME SIZE IDENTIFIER 
     0: GUID_partition_scheme 121.3 GB disk0 
     1: EFI EFI 314.6 MB disk0s1 
     2: Apple_APFS Container disk2 120.9 GB disk0s2 

## https://beta.apple.com/sp/betaprogram/apfsfusion から引用
```

このように`disk0s1`は`EFI`ボリュームであることがわかりますが、***先程消しました***。

この状況では、Macはおろかコンピュータは起動できなくなってしまいます（※出来る場合もある）

# 対応策

まず、__以下全ての用意が済むまで、再起動はしないこと__。なぜならば、シャットダウンしなければ問題にならないので。

## 再起動やkernel panicなどでcrashするまえにやること

1. Time Machineでバックアップをします
2. 必要なデータは更に手動でバックアップしておきます
3. `id_pub`など秘密鍵やキーチェーン、二段階認証系をなんとかバックアップします
4. お気に入りなどをなんとかします

つまり消し去る前提でなんとかしましょう。。

## 以下を諦めましょう

1. いまのパーティションを消さずに済ます
2. 時間をかけずに復旧

ただし、rEFItとかで何とかする方法とか、ぼくの環境ではうまく動かなかったが、単純なリカバリモードでの再インストールでもうまくいく場合があります。

# チャレンジ 1

`Command+R`によるリカバリモードでの macOS High Sierra 再インストールは、うまく行きませんでした。
順調に進むのですが、再起動2回目あたりの、このエラーが出て止まってしまう。

![スクリーンショット 2017-10-11 4.29.55.png](https://qiita-image-store.s3.amazonaws.com/0/97659/a278ec04-848b-a41e-4bc2-212164767289.png)

これ、ぐぐるとファイアウォール内だからダメとかあるので、テザリングしたりなど色々試しましたが、何やってもダメでした。

# チャレンジ 2

`Command+S`起動のシングルモードでの`fsck -fy`ですが、これもやったんですがAPFS暗号化環境では、行われないようで、ぐぐってもあんまり知見がなくAPFS用のコマンドも用意されるっぽいんですが、何れにしてもEFIボリュームは復活しなかった。

# チャレンジ 3

`Option+Command+R`による最新バージョンをAppleサーバからとってくる方法の再インストールも、チャレンジ1と同じ画面が出てあぼーん。

# チャレンジ 4

ついに諦め、フォーマットすることにした。とりあえずAPFSではmacOSが最新であれば最善なはずなので、`Option+Command+R`起動し、ターミナルを起動

メモしたりしてないので、とりあえずやったことを羅列する。意味がわからない人はやらないほうが身のためです。。

↓まずは、APFSコンテナを削除します。論理ボリューム？なので、これをするとJHFS+が生まれます…

```
$ diskutil apfs deleteContainer disk0s1
```

その生まれたボリュームも消します↓

```
$ diskutil eraseVolume "Free Space" dummy disk0s1
```

これをすると、`disk0`がスッキリ何もない状態になります。なるはず。

## あとはAPFSボリュームをつくるだけ

そしたら、ボリュームを作るのはディスクユーティリティでもできるので、そっちに切り替えて、SSDに対して「消去」でAPFSを作って下さい。

もしTime Machineから復旧を考えていて、元々APFS暗号化を使っていた場合は、ここでAPFS暗号化でボリュームを作っておくのが良いです。

うまくボリュームが作れると、そのタイミングでEFIを作ってくれます。EFI REBORN!!

↓`diskutil list`で確認しても戻ってきています（実際の画面）
![スクリーンショット 2017-10-11 4.43.11.png](https://qiita-image-store.s3.amazonaws.com/0/97659/8480ad9c-342d-2adc-6cfc-434d0d1f62f8.png)

# Time Machine からの復元

さあリカバリモードの最初にもどって気合を入れて「Time Machineバックアップから復元」します。

が、復元基となるボリュームがAFP先のAirMacに繋がったUSB HDDであって、これが最初から出てこない。

↓ココに繋げたい
![スクリーンショット 2017-10-11 4.45.34.png](https://qiita-image-store.s3.amazonaws.com/0/97659/048c40f9-1982-4f7b-7ab3-bc33d2218034.png)

↓出てこない
![IMG_3091.JPG](https://qiita-image-store.s3.amazonaws.com/0/97659/476eca48-387f-2978-2129-1d0671a93d64.jpeg)

この「その他のサーバ」は、URLで記入しろと言う。ここで、ターゲットのURLは `afp://SkyTower.local/Time Capsule`だが、スペースを不正なURLだと判断する。

↓URLエンコードして、スペースを`%20`にしてやるとうまくいく
![スクリーンショット 2017-10-11 4.49.05.png](https://qiita-image-store.s3.amazonaws.com/0/97659/ab0ae173-f7ff-d2de-748b-1fab34e34484.png)

そんで、username/passwd入れれば、きっと出てくるはず。

したら最新のバックアップをチョイスして、ディスクユーティリティでさっき作ったばっかりのAPFSボリュームに対して復元すれば…ッ！

# EFI ボリュームは消しちゃダメ

未来の自分とのお約束だよ

#　参考リンク

- https://beta.apple.com/sp/betaprogram/apfsfusion
- https://support.apple.com/ja-jp/HT204904
- https://support.apple.com/ja-jp/guide/disk-utility/dsku19ed921c
- https://www.macobserver.com/tips/deep-dive/macos-sierra-delete-apfs-partition-right-way/