MacOS のバージョンアップテストをする

## はじめに
毎年の MacOS のバージョンアップは通過儀礼のようなもので、バージョンアップしないで過ごすという選択肢もありですが、それを続けていると最新版からどんどんと遅れて行き、いずれはまとめて大きな変更を伴うバージョンアップが必要になります(これは Homebrew も同じことですね)。

都度のバージョンアップが望ましいわけですが、旧いシステムの保守運用業務などを行っていると、万が一それで業務が止まるようなことになってもこまります。Linux などであれば、仮想マシン上で更新してその結果で判断することもできるのですが。

ここでは MacOS のバージョンアップテストをする方法を紹介致します。あくまでテストなので問題があれば破棄するだけのことです。

### 概要
1. 現在動作している MacOS を外付け(USB 接続とか)の HDD にコピーする。
    * ここでディスクが暗号化されている場合は、暗号解除の手順を踏む。
2. コピー後のディスクで起動後、バージョンアップを行い動作を確認する。
3. 問題がなければ、本体のディスク上の OS を再度バージョンアップする。

### 必要なもの
フォーマット済の外付け HDD 一台

### 手順
誰でもできるように都度、スクリーンショットを撮っていますが、リカバリモード中なのでスマホのカメラを使っています:-)

#### リカバリモードでの起動
外付け HDD は繋いでいない状態で、「Command + R」を押しながら Mac を起動し、「日本語」を選択して、リカバリモードのメインメニューを表示します。

#### ディスクの暗号化を解除する
この手順はディスクを暗号化していなければ、不要です。
本体のディスクが暗号化されているとコピーができないので、先に暗号化を解除します。
ちょっと裏技っぽい解除方法です。

1. Time Machine バックアップから復元を選ぶ。
![DSC_0186.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/ed218444-fb72-94e0-5fc5-db44b4fd1c3e.jpeg)

2. 「Time Machine から復元」が表示されるので、「続ける」 を選択する。
![DSC_0187.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/476fc9c3-a51a-494d-d4c4-1e295d687cf2.jpeg)

3. 「バックアップ済データの選択」が表示されるので、銀色のアイコンの「Macintosh HD」を選択する。
![DSC_0188.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/05746e02-43e5-ea4b-eccb-85c82bcdccf7.jpeg)

4. 「バックアップ済データの選択」が表示されるので、「Macintosh HD」が選択されていることを確認して、「ロックを解除…」を選択する。
![DSC_0189.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/8a0c4b90-4efb-b868-ae45-b9809ff54989.jpeg)

5. ロック解除用のパスワードを入力して、「ロックを解除」を選択する。
![DSC_0190.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/76183335-bc02-8e1b-79f7-7068a30ea14d.jpeg)

6. 「OSX ユーティリティ」に戻る。
![DSC_0191.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/1e7abc39-3d68-0d74-7162-69cb42346e02.jpeg)

#### ディスクをコピーする
1. 「OSX ユーティリティ」より「ディスクユーティリティ」を起動する。
![DSC_0191.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/1e7abc39-3d68-0d74-7162-69cb42346e02.jpeg)

2. 外付け HDD を接続し、コピー先の HDD のパーティションを選択する。下記のスクリーンショットでは「外部」の「WDC WD10 JPVX…」の「500GB」がこれに該当する。
![DSC_0193.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/f9509aab-4da7-320e-e2e7-7afc53ad7bd4.jpeg)

3. メニューバーの「編集」より「復元」を選ぶ。
![DSC_0194.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/9deb6a43-6c7d-b4f2-3c49-3c7e9b658654.jpeg)

4. 復元先と復元元を確認の上、「復元」ボタンを押す。復元先が外付け HDD のパーティション(この場合は「500GB」)、復元元が「Macintosh HD」となっていることを確認すること。
![DSC_0195.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/c4afa34e-5503-1484-5443-484e105b2204.jpeg)

5. 「復元」の完了を待つ(数時間程度)。
![DSC_0197.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/10a6a8af-9672-c0ee-82a2-f1633494ab0e.jpeg)

6. 完了後にシステム終了する。
![DSC_0216.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/d4f78cc7-19ff-cb95-5f06-ca66792b66d5.jpeg)

#### 外付けディスクの MacOS で起動する

1. 「option」キーを押しながら起動する。
2. 起動するディスクの選択画面が表示されるため、黄色い外付け HDD(通常 Macintosh HD という名前)を選択する。
![DSC_0215.JPG](https://qiita-image-store.s3.amazonaws.com/0/31030/829570c6-d85d-8fe8-1151-62e5321ff702.jpeg)

3. 起動後に一部パスワードの再入力などがあるが、そのまま OS をバージョンアップする。

#### MacOS バージョンアップ後の動作確認
バージョンアップ後の OS で気になる部分が動作するか確認する。

#### 元の MacOS に戻す
もし、何らか問題があった場合は以下の手順で元に戻す。

1. Mac を停止する。
2. 外付け HDD を取り外す。
3. 「option」キーを押しながら起動し、 銀色の「Macintosh HD」を選択する。

### なぜこの方法を取るのか
そのままバージョンアップして問題があっても TimeMachine のバックアップがあれば戻せるとは思いますが、それなりに時間がかかります。また、バックアップからの復元とはいえ、一応インストール済で問題なく動いている OS に変更を加えることになりますので、一定程度のリスクを伴います。

この方法の場合は、最初にリカバリモードに入るという面倒はありますが、上記の問題はありません。ちなみに MacOS の以前のバージョンでは、リカバリモードに入らずともディスクコピーが可能でした(なんらかの不整合は発生していたとは思われますが)。

### おまけ
コピー後のディスクを繋いでして以下のようなコマンドを定期的に実行しておけば、常に最新の状態を保つことができます。若干の不整合が起こることがありえますし、仮想マシンのイメージなどは対象から除外するべきです。

```shell-session
# /usr/bin/rsync -av --delete --partial --progress -E -x -S \
    --exclude="/tmp/*" \
    --exclude="/Network/*" \
    --exclude="/cores/*" \
    --exclude="*/.Trash" \
    --exclude="/afs/*" \
    --exclude="/automount/*" \
    --exclude="/private/tmp/*" \
    --exclude="/private/var/run/*" \
    --exclude="/private/var/spool/*" \
    --exclude="/private/var/vm/*" \
    --exclude="/private/var/tmp/*" \
    --exclude="/private/var/log/*" \
    --exclude="/private/var/launchd/*" \
    --exclude="Previous Systems.localized" \
    --exclude=".Spotlight-*/" \
    / /Volumes/500GB/
```

※ 昔どこかの記事で読みました。TimeMachine より前はこれでバックアップしていました。