本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍如何在Linux系统上使用ossfs工具将阿里云对象存储服务(OSS)挂载为本地文件系统。
前提条件
已安装ossfs,安装步骤请参见安装ossfs。
手动挂载
支持两种挂载方式:
使用账户的AK挂载:适用于使用特定阿里云账户凭证进行操作,方便快速配置。
使用ECSRAMRole挂载:适用于需要提高安全性和权限管理的环境,通过角色授权来控制资源访问。
两种方式对比
挂载方式 | 使用账户的AK挂载 | 使用ECSRAMRole挂载 |
挂载方式 | 使用账户的AK挂载 | 使用ECSRAMRole挂载 |
优点 | 简单易用,对于单用户或开发阶段非常方便。 | 提高安全性,不直接暴露AccessKey,权限管理灵活。 |
缺点 | 可能泄露AccessKey,安全性相对较低。 | 配置相对复杂,需要在RAM中进行角色设置。 |
根据您的使用场景和安全需求,选择合适的挂载方式。以下将详细介绍这两种挂载方式的具体步骤。
使用账户的AK挂载
在访问OSS存储空间时,ossfs需要配置阿里云主账号或 RAM 用户的AK(Access Key ID、Access Key Secret)。
阿里云账号拥有资源的全部权限,AK一旦泄露,会给系统带来巨大风险,不建议使用。推荐使用最小化授权的RAM用户的AK。
获取AccessKey。关于如何创建AccessKey ID和AccessKey Secret,请参见创建AccessKey。
将存储空间和对应的AccessKey信息写入默认配置文件
/etc/passwd-ossfs
中,并将文件权限设置为640。配置文件的格式为
$bucket_name:$access_key_id:$access_key_secret
,AK信息应保存在配置文件中,每行记录一条信息。echo bucket-test-1:AAAI************:AAA8x************************* > /etc/passwd-ossfs echo bucket-test-2:BBBI************:BBB8x************************* >> /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs
创建挂载目录并挂载。
URL地址即为Endpoint。如果Linux ECS云服务器与OSS位于同一地域,请填写内网Endpoint。若需实现本地主机挂载OSS,则需确保网络连接畅通,以支持外网访问OSS。如需获取URL,请参见公共云获取Endpoint信息。
mkdir /tmp/ossfs-1 /tmp/ossfs-2 ossfs bucket-test-1 /tmp/ossfs-1 -o url=http://oss-cn-hangzhou.aliyuncs.com ossfs bucket-test-2 /tmp/ossfs-2 -o url=http://oss-cn-hangzhou.aliyuncs.com
使用ECSRAMRole挂载
在云服务器ECS上,您可以通过实例RAM角色方式挂载OSS。实例RAM角色将角色关联到云服务器实例,允许通过临时凭证(STS)安全访问OSS。临时凭证由系统自动生成和更新,应用程序可以通过实例元数据URL获取,无需额外管理。采用RAM角色可以保障AccessKey安全,并实现权限精细化控制。关于实例 RAM 角色的更多详情,请参见实例RAM角色。
下面以角色名为EcsRamRoleOssTest的RAM角色为例,来说明如何通过实例RAM角色挂载ossfs。
创建名为EcsRamRoleOssTest的实例RAM角色。
配置步骤请参见创建RAM角色并授予给ECS实例。
为实例RAM角色授予访问OSS访问权限。
为实例授予RAM角色。
配置步骤请参见为ECS实例授予RAM角色。
验证实例所授予的RAM角色状态。
以下示例EcsRamRoleOssTest为RAM角色名称,请确保与已创建的RAM角色名称保持一致。
curl -o /dev/null -s -w "%{http_code}\n" http://100.100.100.200/latest/meta-data/ram/security-credentials/EcsRamRoleOssTest
元数据服务状态码说明:
返回404:角色不存在或未成功绑定到ECS实例。请检查上述三步。
返回200:绑定及角色调用正常,可以继续进行下一步。
如果您需要查询一台或多台实例所授予的RAM角色,或者通过RAM角色名称来查询被授予该角色的实例情况,请参见DescribeInstanceRamRole - 查询实例被授予的RAM角色。
通过实例元数据URL挂载ossfs。
使用实例元数据URL挂载ossfs,目前仅支持普通模式访问。关于元数据访问模式介绍,请参见元数据服务器访问模式。
登录ECS实例。
使用ossfs挂载OSS Bucket,并增加
-o ram_role
选项。以下示例用于将华东1(杭州)地域下的Bucket1存储空间挂载到/tmp/ossfs目录。其中
100.100.100.200
为阿里云ECS实例元数据服务的默认IP地址。ossfs bucket1 /tmp/ossfs -o url=http://oss-cn-hangzhou.aliyuncs.com -o ram_role=http://100.100.100.200/latest/meta-data/ram/security-credentials/EcsRamRoleOssTest
更多操作
设置开机自动挂载
手动挂载OSS存储空间后,系统重启时不会自动重新挂载。如果您希望在系统重启后自动挂载OSS,请按照以下步骤进行设置。在配置开机自动挂载前,请先确认手动挂载成功,避免ECS启动失败。以下方法在使用账户AK配置后,将实现开机自动挂载的设置。
将Bucket名称、AccessKeyID、AccessKeySecret等信息写入/etc/passwd-ossfs文件,并将文件权限修改为640。
配置步骤请参见使用账户的AK挂载。
设置开机自动挂载。
此处仅提供常见版本的设置开机自动挂载ossfs的示例。对于其他未涉及的版本,请自行参考平台相关文档设置开机自动挂载。
Ubuntu 14.04及以上、CentOS 6.5及以上系统通过fstab自动挂载CentOS 7.0及以上的系统通过开机自动启动脚本进行挂载在/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
文件系统的选项。
保存/etc/fstab文件。执行
mount -a -t fuse
命令,如果没有报错,则说明设置正常。上一步执行完成后,Ubuntu 14.04就能自动挂载了。CentOS 6.5还需要执行如下命令:
chkconfig netfs on
在/etc/init.d/目录下创建文件ossfs,并将以下内容拷贝至该新文件中。同时,将其中的your_xxx内容改成您自己的OSS信息。
ossfs your_bucket your_mountpoint -o url=your_url -o allow_other
为新建立的ossfs脚本赋予可执行权限:
chmod a+x /etc/init.d/ossfs
命令执行完成后,您可以尝试执行该脚本,如果脚本文件内容无误,那么此时OSS中的Bucket已经挂载到您指定的目录下了。
把ossfs启动脚本作为其他服务,开机自动启动:
chkconfig ossfs on
执行上述步骤后,ossfs就可以开机自动挂载了。
自定义多个配置文件
在使用账户的 AK 进行挂载时,除了将多条信息写入一个默认的配置文件外,还可以自定义多个配置文件。示例如下:
获取AccessKey。关于如何创建AccessKey ID和AccessKey Secret,请参见创建AccessKey。
分别为不同的存储空间创建配置文件,并将文件权限设置为600。
echo bucket-test-3:CCCIbZcdVCmQ****:CCC8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs-3 echo bucket-test-4:DDDIbZcdVCmQ****:DDD8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs-4 chmod 600 /etc/passwd-ossfs-3 /etc/passwd-ossfs-4
创建挂载目录并挂载。
mkdir /tmp/ossfs-3 /tmp/ossfs-4 ossfs bucket-test-3 /tmp/ossfs-3 -o url=http://oss-cn-hangzhou.aliyuncs.com -o passwd_file=/etc/passwd-ossfs-3 ossfs bucket-test-4 /tmp/ossfs-4 -o url=http://oss-cn-hangzhou.aliyuncs.com -o passwd_file=/etc/passwd-ossfs-4
配置访问权限
ossfs挂载的目录访问权限默认为挂载点的所有者,即执行挂载命令的用户,其他用户无法访问。如果要修改默认的权限设置,例如允许其他用户或用户组访问挂载点,则您可以在使用ossfs挂载OSS存储空间时根据所需权限配置相应参数,做到期望的权限设置。
参数 | 说明 |
参数 | 说明 |
uid | 设置文件夹属于某个用户时填写的用户uid。 |
gid | 设置文件夹属于某个用户时填写的用户gid。 |
umask | 用来设置挂载点下文件和目录的权限掩码。例如需要设置挂载点下文件的权限为770,则增加-o umask=007;需要设置挂载点下文件的权限700,则增加-o umask=077。 |
配置示例:
允许所有用户访问,即权限为777。
ossfs bucket_name mount_point -o url=endpoint -o allow_other
设置挂载点下的文件和目录权限,只允许同组用户访问,即权限为770。
ossfs bucket_name mount_point -o url=endpoint -o umask=007
挂载时指定为其他用户和组,同时只允许同组的用户访问,即权限为770。
以www用户为例说明,先通过id命令获取用户的uid和gid信息,之后在挂载时指定uid和gid参数。
id www uid=1000(www) gid=1000(web) groups=1000(web) ossfs bucket_name mount_point -o url=endpoint -o allow_other -o uid=1000 -o gid=1000 -o umask=007
挂载指定文件目录
ossfs除了可以把整个存储空间挂载到本地文件系统外,还可以通过设置前缀将存储空间下的某个文件目录挂载到本地文件系统。命令格式如下:
ossfs bucket:/prefix mount_point -o url=endpoint
挂载时,需要具备对该bucket中指定${prefix}/路径下对象的访问权限。
以下示例用于将华东1(杭州)地域下bucket-ossfs-test存储空间中的folder目录挂载到/tmp/ossfs-folder下。
ossfs bucket-ossfs-test:/folder /tmp/ossfs-folder -o url=http://oss-cn-hangzhou.aliyuncs.com
使用Supervisor启动ossfs
通过Supervisor工具来管理和启动ossfs,以实现对OSS的稳定挂载。采用此方法,可以确保ossfs在系统启动时自动运行,并能够在异常情况下自动重启,提供高可用性和稳定性。
以下操作步骤中的文件安装路径以具有sudo权限的用户user1为例,实际安装路径以您的操作环境为准。
执行以下命令安装supervisor。
CentOSUbuntusudo yum install supervisor
sudo apt-get install supervisor
创建ossfs的启动脚本。
执行以下命令创建start_ossfs.sh文件。
mkdir -p /home/user1/ossfs_scripts
写入启动脚本。
vi /home/user1/ossfs_scripts/start_ossfs.sh
start_ossfs.sh文件内容示例如下。
# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行。 exec ossfs bucket_name mount_point -o url=endpoint -f
编辑supervisord.conf文件。
CentosUbuntusudo vi /etc/supervisord.conf
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
执行以下命令运行Supervisor。
supervisord
确认Supervisor运行正常。
执行以下命令查看Supervisor进程。
ps aux | grep supervisor
执行以下命令查看ossfs进程。
ps aux | grep ossfs
返回结果如下。其中2044、2452等为ossfs进程ID。
执行以下命令关闭ossfs进程。
请勿使用killall命令。如果您使用killall命令关闭进程,将发送SIGTERM,导致进程正常退出,Supervisor不再去重新运行ossfs。
kill -9 进程ID
关闭ossfs进程后,Supervisor将重启ossfs进程。
执行以下命令查看ossfs进程。
ps aux | grep ossfs
开启调试日志
在使用ossfs的过程中,可能会遇到一些问题。这个时候需要开启调试日志,通过日志信息分析和定位问题。您可以通过如下方式开启调试日志:
在挂载目录时增加-d -o dbglevel=debug选项,ossfs会把日志写入系统日志中。
CentOS系统
日志保存在/var/log/messages中。
Ubuntu系统
日志保存在/var/log/syslog中。
在挂载目录时使用-d -o dbglevel=debug -f选项,ossfs会在前台运行,并把日志输出到屏幕上。
卸载已挂载的文件系统
您可以使用umount [挂载点路径]
命令,卸载已挂载到本地的OSS文件系统。例如,要卸载挂载在/tmp/ossfs
的文件系统。
umount /tmp/ossfs
常见问题
ECS通过内网Endpoint挂载OSS不产生流量费用。更多关于流量费用信息,请参见流量费用。
如果您的ECS和OSS不在同一地域且需要进行跨地域挂载,请确保网络畅通,您可以直接使用外网Endpoint进行挂载。此外,您还可以通过企业版转发路由器实现ECS私网访问跨地域的OSS服务。
如果您需要通过云存储网关搭建IIS网站并将OSS作为数据存储,请参见如何使用阿里云云存储网关搭建IIS网站。
如果您需要在Windows操作系统上挂载OSS,请参见Rclone。
更多关于挂载,权限等相关问题,请参见常见问题。
- 本页导读 (1)
- 前提条件
- 手动挂载
- 使用账户的AK挂载
- 使用ECSRAMRole挂载
- 更多操作
- 设置开机自动挂载
- 自定义多个配置文件
- 配置访问权限
- 挂载指定文件目录
- 使用Supervisor启动ossfs
- 开启调试日志
- 卸载已挂载的文件系统
- 常见问题