ossfs配置与挂载

本文介绍ossfs的一些配置操作,您可以通过本文了解如何更好的使用ossfs。

前提条件

已安装ossfs,安装步骤请参见安装ossfs

配置账号信息

通过ossfs访问OSS存储空间时,需要配置账号信息,即AccessKey ID和AccessKey Secret。这些账号信息需要按照特定的格式写到账号配置文件中。当挂载OSS Bucket时,会从这个账号配置文件上获取账号信息,格式为$bucket_name:$access_key_id:$access_key_secret

说明

关于如何创建AccessKey ID和AccessKey Secret,请参见创建AccessKey

账号配置文件的默认路径为/etc/passwd-ossfs,您也可以通过-opasswd_file=passwd-path选项指定配置文件。两者的区别在于:默认路径的权限可以是640,其他路径下的配置文件权限必须是600。

  • 同一个账号配置文件中可以保存多条账号信息,一条记录一行。ossfs会根据挂载的存储空间名称匹配到正确的账号上。

    配置示例:

    ### 1.将账号信息保存到账号信息配置文件/etc/passwd-ossfs下,并设置文件权限为640
    echo bucket-test-1:AAAI************:AAA8x************************* > /etc/passwd-ossfs
    echo bucket-test-2:BBBI************:BBB8x************************* >> /etc/passwd-ossfs
    chmod 640 /etc/passwd-ossfs
    
    ### 2.创建挂载目录,将杭州地域名称为bucket-test-1、bucket-test-2的bucket分别挂载到/tmp/ossfs-1、/tmp/ossfs-2目录下
    mkdir /tmp/ossfs-1
    mkdir /tmp/ossfs-2
    ossfs bucket-test-1 /tmp/ossfs-1 -ourl=http://oss-cn-hangzhou.aliyuncs.com
    ossfs bucket-test-2 /tmp/ossfs-2 -ourl=http://oss-cn-hangzhou.aliyuncs.com
  • 当需要同时挂载多个 OSS 存储空间时,您可以选择以下两种方式管理账号配置文件: 1.单个配置文件:将所有存储空间的配置信息写入同一个账号配置文件中。 2.多个配置文件:将不同的账号信息分别写入不同的账号配置文件,并通过-opasswd_file=xxx选项来加载相应的配置文件。

    配置示例:

    ## 将账号信息保存到账号信息配置文件/etc/passwd-ossfs-3下,并设置文件权限为600
    echo bucket-test-3:CCCIbZcdVCmQ****:CCC8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs-3
    chmod 600 /etc/passwd-ossfs-3
    
    ##创建挂载目录,将杭州地域名称为bucket-test-3的bucket挂载到/tmp/ossfs-3目录下 
    mkdir /tmp/ossfs-3
    ossfs bucket-test-3 /tmp/ossfs-3 -ourl=http://oss-cn-hangzhou.aliyuncs.com -opasswd_file=/etc/passwd-ossfs-3
    
    ## 将账号信息保存到账号信息配置文件/etc/passwd-ossfs-4下,并设置文件权限为600
    echo bucket-test-4:DDDIbZcdVCmQ****:DDD8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs-4
    chmod 600 /etc/passwd-ossfs-4
    
    ##创建挂载目录,将杭州地域名称为bucket-test-4的bucket挂载到/tmp/ossfs-4目录下
    mkdir /tmp/ossfs-4
    ossfs bucket-test-4 /tmp/ossfs-4 -ourl=http://oss-cn-hangzhou.aliyuncs.com -opasswd_file=/etc/passwd-ossfs-4

使用实例RAM角色访问

在云服务器ECS上,您还可以通过实例RAM角色的方式挂载ossfs。实例RAM角色允许您将一个角色关联到云服务器实例,在实例内部基于临时凭证STS访问OSS。临时凭证由系统自动生成和更新,应用程序可以使用指定的实例元数据URL获取临时凭证,无需特别管理。借助RAM角色,您既能确保AccessKey的安全性,又能实现权限的精细化控制和管理。关于实例 RAM 角色的更多详情,请参见实例RAM角色

