Mac信者のHackintosh修行

惑星で一番美しいOSが1台でも多くのマシンで動くことを目指します。

ESPをマウントしてついでにバックアップする

時々は行ってやらないといけないHackintoshのメンテナンスでは、ESPをマウントする必要があります。またESPのバックアップがあれば、メンテナンスで失敗しても復帰できます。ということで、メンテナンスでESPをマウントするときに、同時にバックアップも行えば、万一メンテナンスで失敗しても、稼働していた最後のESPを取り戻せると考えました。

今までの関連記事

振り返ってみると、ESPをマウントする方法と、ESPをバックアップする方法を色々書いてきました。10.13.6でdiskutil mountコマンドにパスワードが必要になったので、使えなくなった方法もあります。

siroanko.hatenablog.com

siroanko.hatenablog.com

siroanko.hatenablog.com

単にマウントしてバックアップする

今回は、シンプルにマウントしてバックアップするスクリプトを考えました。過去に紹介したスクリプトを足し合わせた内容です。現在はこのスクリプトで、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コマンドの仕様上、重要です。バックアップ場所としては、iCloudDropboxなどでクラウドと同期しているディレクトリを指定すると良いと思います。そうしておけば、万一マシンが起動しなくなっても、他のマシンから内容を取り寄せることができます。
  • 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 $MPOINTでESPの場所にカレントディレクトリを移動しています。シェルスクリプトの実行で移動する場合は、このスクリプトに例えばESPBackup.shと名前をつけた場合、

    . ESPBackup.sh

    として実行します。.の後には空白を入れます。
  • dateコマンドでバックアップを取ったタイムスタンプを入れてみました。なくても良いですが、最後にバックアップした時刻がわかるので便利かと思います。
  • 最後に、rsyncコマンドで、$BACKPで指定したディレクトリにバックアップしています。更新のあったファイルだけが置き換わります。
  • おまけ。本当の最後にCLOVERディレクトリに移動しています。引き続き作業するのに便利かと思いました。