日々適当

hibitekitou

ルートディレクトリにフォルダを掘るための仕組み

mac |2019-12-13

周知の通り、macOS Catalina においてAPFSでフォーマットされたシステムボリュームは Macintosh HDとMacintosh HD - Data という二つのボリュームに分割され、ユーザがアクセスできる領域はMacintosh HD - Dataに限定されるようになり、結果、ルートディレクトリ( / )にファイルやフォルダを自由に置く事が出来なくなりました。
当然ながらそれは各所に大きな問題を引き起こす可能性があるわけで、Appleもその対処は考えていたようです。

それがsynthetic.conf ってもの。詳しくは man synthetic.conf で出るマニュアルを読めって感じですが、これを利用する模様。

ルートに作成されるシンボリックリンクとそのリンクの指し示す先のディレクトリを記述したものだそうです。例えば、空のディレクトリを

/System/Volumes/Data

の直下に作成し、それを / に何て名前でリンクをはるかを /etc/synthetic.conf に記述する感じ。

っていう風にネットに書いてあったんですけどね、/System/Volumes/Data 直下に作成したディレクトリを指定すると、確かにその名前のものが / に現れるのだけど、(Finder上では)白紙のエイリアスファイルとしてなんすよ。ディレクトリとして認識されていない。cd コマンドでそこに移動しようとすると、そんなファイルやディレクトリは無いと怒られる。


 

<追記>原因が判明しました。synthetic.confへの書き方が間違ってました。/System/Volumes/Data/Hoge を /Hoge として見せるためには synthetic.conf に

Hoge System/Volumes/Data/Hoge

と書く必要がありました。HogeとSystemの間はタブね。

Hoge /System/Volumes/Data/Hoge

では無い。頭の/が必要なかったのですね。</追記>


 

困ってしまったのだけど、試しに /Users/Shared 直下にフォルダを掘ってそれを指定してやるとちゃんと動きました。例えば /Users/Shared/Hogeフォルダを作成し、 /etc/synthetic.conf に

Hoge /Users/Shared/Hoge

って書いてやってマシンを再起動すると /Hoge が(Finderからは)エイリアスとして見え、その中にSMBでマウントした他のマシンの共有フォルダをマウントさせると、ちゃんと /Hoge/SharedFolder/ って階層で辿ってくれます。なを、synthetic.conf 内の Hoge と /Users/Shared/Hoge の間はタブです。複数行記せば複数ディレクトリを指定可能みたいです。
ただし、その共有フォルダは

mount -t smbfs //userName:Password @NetworkMachineName/SharedFolder /Users/Shared/Hoge/SharedFolder

というコマンドでマウントしており、つまりマウントポイントは /Hoge の中ではなく /Users/Shared/Hoge の中を指定しています。

ネット上の情報では /System/Volumes/Data 直下にディレクトリを作ってそこを指定する事が出来ているようなので、僕が試した環境では何かがよろしくないという事なのだろうけど、特に Data フォルダ直下にこだわる必要もなさそうだし、実害はないかな?>


 

<追記>Finder上でエイリアスに見えるっての、これがガンかもしれん。

/Users/Shared/Hoge/MountPoint/source.jpg

これが

/Hoge/MountPoint/source.jpg

と言うように見えて欲しいのに、PhotoshopとかAfter EffectsとかはFinder上で見えるパスと同様、エイリアスと解釈してオリジナルのファイルパスを保持しちゃう。つまり、/Users/Shared/Hoge 以下の階層になっちゃう。
BlenderとかMayaなんかは意図した通り /Hoge/Mountpoint の階層を保持してくれます。
よりMac的に作られたアプリほどこの辺の問題が起こるって事でしょう。困ったねぇ。

ちなみに synthetic.conf にリンク先を記述しなければ、つまり Fuga とだけ書いたなら /Fuga ってフォルダが登場するのだけど、リードオンリーなフォルダなので、今のところこの記述による使用方法は不明です。</追記>

<追記>という事で解決したように見えつつ、エイリアス問題は回避できない模様。Finder的には /Hoge は /Syste/Volumes/Data/Hoge のエイリアスなので、オリジナルのパスの方が認識されます。これは回避しようが無いのかな。つまり
/Hoge/SharedFolder/source.jpg
ってファイルパスで保持して欲しいのに、
/System/Volumes/Data/Hoge/SharedFolder/source.jpg
ってなっちゃう。困ったね、これ。</追記>


 

man synthetic.confのGoogle翻訳

synthetic.confは、ルートマウントポイントで作成される仮想シンボリックリンクと空のディレクトリを記述します。 ルートマウントポイントはmacOS 10.15の時点では読み取り専用であるため、この場所に物理ファイルが作成されない場合があります。 すべての書き込み可能なパスは、/ System / Volumes / Dataにマウントされているデータボリュームに存在する必要があります。

synthetic.confは、/でユーザーが制御する制限されたファイル作成のメカニズムを提供します。 このファイルに記述されている合成エンティティは、システムの初期起動時にカーネルによって合成されます。 それらはディスク上に物理的には存在しませんが、システムが起動されると、特定のパラメーター内にあるかのように動作します。

synthetic.confは、/(たとえば、エンタープライズ展開でのNFSマウントポイントとして使用)のマウントポイントとシンボリックリンク(システムボリュームを変更せずにパッケージマネージャールートを作成するため)の作成に使用することを目的としています。
synthetic.confは、システムの初期起動時にapfs.util(8)によって読み取られます。

synthetic.confは、行ごとに1つの合成エンティティを指定します。 各行には、タブ文字で区切られた1つまたは2つの列があります。 行に単一の列がある場合、/に作成される仮想空ディレクトリを示します。 行に2つの列がある場合、2番目の列にリンクターゲットが指定されている/のシンボリックリンクを示します。

どちらの場合でも、最初の列は/で作成されるエンティティの名前を示します。

#文字で始まる行は、解析されないコメントを示します。

合成エンティティは実行時に削除されない場合があります。 合成エンティティを削除するには、synthetic.confから削除し、ホストを再起動する必要があります。

合成空のディレクトリ内に新しいファイルとディレクトリを作成することはできません。

# /に「foo」という名前の空のディレクトリを作成します。
foo

#/に「bar」という名前のシンボリックリンクを作成します。これは、データボリュームのルートにある書き込み可能な場所である「System / Volumes / Data / bar」を指します
bar System/Volumes/Data/bar

#/に「baz」という名前のシンボリックリンクを作成し、Users/me/baz」を指します
baz Users/me/baz

コメント ( 0 )|Trackback ( )
 
コメント
 
コメントはありません。
コメントを投稿する
ブログ作成者から承認されるまでコメントは反映されません
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。