下面以角色名为EcsRamRoleOssTest的RAM角色为例,来说明如何通过实例RAM角色挂载ossfs。

  1. 创建名为EcsRamRoleOssTest的实例RAM角色。

    配置步骤请参见实例RAM角色

  2. 为实例RAM角色授予访问OSS访问权限。

    配置步骤请参见为RAM角色授权。本示例授予实例RAM角色AliyunOSSReadOnlyAccess(只读访问OSS)权限,实际环境中,您可以自定义访问权限,详情请参见创建自定义权限策略

  3. 为实例授予RAM角色。

    配置步骤请参见实例RAM角色

  4. 通过实例元数据URL挂载ossfs。

    说明

    使用实例元数据URL挂载ossfs,目前仅支持普通模式访问。关于元数据访问模式介绍,请参见元数据服务器访问模式

    1. 登录ECS实例。

    2. 使用ossfs挂载OSS Bucket,并增加-oram_role选项。

      以下示例用于将华东1(杭州)地域下的Bucket1存储空间挂载到/tmp/ossfs目录。其中100.100.100.200为阿里云ECS实例元数据服务的默认IP地址。

      ossfs bucket1 /tmp/ossfs -ourl=http://oss-cn-hangzhou.aliyuncs.com -oram_role=http://100.100.100.200/latest/meta-data/ram/security-credentials/EcsRamRoleOssTest

配置访问权限

ossfs挂载的目录访问权限默认为挂载点的所有者,即执行挂载命令的用户,其他用户无法访问。如果要修改默认的权限设置,例如允许其他用户或用户组访问挂载点,则您可以在使用ossfs挂载OSS存储空间时根据所需权限配置相应参数,做到期望的权限设置。

参数

说明

uid

设置文件夹属于某个用户时填写的用户uid。

gid

设置文件夹属于某个用户时填写的用户gid。

umask

用来设置挂载点下文件和目录的权限掩码。例如需要设置挂载点下文件的权限为770,则增加-oumask=007;需要设置挂载点下文件的权限700,则增加-oumask=077

配置示例:

  • 允许所有用户访问,即权限为777。

    ossfs bucket_name mount_point -ourl=endpoint -oallow_other
  • 设置挂载点下的文件和目录权限,只允许同组用户访问,即权限为770。

    ossfs bucket_name mount_point -ourl=endpoint -oumask=007
  • 挂载时指定为其他用户和组,同时只允许同组的用户访问,即权限为770。

    以www用户为例说明,先通过id命令获取用户的uid和gid信息,之后在挂载时指定uid和gid参数。

    id www
    uid=1000(www) gid=1000(web) groups=1000(web)
    ossfs bucket_name mount_point -ourl=endpoint -oallow_other -ouid=1000 -ogid=1000 -oumask=007

挂载指定文件目录

ossfs除了可以把整个存储空间挂载到本地文件系统外,还可以通过设置前缀将存储空间下的某个文件目录挂载到本地文件系统。命令格式如下:

ossfs bucket:/prefix mount_point -ourl=endpoint

通过这种方式挂载时,需要确保存储空间中存在${prefix}/对象。您可以通过ossutil的stat(查看Bucket和Object信息)命令查询该对象是否存在。

以下示例用于将华东1(杭州)地域下bucket-ossfs-test存储空间中的folder目录挂载到/tmp/ossfs-folder下。

ossfs bucket-ossfs-test:/folder /tmp/ossfs-folder -ourl=http://oss-cn-hangzhou.aliyuncs.com

