サイトアイコン Boot macOS

ESPを自動バックアップする

Hackintoshを作る際に、macOSをバニラな状態でインストールすれば、Hackintoshで加える変更は全てESP (EFI System Pertition)の中だけです。

なので、Hackintoshの設定を変えたことが原因で起動しなくなっても、正しく動いているESPさえバックアップされていれば、それを使って起動することができます。ということを以下に書きました。

Hackintoshでkextを入れ替えたり、config.plistを書き換えたりなど、色々実験していると、…
起動失敗に備えてバックアップ - Boot macOS

今回は、そのESPをどこに、どうやってバックアップしたら良いかについて考えてみました。

ESPをTime Machineにバックアップする

macOSを使うならTime Machineを使わない手はないです。

macOSの良いところはたくさんあります。インクリメンタルバックアップのTime Machineが、OS標準で…
Time Machineは良いです - Boot macOS

Time MachineでESPをバックアップしておけば、差分バックアップ機能により、過去の設定に戻すこともできます。ESPの設定を変えて、一見正しく動いているように見えたけど、しばらくしたら不具合に気づいたという場合がたまにあります。そんな時も、変更前の過去の設定に簡単に戻せるので便利です。やり方は、ESPの内容を、書類フォルダや、そのほかの、Time Machineの対象にしているフォルダにコピーしておくだけです。あとはTime Machineが個々のファイルの更新状態を確認して、自動的にバックアップしてくれます。

ESPをクラウドファイルサーバにバックアップする

クラウドファイルサーバと同期しているフォルダにESPをバックアップしておけば、他のマシンやWebから参照できます。Hackintoshが起動しなくなっても、他のマシンでESPを使って起動USBメモリを作り、救済することができます。

iCloud Driveを使っていれば書類フォルダをクラウドにバックアップできます。無料アカウントだと容量が少なく書類フォルダをiCloud Driveに置けないかもしれません。その場合は、iCloud Driveの同期対象フォルダの中に専用のフォルダを作っても良いでしょう。iCloud Driveの同期対象フォルダは

~/Library/Mobile Documents

です。もちろん、Dropbox, Google Drive, One Driveなどのサードパーティのクラウドサービスでも良いです。

また、これらの同期対象フォルダを、Time Machine対象にもしておけば、前述のように、過去の設定に戻すことも可能です。

シェルスクリプトでESPバックアップする

ということで、ESP全体をTime Machineバックアップ対象で、さらにクラウド同期対象のフォルダにコピーすれば良いわけです。そのためには、

  1. ESPをマウントする
  2. 内容をコピーする
  3. ESPをアンマウントする

手順が必要です。ESPをマウントしっぱなしにすれば手間は減りますが、誤操作やセキュリティのことを考えると、不要な時はマウントしない方が良いと考えます。ではこの手順をシェルスクリプトで自動化してみましょう。

ターミナルから

diskutil list

コマンドすれば、SSD/HDDの一覧を見ることができます。複数のSSD/HDDが搭載されていると、/dev/disk0、disk1、disk2と複数のボリュームを確認できます。このドライブ番号の割り当ては起動するごとに変化します。なのでESPのある起動ボリュームの番号も、毎回変動します。一方で、ボリュームやパーティションにはUUID (Universally Unique Identifier)が割り当てられていて、こちらは不変です。

ESPのUUIDは次のコマンドで知ることができます。 例えばESPが、disk0s1に割り当てられている場合、

diskutil info disk0s1

とすると、いろいろな情報が出てきます。この中に、

Disk / Partition UUID:    9FXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

というように表示されているのが、ESPのUUIDです。

UUIDがわかれば、次のようなスクリプトで、ESPをマウントして、コピーして、アンマウントできます。

#!/bin/sh
ESPUUID=9FXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
BACKUP=~/Documents/Hackintosh/_currentConfig/Z97A/
diskutil mount $ESPUUID
rsync -av --delete /Volumes/EFI/ $BACKUP
diskutil unmount $ESPUUID

ここでは、書類フォルダの中のHackintosh/_currentConfig/Z97A/の中に、ESPの内容をコピーしています。rsyncコマンドは、-aオプションつけることでバックアップに使えます。更新のあったファイルだけがコピーされます。-vは進行状況を詳しく表示するオプションです。動作確認には便利ですが、後で自動化するときには不要かもしれません。また–deleteは、オリジナルファイルが消去された場合に、バックアップ先でも消去するというオプションです。

ログイン項目に設定する

このシェルスクリプトをログインするたびに動かせば、最新のESPをバックアップしておけます。そこで、「システム環境設定」「ユーザとグループ」からログイン項目に追加してみます。起動に失敗したらスクリプトは動かないので、必ず動く状態のESPがバックアップされます。バックアップ先がTime Machineの対象なら過去に遡って設定を復元できますし、クラウド同期対象なら他のマシンから見ることができます。

なお、シェルスクリプトをログイン項目に追加する場合には、拡張子をcommandにしておく必要があります。commandの場合は、ファインダからの起動でTerminal.appが起動するからです。

Automatorでアプリケーションにする

これまでの方法で、全く問題なくバックアップできるのですが、ログイン直後にTerminal.appが起動したままになるのがちょっと邪魔です。この問題は、シェルスクリプトをアプリケーションにすれば解決します。

macOSには、シェルスクリプトをmacOSのアプリケーションにしてしまう、便利なツールがあります。Automator.appです。これを使えば、通常のアプリケーションと同様に、アイコンをダブルクリックすると単体で起動するようになります。今回は使いませんが、ドラッグ&ドロップも機能します。

Automator.appを起動し、アプリケーションを選び、アクションから「シェルスクリプトを実行」をドラッグもしくはダブルクリックで選びます。右に出たウィドウに、先ほどのシェルスクリプトをコピー&ペーストします。

これを保存すれば、シェルスクリプトがmacOSアプリケーションになります。

これをログイン項目に登録すれば、バックアップが実行された後、痕跡なく終了します。

モバイルバージョンを終了