最近因为想要对一个没有数据库的网站目录进行打包备份,发现如果结合Rclone这个“神器”的话,打包备份指定的目录文件夹并上传到各大网盘中将是一件非常容易的事情。除此之外,还可以上传到支持FTP、WebDAV、SFTP、Https等协议的存储中。
主要是用到Linux的两个命令:zip和tar,这两个命令可以实现给指定目录打包。其实,如果不想打包的话我们可以用到SCP和Rsync,这两个命令可以帮助我们快速复制或者同步文件夹到指定目录,特别适合超大量文件或者超大文件的传输备份任务。
这篇文章就来分享一下利用Rclone+Tar或ZIP,实现自动定时打包备份指定目录文件夹并同步备份到各大网盘。
一、Tar压缩打包和解压
1.1 打包解压
打包命令如下(提前在根目录创建好/backup):
tar -czvf /backup/backup$(date +%Y%m%d%H%M).tar.gz /opt
以上命令是将文件夹/opt下所有的文件及子文件夹打包到/backup目录下,并以时间来命名。
解压命令如下:
tar zxvf /backup/backup20200925.tar.gz -C /opt
以上命令是将压缩包解压到/opt目录下。
1.2 加密压缩
加密压缩如下:
tar zcvf - /opt | openssl des3 -salt -k '123456' -out /backup/backup$(date +%Y%m%d%H%M).tar.gz
以上命令是将文件夹/opt下所有的文件及子文件夹打包到/backup目录下,设置了加密密码“123456”,并以时间来命名。
加密解压如下:
openssl des3 -d -k '123456' -salt -in /backup/backup20200925.tar.gz | tar zxvf - -C /opt
以上命令是将压缩包解压到/opt目录下,请替换你的密码。
1.3 Tar参数
Tar命令其它的参数说明如下:
-f: 置顶文档名,在f后面立即接文件名,不能再加参数
二、ZIP压缩打包和解压
2.1 打包解压
打包命令如下(提前在根目录创建好/backup):
zip -q -r /backup/backup$(date +%Y%m%d%H%M).zip /opt
以上命令是将文件夹/opt下所有的文件及子文件夹打包到/backup目录下,并以时间来命名。
解压命令如下:
unzip /backup/backup20200925.zip -d /opt
以上命令是将压缩包解压到/opt目录下。
2.2 加密压缩
加密压缩如下:
zip -q -r -P'wzfou123' /backup/backup$(date +%Y%m%d%H%M).zip /opt
以上命令是将文件夹/opt下所有的文件及子文件夹打包到/backup目录下,设置了加密密码“123456”,并以时间来命名。
加密解压如下:
unzip -P'wzfou123' /backup/backup20200925.zip -d /opt
以上命令是将压缩包解压到/opt目录下,请替换你的密码。
2.3 ZIP参数
关于ZIP其它的参数说明如下:
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
-g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
-j 只保存文件名称及其内容,而不存放任何目录名称。
-l 压缩文件时,把LF字符 置换成LF+CR字 符。
-ll 压缩文件时,把LF+CR字 符置换成LF字符。
-m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
-n<字尾字符串> 不压缩具有特定字尾字符串的文件。
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
-P 添加压缩密码,解压必须匹配密码解压,防止被人破解压缩文件
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-t<日期时间> 把压缩文件的日期设成指定的日期。
-w 在文件名称里假如版本编号,本参数仅在VMS操 作系统下有效。
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之 类的系统下有效。
三、Rclone命令安装配置
rclone 是一个命令行工具,用于 Google Drive 的上传下载等操作。官网网站:https://rclone.org/
你可以用以下的命令来安装 rclone,以 RedHat 系举例,记得要先安装 unzip 命令。
然后,运行以下命令开始配置:
输入:n和设置一个名称。
然后选择你要备份的网盘,这里以谷歌网盘为演示,id和Secret都不用填写,直接回车。
然后输入:1,赋予rclone操作云盘可读可写的权限,folder_id和account_file都直接回车,不用填写。
当设置到 Use auto config? 是否使用自动配置,选 n 不自动配置。然后根据提示用浏览器打开 rclone 给出的 URL,点击接受(Accept)。
然后将浏览器上显示出来的字符串粘贴回命令行里,完成授权,然后退出即可。
完整的配置过程如下:
root@localhost:~# rclone config
2020/09/23 23:37:40 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
s) Set configuration password
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
2 / Alias for an existing remote
4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, Tencent COS, etc)
10 / Encrypt/Decrypt a remote
12 / Google Cloud Storage (this is not Google Drive)
16 / In memory object storage system.
22 / Microsoft Azure Blob Storage
25 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
28 / QingCloud Object Storage
31 / Tardigrade Decentralized Cloud Storage
32 / Transparently chunk/split large files
33 / Union merges the contents of several upstream fs
Google Application Client Id
Setting your own is recommended.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default ("").
Enter a string value. Press Enter for the default ("").
Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / Full access all files, excluding Application Data Folder.
2 / Read-only access to file metadata and file contents.
/ Access to files created by rclone only.
3 | These are visible in the drive website.
| File authorization is revoked when the user deauthorizes the app.
/ Allows read and write access to the Application Data folder.
4 | This is not visible in the drive website.
/ Allows read-only access to file metadata but
5 | does not allow any access to read or download file content.
\ "drive.metadata.readonly"
Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.
Enter a string value. Press Enter for the default ("").
Service Account Credentials JSON file path
Needed only if you want use SA instead of interactive login.
Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.
Enter a string value. Press Enter for the default ("").
Edit advanced config? (y/n)
* Say N if you are working on a remote or headless machine
Log in and authorize rclone for access
Enter verification code> 4/4QENTDxxxwzfoucomc #输入授权码
Configure this as a team drive?
token = {"access_token":"yaw.zfoucom2891+08:00"}
y) Yes this is OK (default)
s) Set configuration password
四、自动定时打包备份
在本地根目录下新建cmd目录,然后cd cmd,新建一个sh文件。
复制以下命令:
/usr/bin/zip -q -r /backup/backup$(date +%Y%m%d%H%M).zip /bw-data
/usr/bin/rclone copy --update --verbose --transfers 30 --checkers 8 --contimeout 60s --timeout 300s --retries 3 --low-level-retries 10 --stats 1s "/backup" "wzfoumi:wzfoumima"
echo "BACKUP DATE:" $(date +"%Y-%m-%d %H:%M:%S") >> /var/log/backup.log
说明:
第一句是将/bw-data打包到指定目录下。
第二句是利用rclone copy命令,将指定目录下新增加的文件,同步到Google网盘中,”wzfoumi:wzfoumima”是指名称为wzfoumi的rclone,wzfoumima是谷歌网盘中的文件夹。
第三句是输入日志,即表示执行了一次备份命令。
赋予执行权限:
先测试一下从是否可以正确运行:
我们可以看到本地文件夹已经有打包过来的文件。
同时,可以看到网盘中已经有了同步过来的文件了。
添加定时任务,让脚本每天执行一次。
五、自动删除旧备份及同步
以下命令是删除/backup文件夹下30天以前的备份文件:
find /backup -mtime +30 -name "*.zip" -exec rm -rf {} \;
5.1 sync同步备份
本步骤主要是利用的rclone sync命令,将本地目录与网盘的文件夹保持一致。注意rclone sync是双向操作,即两边的操作都会对双方产生影响,请谨慎使用。命令如下:
/usr/bin/zip -q -r /backup/backup$(date +%Y%m%d%H%M).zip /bw-data
/usr/bin/rclone sync -i /backup wzfoumi:wzfoumima --progress
/usr/bin/find /backup -mtime +30 -name "*.zip" -exec rm -rf {} \;
echo "BACKUP DATE:" $(date +"%Y-%m-%d %H:%M:%S") >> /var/log/backup.log
5.2 mount挂载同步
本步骤主要是利用的rclone mount命令,将谷歌网盘直接挂载在本地的目录夹,这样所有的操作都是直接同步到网盘当中的,同时网盘当中的操作也会反映到本地。好处是不占用本地磁盘空间。
rclone mount wzfoumi:/wzfoumima /backup --no-check-certificate --allow-other --allow-non-empty --vfs-cache-mode full --vfs-cache-max-age 24h --vfs-cache-max-size 12G
以上命令是把名称为wzfoumi的rclone,Google网盘中wzfoumima文件夹,挂载到 /backup目录下。重新打开对话窗口,输入df -h就可以看到成功将谷歌100GB的网盘挂载到VPS上了。
现在我们就可以直接将文件夹打包到这个挂载的目录下了,也是实现了自动同步备份了。
卸载命令如下:
六、总结
总得来说,tar 压缩率比 zip 高,但是如果加密后,tar 加密的文件会比 zip加密后的文件大,所以请根据你自己的需要来选择。另外,如果VPS备份使用定时任务不执行的话,请注意查看一下路径是不是有错误,同时设置一下环境变量等。