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

2022-02-18 08:59:27 浏览数 (1)

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

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

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

安装 cosfs

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

下载包

代码语言:txt复制
wget https://github.com/tencentyun/cosfs/releases/download/v1.0.19/cosfs_1.0.19-ubuntu20.04_amd64.deb

安装包

代码语言:txt复制
sudo dpkg -i cosfs_1.0.19-ubuntu20.04_amd64.deb

编辑密钥文件

代码语言:txt复制
sudo nano /etc/passwd-cosfs

密钥文件内容

代码语言:txt复制
<BucketName-APPID>:<SecretId>:<SecretKey>

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

修改密钥文件权限

代码语言:txt复制
sudo chmod 640 /etc/passwd-cosfs
sudo chown www:www /etc/passwd-cosfs

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

创建挂载目录

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

代码语言:txt复制
sudo mkdir -p /mnt/cosfs
sudo chown www:www /mnt/cosfs

创建缓存目录

代码语言:txt复制
sudo mkdir -p /var/cache/cosfs
sudo chown www:www /var/cache/cosfs

编辑fuse.conf

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

代码语言:txt复制
sudo nano /etc/fuse.conf

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

代码语言:txt复制
user_allow_other

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

设置systemctl服务

编辑服务文件

代码语言:txt复制
sudo nano /etc/systemd/system/cosfs.service
代码语言:txt复制
[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.myzijiebao.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 缓存目录

常用挂载选项

代码语言:txt复制
-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剩余空间。

启动和安装服务

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

代码语言:txt复制
sudo systemctl start cosfs

然后查看服务状态

代码语言:txt复制
sudo systemctl status cosfs

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

参考运行状态:

代码语言:txt复制
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.myzijiebao.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

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

代码语言:txt复制
sudo systemctl enable cosfs

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

链接文件

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

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

代码语言:txt复制
sudo ln -s /mnt/cosfs/files /www/wwwroot/default/files

调试服务

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

代码语言:txt复制
journalctl -f -u cosfs.service

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

代码语言:txt复制
sudo systemctl daemon-reload
sudo systemctl restart cosfs

参考链接

  • journalctl命令手册
  • COSFS 工具类常见问题

本文同步发布至 零零博客。

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

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

0 人点赞