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

2件のコメント

  1. 10.13.6にアップデート後、EFIがマウントできなくて困っていました。
    助かりました。
    ありがとうございました。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です