为了方便给多台服务器提供文件访问能力和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
,如果被注释则取消注释,如果没有该配置,则新增一行配置。
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
,则可以使用以下命令
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官方组建并运营的技术开发者群体。里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹,期待您的加入!