ESPをマウントしてついでにバックアップする
時々は行ってやらないといけないHackintoshのメンテナンスでは、ESPをマウントする必要があります。またESPのバックアップがあれば、メンテナンスで失敗しても復帰できます。ということで、メンテナンスでESPをマウントするときに、同時にバックアップも行えば、万一メンテナンスで失敗しても、稼働していた最後のESPを取り戻せると考えました。
今までの関連記事
振り返ってみると、ESPをマウントする方法と、ESPをバックアップする方法を色々書いてきました。10.13.6でdiskutil mountコマンドにパスワードが必要になったので、使えなくなった方法もあります。
単にマウントしてバックアップする
今回は、シンプルにマウントしてバックアップするスクリプトを考えました。過去に紹介したスクリプトを足し合わせた内容です。現在はこのスクリプトで、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
MPOINT=$MP3" "$MP4
else
MPOINT=$MP3
fi
cd $MPOINT
date > timestamp.txt
rsync -av --delete $MPOINT"/" $BACKUP
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
/Volumes/EFI 1
- cd $MPOINTでESPの場所にカレントディレクトリを移動しています。シェルスクリプトの実行で移動する場合は、このスクリプトに例えばESPBackup.shと名前をつけた場合、
. ESPBackup.sh
- dateコマンドでバックアップを取ったタイムスタンプを入れてみました。なくても良いですが、最後にバックアップした時刻がわかるので便利かと思います。
- 最後に、rsyncコマンドで、$BACKPで指定したディレクトリにバックアップしています。更新のあったファイルだけが置き換わります。
- おまけ。本当の最後にCLOVERディレクトリに移動しています。引き続き作業するのに便利かと思いました。