Skip to main content

UID / GID 自动映射

JuiceFS 支持 POSIX 兼容的 ACL 体系,可以将权限管理粒度细化到目录乃至文件级别,使用方法跟本地文件系统基本一致。特别之处在于,JuiceFS 支持多机共享访问,为保证同一名称用户在不同主机上尽可能一致的体验(例如,用户 A 在主机 X 上可以访问的文件在主机 Y 上也应该可以访问)JuiceFS 提供了基于用户名及组名的文件系统 UID / GID 自动映射功能。

简单来说,就是同样名称但不同 UID / GID 的用户创建的文件会在元数据里自动映射为同一个内部 UID / GID,在挂载到主机时再转换为与之匹配的本地 UID / GID。

具体示例

在 Ubuntu 系统的主机 X 上创建 UID 为 1001 的用户 juicefs,挂载 JuiceFS 到 /jfs,然后在其中创建一个空目录 juicefs@ubuntu

[ubuntu]# useradd -m -G sudo -u 1001 juicefs
[ubuntu]# id juicefs
uid=1001(juicefs) gid=1001(juicefs) groups=1001(juicefs),27(sudo)
[ubuntu]# su juicefs
[ubuntu]$ mkdir /jfs/juicefs@ubuntu

在 CentOS 系统的主机 Y 上创建 UID 为 2002 的同名用户 juicefs,挂载 JuiceFS 到 /jfs,然后在其中创建一个空目录 juicefs@centos

[centos]# useradd -m -G wheel -u 2002 juicefs
[centos]# id juicefs
uid=2002(juicefs) gid=2002(juicefs) groups=2002(juicefs),10(wheel)
[centos]# su juicefs
[centos]$ mkdir /jfs/juicefs@centos

通过 ls -l 列取目录所有者,可以看到在两个主机下目录的所有者均显示为juicefs

[ubuntu]$ ls -l /jfs
drwxr-xr-x 2 juicefs juicefs 4096 Aug 22 13:02 juicefs@centos
drwxrwxr-x 3 juicefs juicefs 8192 Aug 22 12:35 juicefs@ubuntu
[centos]$ ls -l /jfs
drwxr-xr-x. 2 juicefs juicefs 4096 Aug 22 13:02 juicefs@centos
drwxrwxr-x. 3 juicefs juicefs 8192 Aug 22 12:35 juicefs@ubuntu

实现方式

通过 ls -n 查看目录所有者的 UID 和 GID。

可以看到 CentOS 下 UID 2002 用户创建的目录 juicefs@centos 在 Ubuntu 下映射为 UID 1001

[ubuntu]$ ls -n /jfs
drwxr-xr-x 2 1001 1001 4096 Aug 22 13:02 juicefs@centos
drwxrwxr-x 3 1001 1001 8192 Aug 22 12:35 juicefs@ubuntu

而 Ubuntu 下 UID 1001 用户创建的目录 juicefs@ubuntu 在 CentOS 下映射为 UID 2002

[centos]$ ls -n /jfs
drwxr-xr-x. 2 2002 2002 4096 Aug 22 13:02 juicefs@centos
drwxrwxr-x. 3 2002 2002 8192 Aug 22 12:35 juicefs@ubuntu

JuiceFS 客户端会在挂载文件系统时,会建立系统里所有用户名及组名到内部 ID 的哈希映射,将匹配成功的内部 UID / GID 自动转换为对应名称的实际 UID / GID。如果匹配失败,则不进行转换。

在本例中删除 juicefs 用户,并重新挂载 JuiceFS,即可列取目录查看内部 ID:

# userdel juicefs
# umount /jfs
# ./juicefs mount $JFS_NAME /jfs
# ls -l /jfs
drwxr-xr-x. 2 27055 27055 4096 Aug 22 13:02 juicefs@centos
drwxrwxr-x. 3 27055 27055 8192 Aug 22 12:35 juicefs@ubuntu

注意事项

JuiceFS 默认将系统用户名映射为保留区段的内部 ID,建议用户避免使用 10000 以上的 UID,以降低产生冲突的概率。如需关闭此功能,请通过屏幕右下方的对话框联系客户支持。