macOS Catalina でルートフォルダーに自由にシンボリックリンクを作成する

オペレーティングシステム

macOS Catalina で、任意のフォルダーへのシンボリックリンクをルートフォルダーに作成する方法があったので試してみました。


mac で Catalina 以前に使っているアプリでルートからの絶対パスしていでデータの場所を管理しているものがあったのですけれど、Catalina ではルートフォルダーへの書き込みが root でもできなくなっています。

そうなるとルートフォルダーに任意のフォルダーを作成する方法は無いかあっても強引な方法か⋯みたいに思ってみたのですけれど、 調べてみると Catalina でもその方法が標準で用意されているようだったので、設定してみることにしました。

事前知識

Catalina でルートフォルダーにシンボリックリンクを作成するにあたって、 まずは Catalina 特有のパーティション構成を知っておくとイメージを掴みやすそうです。

Catalina では、ルートフォルダーが Macintosh HDMacintosh HD - Data みたいに 2 つのパーティションで構成されているようです。

パーティションの占有状況から見て、実際のデータファイルは Macintosh HD - Data に保存されていて、 もうひとつの Macintosh HD には表向きのフォルダーだけが用意されている様子です。 実際に他の mac を起動してこのパーティションをマウントしてみてもその様子が窺えるのですけれど、 だからといって他の macOS を使って同じようにフォルダーを作成してもルートフォルダー内には表示されてくれませんでした。

この辺りを Catalina では Firmlink という仕組みで管理しているらしく、ルートフォルダーから任意のフォルダーへの リンクを /etc/synthetic.conf で管理している様子です。

ルートフォルダーから任意のフォルダーへのリンクを作る

管理の様子がわかったところで、実際にルートフォルダーに別のフォルダーへのシンボリックリンクを作成してみることにします。

実体のフォルダーを用意する

ルートフォルダーからリンクしたいフォルダーは、基本的には通常通りの方法で用意することになる様子です。 普段から使えるどこかのフォルダーにフォルダーを作って、用途に合ったアクセス権限を設定します。

ルートフォルダーにフォルダーを新規作成したいとき

ちなみに、フォルダー自体もルートフォルダーに作成することも一応はできて、 そうしたい場合には /System/Volumes/Data にマウントされている Macintosh HD - Data ボリュームにフォルダーを作成すれば良いようです。そして、ここに対してシンボリックリンクを設定することになります。

このフォルダーはシステム権限であれば書き込めるようになっているので、ここに例えば XXX という フォルダーを作成するとき、ターミナルを使う場合は次のように操作します。

cd /System/Volumes/Data
sudo mkdir XXX

このフォルダーを普段、自由に読み書きしたいのであれば、次のようにして このフォルダーを自分自身の所有にします。

sudo chown $USER XXX

ルートフォルダーからのリンクを作る

ルートフォルダーから任意のフォルダーへのシンボリックリンクを作るには、/etc/synthetic.conf ファイルに対して 次の書式で必要な情報を記載します。

ルートフォルダー上のフォルダー名    実際のフォルダーへのリンク

たとえば /System/Volumes/Data/XXX/YYY というフォルダーを、 ルートフォルダーに YYY という名前でマウントしたい場合には、 次のように記載します。

YY    /System/Volumes/Data/XXX/YYY

こうして設定を終えたら mac を再起動してあげることで、 指定したフォルダーがルートフォルダー上からアクセスできるようになります。

/etc/synthetic.conf の書き換えには管理権限が必要なので、たとえば ;sudo vi /etc/synthetic.conf などとして、管理権限で編集します。また、最初はファイルそのものが存在しない様子でしたけれど、普通に新規作成すれば大丈夫でした。

作成したリンクへのアクセス方法

ここまでできれば、あとは普段通りの方法で作成したフォルダーにアクセスできます。 Finder からアクセスする場合は、ルートフォルダーを開けばそこに指定したフォルダーがリンクとして用意されているので、 それを普通に開きます。

ターミナルからアクセスしたい場合には、ルートディレクトリーから辿り着けるようになっているので、 今回の場合であれば次のようにしてアクセスすることが可能です。

cd /YYY