腾讯云 cosfs 工具使用及开机自动挂载

为了方便给多台服务器提供文件访问能力和CDN加速能力,我选择了使用COS来储存文件。但官方提供的开机自动挂载方案感觉不大稳定,自己研究cosfs工具的使用,并配合systemctl来实现开机自动挂载。

相比官方提供的/etc/fstab挂载方案,使用systemctl来管理cosfs进程个人感觉会更稳定,因为systemctl提供了自动重启功能,即cosfs进程挂了会自动启动。

使用/etc/fstab挂载方案,如果文件修改过于频繁,挂载会掉。
两者的性能没具体测试过,但应该不会相差太大。

安装 cosfs

这里我用的是 Ubuntu 20.04,如果你的是其它系统,可以参考官方文档进行安装。

下载包

wget https://github.com/tencentyun/cosfs/releases/download/v1.0.19/cosfs_1.0.19-ubuntu20.04_amd64.deb

安装包

sudo dpkg -i cosfs_1.0.19-ubuntu20.04_amd64.deb

编辑密钥文件

sudo nano /etc/passwd-cosfs

密钥文件内容

<BucketName-APPID>:<SecretId>:<SecretKey>

<BucketName-APPID>为存储桶名称格式。
<SecretId><SecretKey> 为密钥信息,您可前往访问管理控制台的 云 API 密钥管理 中查看和创建。

修改密钥文件权限

sudo chmod 640 /etc/passwd-cosfs
sudo chown www:www /etc/passwd-cosfs

因为我挂载 cos 是给网站使用的,所以我都是用 www 用户来挂载。后面的 chown 都是这个用途

创建挂载目录

因为挂载cos时,需要被挂载的目录存在,所以我们先提前创建

sudo mkdir -p /mnt/cosfs
sudo chown www:www /mnt/cosfs

创建缓存目录

sudo mkdir -p /var/cache/cosfs
sudo chown www:www /var/cache/cosfs

编辑fuse.conf

编辑fuse配置,以允许其它用户访问挂载的文件

sudo nano /etc/fuse.conf

找到user_allow_other,如果被注释则取消注释,如果没有该配置,则新增一行配置。

user_allow_other

不设置的话,其它用户会访问不了挂载的目录
fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf

设置systemctl服务

编辑服务文件

sudo nano /etc/systemd/system/cosfs.service
[Unit]
Description=cosfs Service
After=network.target

[Service]
Type=simple
User=www
Group=www
Restart=on-failure
RestartSec=5s
ExecStart=cosfs -f cos-1251274180 /mnt/cosfs -ourl=http://cos.ap-guangzhou.myqcloud.com -odbglevel=info -oallow_other -ouse_cache=/var/cache/cosfs

[Install]
WantedBy=multi-user.target

cos-1251274180 为储存桶名称
/mnt/cosfs 为本地挂载目录
-ourl 为访问域名。请参见 地域和访问域名
-ogid 用户组ID
-ouid 用户ID
-ouse_cache 缓存目录

常用挂载选项

-omultipart_size=[size]
用来指定分块上传时单个分块的大小(单位: MB),默认是10MB。 由于分块上传对单个文件块的数目有最大限制(10000块),所以对于超出100GB(10MB * 10000)大小的文件,需要根据具体情况调整该参数。

-oallow_other
如果要允许其他用户访问挂载文件夹,可以在运行 COSFS 的时候指定该参数。

-odel_cache
默认情况下,COSFS 工具为了优化性能,在 umount 后,不会清除本地的缓存数据。 如果需要在 COSFS 退出时,自动清除缓存,可以在挂载时加入该选项。

-onoxattr
禁用 getattr/setxattr 功能,在1.0.9之前版本的 COSFS 不支持设置和获取扩展属性,如果在挂载时使用了 use_xattr 选项,可能会导致 mv 文件到 Bucket 失败。

-opasswd_file=[path]
该选项可以指定 COSFS 密钥文件的所在路径,该选项设定的密钥文件需要设置权限为600。

