使用FDS FUSE存储
简介
FDS FUSE是基于FUSE的文件系统,允许Linux挂载FDS的存储桶(bucket)在本地文件系统。用户使用读写本地文件,后台会自动同步到FDS上。 开发环境中使用FDS FUSE用法与训练任务类似,训练任务中对应部分可参考 在TrainJob中使用Fuse 。
创建时自动挂载FDS存储
创建开发环境时,可以指定FDS bucket参数,开发环境创建成功后会自动挂载该bucket到系统中(默认/fds目录)。
- 使用命令行工具创建开发环境时,使用下列参数:
cloudml dev create -n mydev -p mypassword -fe cnbj2.fds.api.xiaomi.com -fb mybucket1
-fe
是挂载FDS存储的FDS机房地址,生态云武清机房的地址是cnbj2.fds.api.xiaomi.com
。-fb
是挂载FDS存储的bucket名称。使用WEB控制台创建开发环境时,选择
FDS Region
,并填写bucket名称到FDS存储
。
手工挂载FDS存储
对运行状态的开发环境,可以登录到环境中,手工挂载FDS存储。由于命令行工具和WEB控制台只能挂载一个FDS bucket到默认/fds路径,如果想实现挂载多个bucket或者修改挂载点,需要使用手工挂载的方式。
首先,SSH连接登录到开发环境内部
我们已经预装了挂载FDS FUSE需要的软件,只需要设置环境变量,执行下面的命令即可。
fdsfuse [FDS存储桶名] [本地目录名] [OPTION]
例如, 执行下列命令挂载C3机房
的bucket1
到/mnt
目录,使用/mntcache
目录作为缓存
export XIAOMI_ACCESS_KEY_ID="EAKxxxxxxxxxx"
export XIAOMI_SECRET_ACCESS_KEY="SKxxxxxxxxxxxxxxxxxxxxxxxxXsUbx96959ky"
export XIAOMI_FDS_ENDPOINT="cnbj2.fds.api.xiaomi.com"
mkdir /mnt
mkdir /mntcache
fdsfuse bucket1 /mnt -o use_cache=/mntcache
XIAOMI_ACCESS_KEY_ID
是用户的密钥ID,可以在融合云团队管理页面拿到XIAOMI_SECRET_ACCESS_KEY
是用户的密钥密码/mnt
是挂载点目录,和普通数据卷的挂载点相同/mntcache
是FUSE使用的缓存文件目录bucket1
是需要挂载的FDS bucket的名称指定
fdsfuse
命令挂载完成后,可以使用Linuxdf
命令查看挂载是否成功。出现类似下面类型是fdsfuse,并且对应挂载点的文件系统即表示挂载成功。用户就可以进入本地挂载目录去访问存储在FDS bucket中的对象。root@1d33c0a7ff91:/# df -h Filesystem Size Used Avail Use% Mounted on none 902G 344G 513G 41% / tmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup shm 64M 0 64M 0% /dev/shm fdsfuse 256T 0 256T 0% /mnt
卸载已挂载的FDS存储
执行umount
命令可以卸载已经挂载的FDS存储。卸载后,FDS上存储的文件不会删除。
umount [本地目录名]
例如, 执行下列命令卸载已挂载到/mnt
目录的FDS FUSE存储
umount /mnt
使用限制
- 使用FDS SDK上传文件时,通过设置文件的元信息
x-xiaomi-meta-mode
设置文件的rwx属性。例如,x-xiaomi-meta-mode=33188
对应文件的rwx属性是regularfile root rw-r--r--
。 默认rwx属性为-rw-r--r--
。 fuse中执行mkdir/touch/chmod等文件操作时,rwx属性会自动同步到FDS的文件元信息中。 - 多个dev env挂载同一个bucket时,如果使用非root用户操作文件,请确保该用户在多个dev env中拥有相同的用户id和用户组id,否则会出现读写权限问题。
- 武清机房支持单个文件最大200MB,C3机房支持单个文件超过100G。
- 执行文件的遍历操作时(比如ls命令),如果bucket下文件数量很大,会产生明显的执行延迟。因此,对于大量文件,建议分散存储到多个bucket中,每个bucket下存储文件数量不要超过10000个。