Mac信者のHackintosh修行

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

ESPをマウントするためのシェルスクリプト

EFIシステムパーティション(頭文字を並べてESP)には、Cloverブートローダとかconfig.plistとかkextファイルなどが置かれてます。ESPは通常はマウントされていませんので、これをメンテするときに、マウントする必要があります。例えば、ESPが/dev/disk0s1にある場合は、ターミナルから

diskutil mount /dev/disk0s1

とすればマウントできます。すると/Volumes/EFI以下にマウントされます。必要ならばここにcdしたり、これをファインダーに表示させます。

でもこの一連の作業が面倒なので、こんなシェルスクリプトを作って使っています。マウントしたESPは、マウントした順番に/Volumes/EFI, /Volumes/EFI 1, /Volumes/EFI 2のマウントポイントに割り当てられます。このスクリプトでは、マウントした後にCLOVERのディレクトリにcdしています。 この後、open .などすればファインダに表示することもできます。

#!/bin/sh

 

if [ $# -eq 0 ]; then

DRIVE="0"

else

DRIVE=$1

fi

 

diskutil mount /dev/disk${DRIVE}s1 

 

MP=`diskutil info disk${DRIVE}s1 | grep "Mount Point"`

MP3=`echo $MP |  awk '{print $3}'`

MP4=`echo $MP |  awk '{print $4}'`

 

if [  -n "$MP4"  ]; then

cd $MP3" "$MP4"/EFI/CLOVER"

else

cd $MP3"/EFI/CLOVER"

fi

これをファイルにして、名前をつけて、実行可能にします。例えば、mountESPという名前のファイルにした場合、

/dev/disk2s1 をマウントしたいならば、ターミナルから以下のようにタイプします。

. mountESP 2 

 

引数を省略すると/dev/disk0s1がマウントされます。ドライブが1個しかないマシンでは、必ず/dev/disk0に割り当てられるので、番号を省略できると便利と考えました。

. mountESP

 

ちなみに冒頭のピリオド空白(. )は重要です。通常よくやるように./mountESPとすると、最後のcdコマンドが効きません。実際には効いているのですが、シェルスクリプト実行環境の中で効いているので、ターミナルのプロンプトに戻ると元のディレクトリに帰って来てしまいます。ピリオド空白(. )は、ターミナルの実行環境のままで、キー入力そのもののようにスクリプトを実行するという意味だそうです。

 

追記:10.13.6からESPをマウントするのに管理者パスワードが必要になりました。なので、上記のスクリプトも、diskutil mountの行を、以下に変更する必要があります。(2018/7/10)

sudo diskutil mount /dev/disk${DRIVE}s1