Linux上实现文件自动备份的工具有很多,最近因更换了腾讯云轻量服务器,干脆将以前的备份到邮箱改为备份到腾讯云COS对象存储,毕竟企业新户享有为期六个月容量为1T(根本用不完)的对象存储空间。
翻阅了腾讯云COS对象存储的文档,发现方便用于Linux上备份的工具有COSCMD和COSFS两种,前者通过命令行指令实现文件上传、下载、删除等操作,而后者则可以将对象存储挂载到本地,像访问本地磁盘一样操作对象存储。深入研究后发现还是COSFS简单粗暴,用于文件备份还是不错的。
COSFS工具安装
该工具目前最新版本为V1.0.19,建议到腾讯云官方Github获取对应系统版本的安装包,本次以我机器系统环境CentOS 7.9为例。安装过程中可能会报错提示conflicts with file from package fuse-libs-*
,可以添加--force
进行安装。
yum install libxml2-devel libcurl-devel -y
# 安装依赖
wget https://github.com/tencentyun/cosfs/releases/download/v1.0.19/cosfs-1.0.19-centos7.0.x86_64.rpm
# 下载RPM安装包
rpm -ivh cosfs-1.0.19-centos7.0.x86_64.rpm
# 安装
COSFS工具配置
首先需要在/etc/passwd-cosfs
文件中写入密钥文件,具体格式为<BucketName-APPID>:<SecretId>:<SecretKey>
,同时出于安全性考虑,需对该文件设置权限为640。
echo <BucketName-APPID>:<SecretId>:<SecretKey> > /etc/passwd-cosfs
# 写入密钥到配置文件
chmod 640 /etc/passwd-cosfs
# 更改文件权限
例:
echo examplebucket-1250000000:AKIDHTVVaVR6e3****:PdkhT9e2rZCfy6**** > /etc/passwd-cosfs
chmod 640 /etc/passwd-cosfs
COSFS工具使用
根据官方文档给出的示例,结合实际使用,选择把地域香港、名为backup-125xxxxxxx的对象存储挂载到/root/backup
目录,示例如下,具体可根据实际使用进行修改后执行。
cosfs backup-125xxxxxxx /root/backup -ourl=http://cos.ap-hongkong.myqcloud.com -odbglevel=info -oallow_other
如无报错,这时执行df -h
应该就能看到容量为256T的挂载点。
COSFS开机挂载
为了避免每次服务器重启都需要重新挂载,还需要设置开机自动挂载对象存储,这里使用官方的方法,设置完成后执行mount -a
,如果报错可尝试安装Fuse库。
cosfs#backup-125xxxxxxx /root/backup fuse _netdev,allow_other,url=http://cos.ap-hongkong.myqcloud.com,dbglevel=info
# 设置开机自动挂载
yum install fuse
# 安装Fuse库
至此,已经成功的将对象存储挂载到服务器。
备份脚本编写
整理下备份流程,首先创建一个临时目录/tmp/backup
,然后将需备份的文件拷贝到该目录下,再进行压缩保存到/root/backup
,为避免服务器存储空间被占满,还需要在备份完成后清空/tmp/backup
并对备份存储目录/root/backup
中保存时间超过14天的文件进行删除操作,具体代码如下,可根据实际需求进行修改后保存到服务器中进行使用。
#!/bin/sh
mkdir -p /tmp/backup
# 创建临时目录
cp -r /data/wwwroot /tmp/backup
# 拷贝需备份的数据
tar -zcPvf /root/backup/$(date +%Y%m%d).tar.gz /tmp/backup
#压缩备份文件
rm -rf /tmp/backup
# 删除临时目录
cd /root/backup
find ./ -mtime +14 -name "*.tar.gz" -exec rm -rf {} \;
#删除改文件夹下超过14天的文件
设置自动备份
我选择在每天凌晨四点进行文件备份,这里执行crontab -e
编辑Crontab配置文件,将以下内容写入,具体时间以及备份脚本位置可根据实际需求进行修改。
0 4 * * * /root/backup.sh /dev/null 2>&1
实现备份到对象存储的方法有很多,这里仅介绍我目前使用的,代码简单已修改,无需过多配置即可使用。