Macでファイル名の大文字小文字を区別する(High Sierra以降)
仮想Linux環境とファイル共有するとき、ホストであるMac側のファイルシステムがケースセンシティブじゃないのでたまに困る。High Sierra以降だと簡単に対応できるので以下に手順をまとめる。
APFS
High Sierra から新しいファイルシステムAPFS(Apple File System)が導入されている。 APFSでフォーマットしたパーティションはAPFSコンテナとして扱われ、コンテナ内には任意の数のボリュームを作成することができる。そして、ボリュームごとに違うフォーマットにすることができる。
つまりAPFS(大文字/小文字を区別)でボリュームを追加するだけで問題解決する。
手順
- ディスクユーティリティを起動
- 左のリストからMacintosh HDを選択
- パーティション作成をクリック
- ボリュームを追加をクリック
- 任意の名前を設定し、フォーマットをAPFS(大文字/小文字を区別)にして追加を押す
追加したボリュームは設定した名前で/Volumesにマウントされている。以下は"dev"という名前で追加した例。
$ ls -l /Volumes total 0 lrwxr-xr-x 1 root wheel 1 10 9 11:07 Macintosh HD -> / drwxrwxr-x 6 root admin 192 10 14 17:52 dev
効果確認
追加したボリューム内のディレクトリをDockerコンテナにマウントして、ケースセンシティブな操作をしてみる。
$ docker container run --rm -it -v /Volumes/dev/hoge:/docker/hoge busybox /bin/sh / # cd /docker/hoge /docker/hoge # touch fuga /docker/hoge # touch FuGa /docker/hoge # ls FuGa fuga /docker/hoge # exit $ ls /Volumes/dev/hoge FuGa fuga
Macに戻ってから確認しても、fugaとFuGaが共存している。
デフォルトのボリューム内のディレクトリをマウントして同じ操作を行うと、以下のようにLinuxの時点で両者を区別できない。
$ cd $ docker container run --rm -it -v ${PWD}/hoge:/docker/hoge busybox /bin/sh / # cd /docker/hoge /docker/hoge # touch fuga /docker/hoge # touch FuGa /docker/hoge # ls fuga /docker/hoge # exit $ ls hoge fuga
備考
まだ試してないけど、ホスト側のファイルシステムの属性を変えるという対応なのでVagrant(VirtualBox)でもそのまま応用できるはず。
ボリュームのサイズはオンデマンドで確保されていくようだ。