macOS区分大小写APFS

当我在 Ubuntu镜像(采用tini替代systemd) 的容器中 安装Anaconda ,遇到了一个和底层文件系统 区分大小写 兼容性问题:

  • macOS的 APFS 在操作系统安装时,默认配置了 case insensitive ,也就是不区分大小写

  • 当使用 Docker 卷 将macOS上的文件系统目录映射到容器内部时,由于Linux文件系统是区分大小写的,所以在一些情况下会出现错乱,例如 安装Anaconda 安装报错,类似找不到文件等情况

验证方法可以采用类似如下:

检查文件系统是否区分大小写,在 case insensitive 的APFS文件系统上现象
$ cd /home2/testing/anaconda3
$ echo A > A
$ echo a > a
$ cat a
a
$ cat A
a

创建新的 case sensitive 文件系统

APFS 使用了 Containter 容器来分隔文件系统,类似于 ZFSBtrfs 的子卷

备注

虽然 macOS 内置的 Disk Utility 也能够创建分区,但是APFS并不推荐使用分区:

  • 类似 ZFS ,整个磁盘都是一个大的存储池,只需要通过子卷来分隔系统,可以充分使用磁盘

  • 只有在同一个Mac上安装其他操作系统,如Linux时候,才需要使用分区创建

  • 在APFS上添加子卷:

../../_images/apfs_add_subvolume.png

添加子卷

注意创建子卷要选择 APFS (Case-sensitive) 格式:

../../_images/apfs_add_subvolume_case_sensitive.png

添加区分字符大小写的子卷

现在,就可以重新创建 Ubuntu镜像(采用tini替代systemd) 的运行容器,映射新创建的区分大小写文件系统到容器内部,就不会导致Linux文件的问题