前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 COSFS 挂载 COS 到云服务器节约空间

使用 COSFS 挂载 COS 到云服务器节约空间

作者头像
云存储
发布2020-07-10 11:10:19
4.4K0
发布2020-07-10 11:10:19
举报

作者介绍

我是技术小白:机械电子工程专业大四学生,业余时间喜欢折腾。

本文将介绍使用 COSFS 工具将 WordPress/NextCloud 的文件目录挂载到 COS 存储桶的方法,以达到节约服务器硬盘空间的目的。

Wordpress 的数据存放在安装目录下的 wp-content/uploads 文件夹,Nextcloud 的数据存放在安装目录下的 data 文件夹,里面存储着网站的媒体文件,占据的磁盘空间特别大。

为了节省磁盘空间,就将腾讯云对象存储(COS)挂载到他们的数据目录下,存储数据文件。

在挂载 COS 前,必须备份好数据,做好服务器镜像。我就遇到过挂载好 COS 并重启服务器之后无法连接服务器的状况。

下面以 Ubuntu 18.04.1 LTS 系统为例,说明挂载方法。

准备环境、安装并编译 COSFS

1、安装依赖软件

代码语言:javascript
复制
sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config fuse

2、获取源码

代码语言:javascript
复制
git clone https://github.com/tencentyun/cosfs /usr/cosfs

在下载源码的时候,网速特别慢,所以我选择本地下载,然后上传到服务器。 

本地下载地址:https://ygwt.lengchangying.cn/wp-content/uploads/2020/04/cosfs-master.zip

3、编译和安装 COSFS

代码语言:javascript
复制
cd /usr/cosfs./autogen.sh./configuremakesudo make installcosfs --version  #查看 cosfs 版本号

如果显示以下内容,说明安装正确

代码语言:javascript
复制
Tencentyun Object Storage Service File System V1.0.16(commit:unknown) with OpenSSLLicense GPL2: GNU GPL version 2 <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law

挂载 COS

1、配置密钥文件

在 etc 文件夹下新建文件,命名为 passwd-cosfs ,并写入以下内容。

官方给的格式如下

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

官方给的示例如下

代码语言:javascript
复制
examplebucket-1250000000:AKIDHTVVaVR6e3:PdkhT9e2rZCfy6

如果需要挂载多个存储桶,则按照上面的格式多添加几行。

之后将编辑好的内容保存,并将权限改为 640 。

2、运行工具,挂载 COS

在运行挂载命令之前,一定要确保被挂载目录的文件夹下没有文件。

如果有文件,可以移动到新建文件夹内,之后将其导入挂载的存储桶内。

如果需要导入存储桶的文件大于 1000 ,那么需要使用对象存储控制台或者软件导入数据,不能在挂载文件夹后使用复制粘贴方法导入数据,否则数据传输慢或出现异常,甚至导致服务器卡顿、死机。

官方给的格式如下

代码语言:javascript
复制
cosfs <BucketName-APPID> <MountPoint> -ourl=<CosDomainName> -odbglevel=info

官方给的示例如下

代码语言:javascript
复制
cosfs examplebucket-1250000000 /mnt/cosfs -ourl=http://cos.ap-guangzhou.myqcloud.com -odbglevel=info -onoxattr

由于一些原因,我自己更改了一些,执行了下面的内容

代码语言:javascript
复制
cosfs examplebucket-1250000000 /mnt/cosfs  -ourl=http://cos.ap-guangzhou.myqcloud.com -odbglevel=crit -ouid=1000 -ogid=1000 -oallow_other -oumask=007 -ouse_cache=/cosfscache/ygwt -omax_stat_cache_size=2000 -oensure_diskfree=10240

【含义解释】

  • -odbglevel=crit 是调高日志级别,防止日志占用过多空间。
  • ouid=1000 -ogid=1000 -oallow_other 指定用户读写。

查询方法为

代码语言:javascript
复制
cat /etc/passwd | grep 你的用户名

执行后命令行显示如下内容

代码语言:javascript
复制
www:x:1000:1000::/home/www:/sbin/nologin

x 后面的两个数就是 uid 和 gid。

下面的方法也可以查询

代码语言:javascript
复制
id 用户名
  • -oumask=007 是设定权限为 0770 。
  • -ouse_cache=/cos/ygwt 是指定缓存文件夹,在之前应新建好文件夹,否则会报错,如果多个存储桶不能共用同一个缓存文件夹。
  • omax_stat_cache_size=2000 是缓存文件占用空间最大值(MB)。
  • -oensure_diskfree=10240 当缓存文件所在磁盘,剩余空间不足 10240 MB 大小时,COSFS 将尽量减少使用磁盘空间。

3、设置重启后自动挂载

在 /etc/fstab 文件中写入以下内容

官方给的示例如下

代码语言:javascript
复制
cosfs#examplebucket-1250000000 /mnt/cosfs fuse _netdev,allow_other,url=http://cos.ap-guangzhou.myqcloud.com,dbglevel=info

