1.7.4.2 使用FDS FUSE存储

优质
小牛编辑
135浏览
2023-12-01

简介

FDS FUSE是基于FUSE的文件系统,允许Linux挂载FDS的存储桶(bucket)在本地文件系统。用户使用读写本地文件,后台会自动同步到FDS上。 开发环境中使用FDS FUSE用法与训练任务类似,训练任务中对应部分可参考 在TrainJob中使用Fuse 。

创建时自动挂载FDS存储

创建开发环境时,可以指定FDS bucket参数,开发环境创建成功后会自动挂载该bucket到系统中(默认/fds目录)。

  1. 使用命令行工具创建开发环境时,使用下列参数:
    cloudml dev create -n mydev -p mypassword -fe cnbj2.fds.api.xiaomi.com -fb mybucket1
    
  2. -fe 是挂载FDS存储的FDS机房地址,生态云武清机房的地址是cnbj2.fds.api.xiaomi.com
  3. -fb 是挂载FDS存储的bucket名称。

  4. 使用WEB控制台创建开发环境时,选择FDS Region,并填写bucket名称到FDS存储

手工挂载FDS存储

对运行状态的开发环境,可以登录到环境中,手工挂载FDS存储。由于命令行工具和WEB控制台只能挂载一个FDS bucket到默认/fds路径,如果想实现挂载多个bucket或者修改挂载点,需要使用手工挂载的方式。

  1. 首先,SSH连接登录到开发环境内部

  2. 我们已经预装了挂载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命令挂载完成后,可以使用Linux df命令查看挂载是否成功。出现类似下面类型是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个。