一个命令让Linux定时打包备份指定目录文件夹并同步备份到各大网盘

最近因为想要对一个没有数据库的网站目录进行打包备份,发现如果结合Rclone这个“神器”的话,打包备份指定的目录文件夹并上传到各大网盘中将是一件非常容易的事情。除此之外,还可以上传到支持FTP、WebDAV、SFTP、Https等协议的存储中。

主要是用到Linux的两个命令:zip和tar,这两个命令可以实现给指定目录打包。其实,如果不想打包的话我们可以用到SCP和Rsync,这两个命令可以帮助我们快速复制或者同步文件夹到指定目录,特别适合超大量文件或者超大文件的传输备份任务。

一个命令让Linux定时打包备份指定目录文件夹并同步备份到各大网盘中

这篇文章就来分享一下利用Rclone+Tar或ZIP,实现自动定时打包备份指定目录文件夹并同步备份到各大网盘。有关于VPS备份的更多方法请参考:

  1. 三个命令工具Rsync,SCP,Tar-快速解决VPS远程网站搬家与数据同步
  2. VPS挂载国内外网盘实现免费扩容工具:Rclone,COS-Fuse和OSSFS
  3. Linux VPS主机自动备份网站和数据库脚本通用版-自动备份谷歌网盘,阿里云OSS等

一、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命令其它的参数说明如下:

-c :create 建立压缩档案的参数;
-C : 创建解压后指定的存储目录;
-x : 解压缩压缩档案的参数;
-z : 是否需要用gzip压缩;
-v: 压缩的过程中显示档案;
-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其它的参数说明如下:

-A   调整可执行的自动解压缩文件。
-b<工作目录>   指定暂时存放文件的目录。
-c   替每个被压缩的文件加上注释。
-d   从压缩文件内删除指定的文件。
-D   压缩文件内不建立目录名称。
-f   此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
-F   尝试修复已损坏的压缩文件。
-g   将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
-h   在线帮助。
-i<范本样式>   只压缩符合条件的文件。
-j   只保存文件名称及其内容,而不存放任何目录名称。
-J   删除压缩文件前面不必要的数据。
-k   使用MS-DOS兼容格 式的文件名称。
-l   压缩文件时,把LF字符 置换成LF+CR字 符。
-ll   压缩文件时,把LF+CR字 符置换成LF字符。
-L   显示版权信息。
-m   将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
-n<字尾字符串>   不压缩具有特定字尾字符串的文件。
-o   以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
-P   添加压缩密码,解压必须匹配密码解压,防止被人破解压缩文件
-q   不显示指令执行过程。
-r   递归处理,将指定目录下的所有文件和子目录一并处理。
-S   包含系统和隐藏文件。
-t<日期时间>   把压缩文件的日期设成指定的日期。
-T   检查备份文件内的每个文件是否正确无误。
-u   更换较新的文件到压缩文件内。
-v   显示指令执行过程或显示版本信息。
-V   保存VMS操作系统的文 件属性。
-w   在文件名称里假如版本编号,本参数仅在VMS操 作系统下有效。
-x   压缩时排除符合条件的文件。
-X   不保存额外的文件属性。
-y   直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之 类的系统下有效。
-z   替压缩文件加上注释。
-$   保存第一个被压缩文件所在磁盘的卷册名称。
-<压缩效率>   压缩效率是一个介于1-9的数值。

三、Rclone命令安装配置

rclone 是一个命令行工具,用于 Google Drive 的上传下载等操作。官网网站:https://rclone.org/

你可以用以下的命令来安装 rclone,以 RedHat 系举例,记得要先安装 unzip 命令。

yum -y install unzip && wget -qO- https://rclone.org/install.sh | bash

然后,运行以下命令开始配置:

rclone config

输入:n和设置一个名称。

VPS主机一键备份脚本backup.sh开始配置

然后选择你要备份的网盘,这里以谷歌网盘为演示,id和Secret都不用填写,直接回车。

VPS主机一键备份脚本backup.sh直接回车

然后输入:1,赋予rclone操作云盘可读可写的权限,folder_id和account_file都直接回车,不用填写。

VPS主机一键备份脚本backup.sh赋予权限

当设置到 Use auto config? 是否使用自动配置,选 n 不自动配置。然后根据提示用浏览器打开 rclone 给出的 URL,点击接受(Accept)

VPS主机一键备份脚本backup.sh同意授权

然后将浏览器上显示出来的字符串粘贴回命令行里,完成授权,然后退出即可。

VPS主机一键备份脚本backup.sh完成设置

完整的配置过程如下:

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
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n #选择新配置
name> wzfoumi #设置一个名称
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
 1 / 1Fichier
   \ "fichier"
 2 / Alias for an existing remote
   \ "alias"
 3 / Amazon Drive
   \ "amazon cloud drive"
 4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, Tencent COS, etc)
   \ "s3"
 5 / Backblaze B2
   \ "b2"
 6 / Box
   \ "box"
 7 / Cache a remote
   \ "cache"
 8 / Citrix Sharefile
   \ "sharefile"
 9 / Dropbox
   \ "dropbox"
10 / Encrypt/Decrypt a remote
   \ "crypt"
11 / FTP Connection
   \ "ftp"
12 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
13 / Google Drive
   \ "drive"
14 / Google Photos
   \ "google photos"
15 / Hubic
   \ "hubic"
16 / In memory object storage system.
   \ "memory"
17 / Jottacloud
   \ "jottacloud"
