lock_hfs_volumeコマンド

2024-10-12/2024-12-03

lock_hfs_volumeは、Mac OS拡張フォーマット (HFS+ format) のディスクをロックするユーティリティです。 このコマンドを実行すると、Mac用のハードディスクやUSBフラッシュドライブなどの記録メディアを書き込み禁止にできます。

当サイトではmacOS用のlock_hfs_volumeコマンドをtarballに固めて配布しています。 lock_hfs_volumeは、まかないめし的な手抜きプログラムであり、何の保証もありませんが、使ってみたい方は次の手順で入手できます(もちろん、ご利用は自己責任で)。 ※このソフトウェアの不具合により重要なデータが失われたとしても何の補償もできません。大変危険なツールなので、このページの説明を読んでもチンプンカンプンな人は使わないように。

ターミナルから、curlコマンドを使ってtarball (lock_hfs_volume.tar.gz) をダウンロードします。

% curl -O https://zone0.net/jp/2024/lock_hfs_volume/lock_hfs_volume.tar.gz

ダウンロードしたtarballを展開し、PATHの通っているディレクトリに配置します。 /usr/local/bin ディレクトリに配置する場合のコマンドラインは次の通り。

% sudo mkdir -p /usr/local/bin #展開先が存在しないなら作成する。
% sudo tar zxfv lock_hfs_volume.tar.gz -C /usr/local/bin

実行できることを確認します(macOS Big Sur 11以降に対応しています)。

% lock_hfs_volume -h
usage: lock_hfs_volume [-hpuV] device
  -h     display this help
  -p     dry run
  -u     unlock HFS volume
  -V     display program version
example:
  lock_hfs_volume /dev/disk99
  lock_hfs_volume -u /dev/disk99

書き込み禁止にできるディスクの作成方法

書き込み禁止にしたいディスクにデータを保存する前に、次の設定でフォーマットしてください。 この例ではフォーマットしたいディスクのデバイスファイルが disk99 であると仮定します(実行時には実際のデバイスファイルに読み替えてください)。

ターミナルから次のようなコマンドラインを実行します('Lockable Disk' の部分は、お好きなディスク名でOK)。 ※ディスク内のデータはすべて消えるので、間違ったデバイスファイルを指定しないように注意!

% diskutil eraseDisk HFS+ 'Lockable Disk' APM disk99

ディスクユーティリティでフォーマット(消去)しても構いません。その場合は次のように設定します(ジャーナリングは必要ないのですがOS X El Capitan 10.11以降ディスクユーティリティのGUIでは、ジャーナリングなしの「Mac OS 拡張」フォーマットは指定できません)。

※サイズ制限: 2 TBを超えるディスクは、これらの方法では初期化できません。

仕様ってなんだっけ?

HFS Plus Volume Format の仕様によれば、どのパーティション方式でもロック可能なはずなのですがmacOSのバグのせいで Appleパーティションマップ (APM) 以外のディスクは書き込み禁止にできません。

このバグについてアップルに問い合わせたところ、さらっと「それは仕様です」をブチかまされた(説明は丁寧だったけどね)。しかし、このプログラムを作成している時点で、アップルのWebサイト内にこの挙動が正当であることを示す公開文書は存在しない。

逆に『Technical Note TN1150』にはバグであると明記されている。

「バグは夜更け過ぎに仕様へと変わるだろう〜♪」を地で行くアップルちゃん、ステキ。 まあ、男がいったん仕様だと口にしたからには、いまさら直すわけにもいかないという事情も分からなくはない。それが正しい動作である証拠(仕様書)は見せてやんないけど、武士に二言は無いってことなのねん。

ちなみに、サードパーティー製のWindows向けHFS+ファイルシステムドライバ「HFS+ for Windows by Paragon Software」や、LinuxのHFS+ファイルシステムドライバは、lock_hfs_volumeコマンドでロックしたディスクがGUIDパーティションマップ (GPT) 形式であっても正しく読み取り専用としてマウントする。

おっと、アップルのエンジニアの言によると ボリュームのロック属性がオンになっていても無視して書き込める というトチ狂った動作が正しい仕様なんだった。みんな、仕様を満たしてないな。アハハ、困ったもんだ。

※Boot Campに含まれるWindows用HFS+ドライバソフトウェアは、そもそも書き込みに対応していないのでロックされていようがいまいが動作に違いはない。

lock_hfs_volumeの使い方

まず、ロックしたいディスクをアンマウントします。この例ではディスクのデバイスファイルが disk99 であると仮定します(実行時には実際のデバイスファイルに読み替えてください)。 ※一連の操作はスーパーユーザ(root権限)で実行する必要があります。

# diskutil unmountDisk disk99

同じデバイスファイルに対して lock_hfs_volume コマンドを実行します。

# lock_hfs_volume /dev/disk99

逆にアンロックしたい場合はオプション -u を指定します。

# lock_hfs_volume -u /dev/disk99

ディスクを取り出します。

# diskutil eject disk99

ディスクを再接続し、書き込み禁止になっていることを確認します。 Finderのステータスバーを表示すると、ウインドウ左下に書き込み禁止状態を表すアイコンが表示されているのが分かります。

ディスクに複数のHFS+ボリュームが含まれる場合、先頭にある(パーティションマップに最初に出現する)HFS+ボリュームだけがロックされます。