Skip to main content

导入文件系统

不论是企业版还是社区版,JuiceFS 都支持用 juicefs [dump|load] 导出、导入文件系统的元数据。由于 JuiceFS 采用元数据与数据分离的架构,文件数据独立存储在你所选用的对象存储服务,因此导入文件系统,事实上就是导入元数据的过程——对象存储数据并不需要搬运。如果你还不熟悉这种分离存储的设计,阅读我们的架构介绍

提示

和 JuiceFS 社区版不同,你不需要特意用 juicefs dump 来备份 JuiceFS 企业版的元数据——我们的运维团队已经保证了所有元数据服务都在定期备份。简而言之,企业版用户不需要操心备份和恢复的工作。

因此对于企业版,导出和导入功能可以用来:

  • 从企业版迁移到社区版,具体的操作步骤未在本章介绍,如有需要请联系我们的工程师
  • 导出元数据,用于分析排查

下面以社区版 → 企业版为例,介绍如何导入文件系统。

兼容性注意事项

社区版和企业版的文件系统是兼容的、可以互相迁移,但需要注意:JuiceFS 企业版支持并默认开启「UID/GID 自动映射」,简单来说,JuiceFS 会将同名的用户和组映射成相同的 UID / GID。但由于社区版并未实现该特性,因此对于导入的文件系统,会自动禁用自动映射,防止产生权限错乱问题。

导出文件系统

导出之前,先将文件系统的配置记录下来,比方说 block size、压缩和加密设置,这些设置都需要在目标文件系统进行对齐,导入才能顺利运行。不难想象,如果源文件系统和目标文件系统使用不同的 block size,或者压缩设置,那么对象存储的数据是绝对无法交叉读取的。

在一个能够访问元数据引擎的环境,使用 status 命令就能打印这些信息:

$ juicefs status META-URL
{
"Setting": {
"Name": "myjfs",
"UUID": "6b0452fc-0502-404c-b163-c9ab577ec766",
"Storage": "s3",
"Bucket": "https://xxx.s3.amazonaws.com",
"AccessKey": "xxx",
"SecretKey": "removed",
"BlockSize": 4096,
"Compression": "none",
"TrashDays": 1,
"MetaVersion": 1
},
...
}

接下来,使用 dump 命令导出 JSON 格式的文件系统元数据:

juicefs dump META-URL /tmp/meta.json

# 对于大规模文件系统,在目标文件添加 gz 后缀以启用压缩
juicefs dump META-URL /tmp/meta.json.gz

在导出结果中,同样也包含了文件系统的配置信息,如果在前序步骤中的 juicefs status 输出信息没有保存好,也可以直接从 JSON 文件中获取:

# 记录其他关键的文件系统配置,这些设置都记录在 JSON 文件的 Setting 字段中,此处不再一一列举
head -n 20 meta.json

元数据已经导出,文件系统的配置也已经记录好了,接下来开始创建目标文件系统。

准备目标文件系统

登录云服务控制台,点击右上角「创建文件系统」,但并不急着填写信息,而是继续点击对话框右上角的「导入文件系统」,在接下来的界面中仔细阅读各项设置,并按照源文件系统的情况进行填写。

import file system

导入元数据

导入元数据需要用 JuiceFS 客户端来执行,因此你需要先挂载好文件系统。如果你尚不熟悉如何安装 JuiceFS 客户端、挂载文件系统,可以阅读「快速上手」

# 挂载文件系统
juicefs mount myjfs /jfs

# 导入元数据文件
juicefs load /jfs /tmp/meta.json

如果两个文件系统的关键设置都正确对齐,那么导入命令会顺利完成(退出码为 0)。接下来用 ls 访问挂载点,就能够看到文件元数据已经顺利导入了。挑选一个有实际内容的文件来读取、确认一切运作正常吧。