時々は行ってやらないといけないHackintoshのメンテナンスでは、ESPをマウントする必要があります。またESPのバックアップがあれば、メンテナンスで失敗しても復帰できます。ということで、メンテナンスでESPをマウントするときに、同時にバックアップも行えば、万一メンテナンスで失敗しても、稼働していた最後のESPを取り戻せると考えました。
今までの関連記事
振り返ってみると、ESPをマウントする方法と、ESPをバックアップする方法を色々書いてきました。10.13.6でdiskutil mountコマンドにパスワードが必要になったので、使えなくなった方法もあります。
| EFIシステムパーティション(頭文字を並べてESP)には、Cloverブートローダとかconfig.plist… ESPをマウントするためのシェルスクリプト - Boot macOS |
| Hackintoshを作る際に、macOSをバニラな状態でインストールすれば、Hackintoshで加える変更… ESPを自動バックアップする - Boot macOS |
| 更新:古い情報です。こちらの方法が良いと思います。(2018/9/8) 昨夜、おそらく最後のHigh Sier… 10.13.6でESPをマウントする権限が変更される - Boot macOS |
単にマウントしてバックアップする
今回は、シンプルにマウントしてバックアップするスクリプトを考えました。過去に紹介したスクリプトを足し合わせた内容です。現在はこのスクリプトで、ESPのマウントもバックアップもどちらも行っています。ESPに手を加える直前にバックアップすることになるので、合理的かと思います。
#!/bin/sh
ESPUUID=00000000-0000-0000-0000-000000000000
BACKUP=~/Documents/OSX86/_currentESP/
sudo diskutil mount $ESPUUID
MP=`diskutil info $ESPUUID | grep "Mount Point"`
MP3=`echo $MP | awk '{print $3}'`
MP4=`echo $MP | awk '{print $4}'`
if [ -n "$MP4" ]; then
cd $MP3" "$MP4
rsync -av --delete $MP3" "$MP4"/" $BACKUP
else
cd $MP3
rsync -av --delete $MP3"/" $BACKUP
fi
date > timestamp.txt
cd EFI/CLOVER
過去記事の重複になりますが、各ステップを説明します。
- 最初に定義した変数、ESPUUIDはESPのUUIDです。例えばESPがdisk0s1に割り当てられた場合、
diskutil info disk0s1
とすると色々な情報が出てきます。この中に
Disk / Partition UUID: 00000000-0000-0000-0000-000000000000というように表示されているのが、ESPのUUIDです。
- 次に定義した変数、BACKUPはESPの内容をバックアップしたい場所です。最後に/をつけます。これはのちに実行するrsyncコマンドの仕様上、重要です。バックアップ場所としては、iCloudやDropboxなどでクラウドと同期しているディレクトリを指定すると良いと思います。そうしておけば、万一マシンが起動しなくなっても、他のマシンから内容を取り寄せることができます。
- diskutil mountの行で、ESPUUIDで指定したESPをマウントします。10.13.6からsuper user権限が必要になったのでsuコマンドをつけています。実行するとパスワードを求められるのでタイプします。
- diskutil infoの行で、マウントポイントを得ています。このコマンドでマウントポイントが
Mount Point: /Volumes/EFI
のように表示されます。この行を取得しています。
- 次のawkコマンドとif文が続くところで、diskutil infoコマンドで得られる行から、マウントポイントだけを抽出しています。ややこしいですが、マントポイントは、最初は
/Volumes/EFI
になるのですが、2個目以降は
/Volumes/EFI 1
のように、空白+数字になります。どっちでも対応できるようにif文で対応しています。
- cd $MP3″ “$MP4もしくはcd $MP3でESPの場所にカレントディレクトリを移動しています。シェルスクリプトの実行で移動する場合は、このスクリプトに例えばESPBackup.shと名前をつけた場合、
. ESPBackup.sh
として実行します。.の後には空白を入れます。
- rsyncコマンドで、$BACKPで指定したディレクトリにバックアップしています。更新のあったファイルだけが置き換わります。
- dateコマンドでバックアップを取ったタイムスタンプを入れてみました。なくても良いですが、最後にバックアップした時刻がわかるので便利かと思います。
- おまけ。本当の最後にCLOVERディレクトリに移動しています。引き続き作業するのに便利かと思いました。
