使用ossfs将OSS的Bucket挂载到Linux系统中

对于原来需要直接读写本地文件的应用程序,为了让应用程序能在不作修改的情况下直接访问对象存储OSS的数据,您可以使用ossfsOSSBucket挂载到Linux系统中,并将其映射到本地目录,从而能够像处理本地文件那样直接操作OSS中的数据,实现文件共享。

前提条件

开通OSS服务创建OSS Bucket

快速安装

  1. 安装ossfs。

    Ubuntu系统

    Ubuntu 16.04 (x64)版本为例,依次执行以下命令安装ossfs。

    sudo wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.3_ubuntu16.04_amd64.deb
    sudo apt-get update
    sudo apt-get install gdebi-core
    sudo gdebi ossfs_1.91.3_ubuntu16.04_amd64.deb

    CentOS系统/Anolis系统

    CentOS系统/Anolis系统

    CentOS 7.0(x64)版本为例,安装命令如下:

    sudo wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.3_centos7.0_x86_64.rpm
    sudo yum install ossfs_1.91.3_centos7.0_x86_64.rpm

    对于使用yum安装rpm包的客户端,如果客户端节点网络环境特殊,无法直接使用yum下载依赖包。您可以在网络正常的、相同版本操作系统的节点上,使用yum下载依赖包并拷贝到网络特殊的节点。例如,ossfs需要依赖fuse 2.8.4以上版本,可使用如下命令,下载yum源中最新的fuse到本地:

    sudo yum install --downloadonly --downloaddir=./ fuse
    重要

    如果需要下载其他依赖包,请将fuse换成对应包的名称。

  2. ossfs通过查询/etc/mime.types中的内容来设置文件的Content-Type,如果您希望上传文件的Content-Type和文件扩展名匹配,您需要添加mime.types文件。

    如果您不添加mime.types文件,ossfs默认将上传文件的Content-Type设置为application/octet-stream

    您可以通过以下命令添加 mime.types 文件。

    Ubuntu系统

    您可以通过以下命令添加mime.types文件。

    sudo apt-get install mime-support

    CentOS系统/Anolis系统

    您可以通过以下命令添加mime.types文件。

    sudo yum install mailcap

挂载访问

  1. 选择需要进行本地挂载的Bucket。

    说明

    避免将低频访问或已启用归档直读功能的Bucket作为挂载目标。这两种类型Bucket在接收上传文件时,可能出现两次上传请求。初次上传生成一个大小为0的占位文件,随后再次上传实际数据作为文件存储在Bucket。由于涉及的文件存储类型为低频访问或归档,即使是0字节的占位文件也会根据相应的存储类别(低频或归档)计费规则,即最少按64 KB数据量计算30天的存储费用。这可能导致用户在不知情的情况下额外承担存储费用。

  2. 配置账号访问信息。

    Bucket名称以及具有该Bucket访问权限的RAM用户的AccessKey IDAccessKey Secret信息存放在/etc/passwd-ossfs文件中,并设置文件的权限为640。

    sudo sh -c 'echo <BucketName>:<yourAccessKeyId>:<yourAccessKeySecret> > /etc/passwd-ossfs'
    ### root 用户可使用以下命令:###
    # echo <BucketName>:<yourAccessKeyId>:<yourAccessKeySecret> > /etc/passwd-ossfs
    sudo chmod 640 /etc/passwd-ossfs

    BucketName、yourAccessKeyId、yourAccessKeySecret请按需替换为您实际的Bucket名称、AccessKey IDAccessKey Secret,例如:

    sudo sh -c 'echo bucket-test:LTAI************:MOk8x0y9hx******************** > /etc/passwd-ossfs'
    sudo chmod 640 /etc/passwd-ossfs
  3. Bucket挂载到指定目录。

    说明
    sudo ossfs <BucketName> <mountfolder> -o url=<Endpoint>

    将杭州地域名称为bucket-testBucket挂载到/tmp/ossfs目录下的示例如下:

    sudo mkdir /tmp/ossfs
    sudo ossfs bucket-test /tmp/ossfs -o url=http://oss-cn-hangzhou-internal.aliyuncs.com
    重要

    为降低读取数据产生的流量费用,建议您通过阿里云ECS部署ossfs,并通过-o url指定内网Endpoint的形式访问目标Bucket(内网Endpoint示例值为http://oss-cn-hangzhou-internal.aliyuncs.com)。使用内网Endpoint的前提是ECS必须和目标Bucket处于相同地域。有关OSS内网域名的更多信息,请参见OSS访问域名、数据中心、开放端口

  4. 您可以像访问本地文件系统一样读取Bucket中的对象。

    1. 查看文件列表。

      sudo ls -lh /tmp/ossfs

      image

      说明

      元数据操作(例如list directory)需要远程访问OSS服务器,存在网络延迟。

    2. 拷贝文件。

      sudo cp /tmp/ossfs/bird.jpeg /root

      OSS中的bird.jpeg拷贝到/root目录中。

    3. 新增文件。

      sudo cp /root/forest.jpeg /tmp/ossfs

      即可将本机的forest.jpeg添加到挂载目录,并同步到OSS远程。

      image

      说明

      如果您因意外中断了文件上传的过程且未继续完成该文件的上传,则已上传的部分会以碎片(Part)的形式存储在Bucket中。如果您不再需要这些Part,建议您通过以下方式删除,以免产生额外的存储费用。

  5. 如果您不希望继续挂载此Bucket,您可以将其卸载。

    sudo fusermount -u /tmp/ossfs

相关文档