开机自动挂载目录

  1. 将Bucket名称、AccessKeyID、AccessKeySecret等信息写入/etc/passwd-ossfs文件,并将文件权限修改为640。

    配置步骤请参见安装ossfs

  2. 设置开机自动挂载。

    说明

    此处仅提供常见版本的设置开机自动挂载ossfs的示例。对于其他未涉及的版本,请自行参考平台相关文档设置开机自动挂载。

    Ubuntu 14.04及以上、CentOS 6.5及以上系统通过fstab自动挂载

    1. /etc/fstab中加入如下命令:

      ossfs#bucket_name mount_point fuse _netdev,url=url,allow_other 0 0

      参数配置说明如下:

      参数

      说明

      bucket_name

      表示要挂载的OSS存储空间的名称,请将bucket_name替换为您实际的OSS存储空间名称。

      mount_point

      表示要挂载OSS存储空间的本地目录,请将mount_point替换为您所需的目录路径。

      url=url

      表示OSS端点的URL,请将url替换为您实际的OSS端点URL。

      0 0

      文件系统的选项。

    2. 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。

    3. 上一步执行完成后,Ubuntu 14.04就能自动挂载了。CentOS 6.5还需要执行如下命令:

      chkconfig netfs on

    CentOS 7.0及以上的系统通过开机自动启动脚本进行挂载

    1. /etc/init.d/目录下建立文件ossfs,将模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。

    2. 为新建立的ossfs脚本赋予可执行权限:

      chmod a+x /etc/init.d/ossfs

      命令执行完成后,您可以尝试执行该脚本,如果脚本文件内容无误,那么此时OSS中的Bucket已经挂载到您指定的目录下了。

    3. ossfs启动脚本作为其他服务,开机自动启动:

      chkconfig ossfs on
    4. 执行上述步骤后,ossfs就可以开机自动挂载了。

使用Supervisor启动ossfs

重要

以下操作步骤中的文件安装路径以具有sudo权限的用户user1为例,实际安装路径以您的操作环境为准。

  1. 执行以下命令安装supervisor。

    CentOS

    sudo yum install supervisor

    Ubuntu

    sudo apt-get install supervisor
  2. 创建ossfs的启动脚本。

    1. 执行以下命令创建start_ossfs.sh文件。

      mkdir /home/user1/ossfs_scripts
    2. 写入启动脚本。

      vi /home/user1/ossfs_scripts/start_ossfs.sh

      start_ossfs.sh文件内容示例如下。

      # 卸载
      fusermount -u /mnt/ossfs
      # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行。
      exec ossfs bucket_name mount_point -ourl=endpoint -f
  3. 编辑supervisord.conf文件。

    Centos

    sudo vi /etc/supervisord.conf

    Ubuntu

    sudo vi /etc/supervisor/supervisord.conf

    在文件最后加入以下内容。

    [program:ossfs]
    command=bash /home/user1/ossfs_scripts/start_ossfs.sh
    logfile=/var/log/ossfs.log
    log_stdout=true
    log_stderr=true
    logfile_maxbytes=1MB
    logfile_backups=10
  4. 执行以下命令运行Supervisor。

    supervisord
  5. 确认Supervisor运行正常。

    1. 执行以下命令查看Supervisor进程。

      ps aux | grep supervisor
    2. 执行以下命令查看ossfs进程。

      ps aux | grep ossfs

      返回结果如下。其中2044、2452等为ossfs进程ID。

      Dingtalk_20231225172213.jpg

    3. 执行以下命令关闭ossfs进程。

      重要

      请勿使用killall命令。如果您使用killall命令关闭进程,将发送SIGTERM,导致进程正常退出,Supervisor不再去重新运行ossfs。

      kill -9 进程ID 

      关闭ossfs进程后,Supervisor将重启ossfs进程。

    4. 执行以下命令查看ossfs进程。

      ps aux | grep ossfs

开启调试日志

在使用ossfs的过程中,可能会遇到一些问题。这个时候需要开启调试日志,通过日志信息分析和定位问题。您可以通过如下方式开启调试日志:

  • 在挂载目录时增加-d -odbglevel=debug -ocurldbg选项,ossfs会把日志写入系统日志中。

    • CentOS系统

      日志保存在/var/log/messages中。

    • Ubuntu系统

      日志保存在/var/log/syslog中。

  • 在挂载目录时使用-d -odbglevel=debug -ocurldbg -f选项,ossfs会把日志输出到屏幕上。