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

2022-05-18 12:04:29 浏览数 (1)

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

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

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

安装 cosfs

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

下载包

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

安装包

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

编辑密钥文件

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

密钥文件内容

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

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

修改密钥文件权限

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

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

创建挂载目录

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

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

创建缓存目录

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

编辑fuse.conf

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

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

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

代码语言:javascript复制
user_allow_other

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

设置systemctl服务

编辑服务文件

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

常用挂载选项

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

启动和安装服务

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

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

然后查看服务状态

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

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

代码语言:javascript复制
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

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

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

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

链接文件

需要挂载cos中的某个文件或目录到网站中的话,我们可以使用软链接来进行。 如:挂载cos中的files目录到网站目录中/www/wwwroot/default,则可以使用以下命令

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

调试服务

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

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

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

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

cosfs 工具帮助

代码语言:javascript复制
cosfs -h
代码语言:javascript复制
用法: cosfs BUCKET:[PATH] MOUNTPOINT [OPTION]...

挂载腾讯云 COS 储存桶作为文件系统.

   cosfs 和 FUSE/mount 的常规选项:
      -o opt[,opt...]
      -o opt [-o opt] ...

cosfs 选项:

   大多数 cosfs 选项以"opt"的形式给出:

             <option_name>=<option_value>

   default_acl (默认="public-read")
     - 应用所有写入cos对象时的默认acl

   retries (默认="2")
      -  cos 事务失败时的重试次数

   use_cache (默认="" 即禁用缓存)
      - 用于本地文件缓存的本地文件夹

   del_cache (删除本地文件缓存)
      - cosfs启动和退出时删除本地文件缓存

   storage_class (默认="standard")
      - 使用指定的存储类存储对象.  可能的值:
        standard, standard_ia, 和 reduced_redundancy.

   public_bucket (默认="" 即禁用)
      - 设置为 1 时,匿名挂载公共存储桶

   passwd_file (默认="")
      - 指定要使用的 cosfs 密码文件

   connect_timeout (默认="300" 秒)
      - 连接等待超时时间

   readwrite_timeout (默认="60" 秒)
      - 读写等待超时时间

   max_stat_cache_size (默认="1000" 个 (约 4MB))
      - 文件元数据的缓存空间可缓存多少个文件的元数据

   stat_cache_expire (默认不过期)
      - 指定文件元数据缓存的过期时间(秒)

   enable_noobj_cache (默认禁用)
      - enable cache entries for the object which does not exist.
      cosfs always has to check whether file(or sub directory) exists 
      under object(path) when cosfs does some command, since cosfs has 
      recognized a directory which does not exist and has files or 
      sub directories under itself. It increases ListBucket request 
      and makes performance bad.
      You can specify this option for performance, cosfs memorizes 
      in stat cache that the object(file or directory) does not exist.

   no_check_certificate
      - server certificate won't be checked against the available 
      certificate authorities.

   nodnscache (禁用DNS缓存)
      - cosfs is always using dns cache, this option make dns cache disable.

   nosscache (禁用SSL会话缓存)
      - cosfs is always using ssl session cache, this option make ssl 
      session cache disable.

   multireq_max (默认="20")
      - maximum number of parallel request for listing objects.

   parallel_count (默认="5")
      - number of parallel request for uploading big objects.
      cosfs uploads large object(over 20MB) by multipart post request, 
      and sends parallel requests.
      This option limits parallel request count which cosfs requests 
      at once. It is necessary to set this value depending on a CPU 
      and a network band.

   multipart_size (默认="10")
      - part size, in MB, for each multipart request.

   ensure_diskfree (默认与 multipart_size 的值相同)
      - sets MB to ensure disk free space. cosfs makes file for
        downloading, uploading and caching files. If the disk free
        space is smaller than this value, cosfs do not use diskspace
        as possible in exchange for the performance.

   singlepart_copy_limit (默认="5120")
      - maximum size, in MB, of a single-part copy before trying 
      multipart copy.

   url (默认="")
      - sets the url to use to access tencentyun cos

   default_permission (默认=777)
      - when the file do not have permission meta, cosfs will use this 
      defalut value.

   endpoint (默认="")
      - sets the endpoint to use on signature version 4
      If the cosfs could not connect to the region specified
      by this option, cosfs could not run. But if you do not specify this
      option, and if you can not connect with the default region, cosfs
      will retry to automatically connect to the other region. So cosfs
      can know the correct region name, because cosfs can find it in an
      error from the COS server.

   mp_umask (默认为 "0000")
      - sets umask for the mount point directory.
      If allow_other option is not set, cosfs allows access to the mount
      point only to the owner. In the opposite case cosfs allows access
      to all users as the default. But if you set the allow_other with
      this option, you can control the permissions of the
      mount point by this option like umask.

   nomultipart (禁用分段上传)

   enable_content_md5 (默认禁用)
      - ensure data integrity during writes with MD5 hash.


   nocopyapi (for other incomplete compatibility object storage)
        For a distributed object storage which is compatibility COS
        API without PUT(copy api).
        If you set this option, cosfs do not use PUT with 
        "x-cos-copy-source"(copy api). Because traffic is increased
        2-3 times by this option, we do not recommend this.

   norenameapi (for other incomplete compatibility object storage)
        For a distributed object storage which is compatibility COS
        API without PUT(copy api).
        This option is a subset of nocopyapi option. The nocopyapi
        option does not use copy-api for all command(ex. chmod, chown,
        touch, mv, etc), but this option does not use copy-api for
        only rename command(ex. mv). If this option is specified with
        nocopyapi, then cosfs ignores it.

   use_path_request_style (use legacy API calling style)
        Enble compatibility with OSS-like APIs which do not support
        the virtual-host request style, by using the older path request
        style.

   dbglevel (默认="crit")
        Set the debug message level. set value as crit(critical), err
        (error), warn(warning), info(information) to debug level.
        default debug level is critical. If cosfs run with "-d" option,
        the debug level is set information. When cosfs catch the signal
        SIGUSR2, the debug level is bumpup.

   curldbg - put curl debug message
        Put the debug message from libcurl when this option is specified.

FUSE/mount 选项:

   Most of the generic mount options described in 'man mount' are
   supported (ro, rw, suid, nosuid, dev, nodev, exec, noexec, atime,
   noatime, sync async, dirsync).  Filesystems are mounted with
   '-onodev,nosuid' by default, which can only be overridden by a
   privileged user.
   
   There are many FUSE specific mount options that can be specified.
   e.g. allow_other  See the FUSE's README for the full set.

其它选项:

 -h, --help        输出帮助信息.
     --version     输出版本信息.
 -d  --debug       开启系统日志的调试消息。 指定 -d 两次会启用 FUSE 调试消息到 STDOUT。
 -f                FUSE 前台选项 - 不要作为守护程序运行
 -s                FUSE 单线程选项(禁用多线程操作)

参考链接

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

0 人点赞