18 / Koofr
   \ "koofr"
19 / Local Disk
   \ "local"
20 / Mail.ru Cloud
   \ "mailru"
21 / Mega
   \ "mega"
22 / Microsoft Azure Blob Storage
   \ "azureblob"
23 / Microsoft OneDrive
   \ "onedrive"
24 / OpenDrive
   \ "opendrive"
25 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
26 / Pcloud
   \ "pcloud"
27 / Put.io
   \ "putio"
28 / QingCloud Object Storage
   \ "qingstor"
29 / SSH/SFTP Connection
   \ "sftp"
30 / Sugarsync
   \ "sugarsync"
31 / Tardigrade Decentralized Cloud Storage
   \ "tardigrade"
32 / Transparently chunk/split large files
   \ "chunker"
33 / Union merges the contents of several upstream fs
   \ "union"
34 / Webdav
   \ "webdav"
35 / Yandex Disk
   \ "yandex"
36 / http Connection
   \ "http"
37 / premiumize.me
   \ "premiumizeme"
38 / seafile
   \ "seafile"
Storage> 13 #选择一个网盘
** See help for drive backend at: https://rclone.org/drive/ **

Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default ("").
client_id>  #直接回车
OAuth Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> #直接回车
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.
   \ "drive"
 2 / Read-only access to file metadata and file contents.
   \ "drive.readonly"
   / 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.
   \ "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ "drive.metadata.readonly"
scope> 1 #选择1,赋予读写权限
ID of the root folder
Leave blank normally.

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 ("").
root_folder_id> 
Service Account Credentials JSON file path 
Leave blank normally.
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 ("").
service_account_file> 
Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n> n #不使用高级配置
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n> n #不使用自动配置
Please go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=wzfou.com
Log in and authorize rclone for access
Enter verification code> 4/4QENTDxxxwzfoucomc #输入授权码
Configure this as a team drive?
y) Yes
n) No (default)
y/n> n #是否配置为Team Drive
--------------------
[wzfoumi]
type = drive
scope = drive
token = {"access_token":"yaw.zfoucom2891+08:00"}
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y #确认你的配置是否正确
Current remotes:

Name                 Type
====                 ====
wzfoumi              drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q #退出

四、自动定时打包备份

在本地根目录下新建cmd目录,然后cd cmd,新建一个sh文件。

vim vpsback.sh

复制以下命令:

#!/bin/bash
/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是谷歌网盘中的文件夹。

第三句是输入日志,即表示执行了一次备份命令。

赋予执行权限:

chmod +x vpsback.sh

先测试一下从是否可以正确运行:

Linux定时打包备份执行命令

我们可以看到本地文件夹已经有打包过来的文件。

Linux定时打包备份本地文件夹

同时,可以看到网盘中已经有了同步过来的文件了。

Linux定时打包备份已经同步过来的文件

添加定时任务,让脚本每天执行一次,更多的关于定时任务设置方法:Linux Crontab命令定时任务基本语法与操作教程

五、自动删除旧备份及同步

以下命令是删除/backup文件夹下30天以前的备份文件:

find /backup -mtime +30 -name "*.zip" -exec rm -rf {} \;

5.1 sync同步备份

本步骤主要是利用的rclone sync命令,将本地目录与网盘的文件夹保持一致。注意rclone sync是双向操作,即两边的操作都会对双方产生影响,请谨慎使用。命令如下:

#!/bin/bash
/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上了。

Linux定时打包备份成功挂载网盘

现在我们就可以直接将文件夹打包到这个挂载的目录下了,也是实现了自动同步备份了。

Linux定时打包备份同步文件

卸载命令如下:

fusermount -qzu /backup

六、总结

总得来说,tar 压缩率比 zip 高,但是如果加密后,tar 加密的文件会比 zip加密后的文件大,所以请根据你自己的需要来选择。另外,如果VPS备份使用定时任务不执行的话,请注意查看一下路径是不是有错误,同时设置一下环境变量等。

文章出自:挖站否 https://wzfou.com/vps-one-backup/,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。


分享到:
Avatar for Qi
关于站长(Qi),2008年开始混迹于免费资源圈中,有幸结识了不少的草根站长。之后自己摸爬滚打潜心学习Web服务器、VPS、域名等,兴趣广泛,杂而不精,但愿将自己经验与心得分享出来与大家共勉。
已有 9 条评论
  1. Avatar for GB GB

    用阿里里的快照,虽然收费,但是恢复还是很方便的。

    11月12日 08:47 回复
  2. 我现在就用的这个,买了个大盘鸡,大盘鸡加GD两个地方备份。

    11月11日 13:38 回复
  3. Avatar for 函数 函数

    rclone是个好东西。

    11月11日 08:52 回复
  4. 嗯嗯不错,我一般是备份到webdav。我是参考宝塔的python脚本写的备份数据库。shell应该也好写

    11月10日 20:59 回复
    • Avatar for Qi Qi

      宝塔有不少的备份插件很不错,还要自己写吗?

      11月11日 08:43 回复
  5. Avatar for Now Now

    要是有一个一键恢复的功能就好了。

    11月10日 09:43 回复
  6. Avatar for 收集 收集

    正在用,效果不错,感谢。

    11月10日 08:41 回复
  7. 经常备份有必要,数据安全最重要。

    11月9日 14:13 回复
  8. Avatar for saber saber

    沙发。

    11月9日 06:15 回复

Login

Welcome! Login in to your account

Remember meLost your password?

Don't have account. Register

Lost Password

Register