如果需要挂载多个存储桶,则按照上面的格式多添加几行。

由于一些原因,我自己更改了一些,执行了下面的内容

代码语言:javascript
复制
cosfs#examplebucket-1250000000 /mnt/cosfs fuse _netdev,url=http://cos.ap-beijing.myqcloud.com,dbglevel=crit,uid=1000,gid=1000,umask=007,allow_other,use_cache=/cosfscache/ygwt ,max_stat_cache_size=2000,ensure_diskfree=10240

4、卸载存储桶

当有程序引用文件系统中文件时,进行卸载不会报错,并在没程序引用时完成卸载。

代码语言:javascript
复制
umount -l /mnt

可能出现的问题

1、NextCloud 挂载 COS 后出现以下提示

代码语言:javascript
复制
请更改权限为 0770 以避免其他用户查看目录。

【解决方法】

卸载存储桶后,在挂载的命令中加入以下内容再执行

uid 和 gid 需要自己去查,上面有查询方法的介绍。

代码语言:javascript
复制
-ouid=1000 -ogid=1000 -oumask=007 -oallow_other

在设置重启后自动挂载的代码中加入以下内容

代码之间有逗号,每行代码结尾无逗号

代码语言:javascript
复制
uid=1000,gid=1000,umask=007,allow_other

刷新 NextCloud 界面,不再出现错误提示,界面可以正常显示。

2、WordPress 挂载后网站的图片和视频无法显示

F12 - Network 查看资源加载状态,加载图片时 HTTP 状态码为 403 ,加载视频时状态码为 404 。

【解决方法】

卸载存储桶后,在挂载的命令中加入以下内容再执行

代码语言:javascript
复制
-oallow_other

在设置重启后自动挂载的代码中加入以下内容

代码之间有逗号,每行代码结尾无逗号

代码语言:javascript
复制
allow_other

重新打开网站,可以正常加载图片和视频。

COS 数据备份

为避免文件过大占用服务器所剩无几的硬盘资源,将 100 GB 的 COS 存储桶挂载到了云服务器上用于存储数据。

但是害怕哪天自己误点删除删掉所有文件,也害怕程序突然发疯导致数据消失,所以需要备份,提出以下需求:

将【腾讯云 COS】中的存储桶 A 挂载到云服务器,为了数据安全和稳定,需要对存储桶 A 进行备份,最好是实时备份到存储桶 B,存储桶 A 中文件更改后,存储桶 B 也立即更改,即使对存储桶 A 中有数据删除操作,存储桶 B 中的备份文件依然存在(可恢复)。

总结一下,就是以下几点:

  1. A → B 实时备份
  2. A 删除文件 abc.txt,B 中依旧存在文件 abc.txt
  3. A 中文件 abc.txt 内容由 123 更改为 123456,B 中文件 abc.txt 内容也由 123 更改为 123456

经考虑有以下几种实现方式

1、服务器快照备份

无法实时备份,只能 6 小时左右备份一次,且回滚可能对服务器上的其他数据有影响。

2、服务器挂载 COS 存储桶后备份存储桶 A 文件至存储桶 B

无法实时备份,只能 1 小时左右备份一次。

只能进行全量备份,就是每隔一个小时压缩整个存储桶 A 挂载到本地的文件夹后上传到存储桶 B 。

数据会随着备份次数及笔记内容的增多而变大,即使存储桶 A 大小为 10 MB,一个月以后,存储桶 B 中数据就达到了 7.2 GB,这时需要对存储桶 B 进行删除操作,有误删风险。

3、COS 的版本控制和跨地域备份功能

1)版本控制

开启多版本的情况下删除文件操作实际上是创建一个 0 字节的特殊 delete marker 文件

这样的话,无论对腾讯云对象存储(COS)的 A 存储桶进行什么样的改动,都是可以恢复的,极大地节约了空间。

为了防止误删 A 存储桶的文件的历史版本,造成数据丢失,经过考虑决定使用跨地域复制功能。

2)跨地域复制

跨地域复制需要新建一个与 A 地域不相同的存储桶 B ,然后先将 A 中的所有文件复制到 B 中。

之后开启 A 和 B 的版本控制功能,在 A 中设置跨地域复制规则,选择目标存储桶为 B ,之后就可以使用了。

这样的话,当 A 中文件发生改变时,B 存储桶也跟着改变,由于加入版本控制功能,即使将 A 存储桶清空,也有 B 存储桶保存着备份。

注意:

跨地域复制会产生流量,比如:北京→广州为 0.5 元/GB

COS 数据存储收费,比如:北京为 0.08 元/GB/月

低频存储,数据存储时间不足 30 天,按 30 天计算

腾讯云 COS 版本控制+跨地域备份功能完美解决了 COS 存储桶中文件的防误删及增量备份、多重备份问题。

参考文章

原创声明,本文系作者授权发表,未经许可,不得转载。 如有侵权,请联系小编删除,谢谢。

点击阅读原文,领取 COS 限时1元礼包!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云存储 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档