-odbglevel=[dbg|info|warn|err|crit]
设置 COSFS 日志记录级别,可选 info、dbg、warn、err 和 crit。生产环境中建议设置为 info,调试时可以设置为 dbg。如果您的系统日志,未定期清理且由于访问量很大,生成大量日志,您可以设置为 err 或者 crit。

-oumask=[perm]
该选项可以去除给定类型用户,对挂载目录内文件的操作权限。例如,-oumask=755,对应挂载目录的权限变为022。

-ouid=[uid]
该选项允许用户 id 为 [uid] 的用户不受挂载目录中文件权限位的限制,可以访问挂载目录中的所有文件。
获取用户 uid 可以使用 id 命令,格式id -u username。例如执行id -u user_00,可获取到用户 user_00 的 uid。

-oensure_diskfree=[size]
COSFS 工具为提升性能,默认使用系统盘存放上传、下载的临时缓存,文件关闭后会释放空间。在并发打开的文件数较多或者读写大文件的时候,COSFS 工具会尽量多的使用硬盘来提高性能,默认只保留 100MB 硬盘可用空间给其他程序使用,可以通过选项 oensure_diskfree=[size] 设置 COSFS 工具保留可用硬盘空间的大小,单位为 MB。例如-oensure_diskfree=1024,COSFS 工具会保留1024MB剩余空间。

启动和安装服务

此时,我们尝试下启动服务

sudo systemctl start cosfs

然后查看服务状态

sudo systemctl status cosfs

如果Active的状态是 active (running) ,则代表服务运行正常。

参考运行状态:

cosfs.service - cosfs Service
     Loaded: loaded (/etc/systemd/system/cosfs.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-02-17 17:36:59 CST; 20s ago
   Main PID: 9689 (cosfs)
      Tasks: 3 (limit: 2328)
     Memory: 2.8M
     CGroup: /system.slice/cosfs.service
             └─9689 /usr/local/bin/cosfs -f cos-1251274180 /mnt/cosfs -ourl=http://cos.ap-guangzhou.myqcloud.com -odbglevel=info -ogid=1002 -ouid=1002 -ouse_cache=/tmp/cosfs

Feb 17 17:36:59 VM-8-16-ubuntu systemd[1]: cosfs.service: Scheduled restart job, restart counter is at 37.
Feb 17 17:36:59 VM-8-16-ubuntu systemd[1]: Stopped cosfs Service.
Feb 17 17:36:59 VM-8-16-ubuntu systemd[1]: Started cosfs Service.
Feb 17 17:36:59 VM-8-16-ubuntu s3fs[9689]: [tid:9689]s3fs.cpp:main(5001): init v1.0.19(commit:unknown) with OpenSSL

那我们就可以直接启用服务了,那么服务就会开机时自动启动。

sudo systemctl enable cosfs

如果状态不正常,请看后面的调试服务

链接文件

需要挂载cos中的某个文件或目录到网站中的话,我们可以使用软链接来进行。

如:挂载cos中的files目录到网站目录中/www/wwwroot/default,则可以使用以下命令

sudo ln -s /mnt/cosfs/files /www/wwwroot/default/files

调试服务

如果服务不能正常运行,可以使用命令查看服务运行日志,再根据日志信息去调整配置和服务。

journalctl -f -u cosfs.service

如果修改了服务,需要重新加载服务然后重启服务才会生效

sudo systemctl daemon-reload
sudo systemctl restart cosfs

参考链接

本文同步发布至 零零博客

最后的最后,还有一个福利。开发者们,欢迎您加入腾云先锋(TDP)反馈交流群,群内有丰富的活动可收获积分和成长值,兑换惊喜福利。加入方式:https://cloud.tencent.com/developer/article/1855195

我们是腾云先锋(TDP)团队,是腾讯云GTS官方组建并运营的技术开发者群体。里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹,期待您的加入!

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
腾讯云 cosfs 工具使用及开机自动挂载
为了方便给多台服务器提供文件访问能力和CDN加速能力,我选择了使用COS来储存文件。但官方提供的开机自动挂载方案感觉不大稳定,自己研究cosfs工具的使用,并配...
<<上一篇
下一篇>>