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

備考

まだ試してないけど、ホスト側のファイルシステムの属性を変えるという対応なのでVagrantVirtualBox)でもそのまま応用できるはず。

ボリュームのサイズはオンデマンドで確保されていくようだ。