Skip to main content

Rclone - Backup data lên Google Drive

11,March 2018
cài đặt và cấu hình rclone google drive

Rclone là một công cụ đồng bộ hóa dữ liệu tương tự Rsync nhưng lại được tập trung phát triển chức năng kết nối với các dịch vụ lưu trữ đám mây.

Rclone hỗ trợ rất nhiều dịch vụ Cloud thông dụng như:

  • Google Drive
  • Amazon S3
  • Openstack Swift / Rackspace cloud files / Memset Memstore
  • Dropbox
  • Google Cloud Storage
  • Amazon Drive
  • Microsoft OneDrive
  • Hubic
  • Backblaze B2
  • Yandex Disk
  • SFTP
  • The local filesystem

I. Cài đăt

1. Cài đặt Rclone

Rclone là một chương trình dòng lệnh nên mình sẽ down xuống rồi di chuyển file chạy đến thư mục /usr/sbin/ của VPS để sử dụng sau này. Download tại địa chỉ https://rclone.org/downloads/

+ Linux 64bit

$ cd /root
$ wget https://downloads.rclone.org/rclone-v1.39-linux-amd64.zip
$ unzip rclone-v1.39-linux-amd64.zip
$ cp rclone-v*-linux-amd64/rclone /usr/sbin/
$ rm -rf rclone-*

+ Linux 32bit

$ cd /root
$ wget https://downloads.rclone.org/rclone-v1.39-linux-386.zip
$ unzip rclone-v1.39-linux-386.zip
$ cp rclone-v*-linux-386/rclone /usr/sbin/
$ rm -rf rclone-*

2. Câu lệnh rclone

rclone command <parameters> <parameters...>

+ Một số lệnh thông dụng khi dùng Rclone. Chi tiết https://rclone.org/commands

  • rclone config – Cấu hình kết nối đến dịch vụ cloud.
  • rclone copy – Copy files từ server đến cloud, skip nếu đã tồn tại dữ liệu.
  • rclone sync – Synchronize giữa server và cloud, chỉ update dữ liệu trên cloud mà thôi.
  • rclone move – Move files từ server lên cloud.
  • rclone delete – Xóa dữ liệu của folder.
  • rclone purge – Xóa dữ liệu của folder và toàn bộ nội dung bên trong.
  • rclone mkdir – Tạo folder.
  • rclone rmdir – Xóa folder trống tại đường dẫn.
  • rclone rmdirs – Xóa toàn bộ folder trống tại đường dẫn.
  • rclone check – Kiểm tra dữ liệu server và cloud có đồng bộ hay không.
  • rclone ls – Liệt kê toàn bộ dữ liệu gồm size và path.
  • rclone lsd – Liệt kê toàn bộ thư mục.
  • rclone lsl – Liệt kê toàn bộ dữ liệu gồm modification time, size và path.
  • rclone size – Trả về kích thước thư mục

II. Backup lên Cloud với Rclone

1. Tạo kết nối tới Google Drive

+ Đầu tiên chúng ta sẽ cấu hình kết nối Rclone với Google Drive, việc này chỉ phải làm 1 lần duy nhất. Kết nối được tạo tên "itlabvn"

[root@backup ~]# rclone config
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> itlabvn   ;Ở dòng name bạn nhập "itlabvn" để đặt tên cho kết nối, bạn có thể chọn tên nào cũng được.
Type of storage to configure.
Choose a number from below, or type in your own value
 1 / Amazon Drive
   \ "amazon cloud drive"
 2 / Amazon S3 (also Dreamhost, Ceph, Minio)
   \ "s3"
 3 / Backblaze B2
   \ "b2"
 4 / Box
   \ "box"
 5 / Cache a remote
   \ "cache"
 6 / Dropbox
   \ "dropbox"
 7 / Encrypt/Decrypt a remote
   \ "crypt"
 8 / FTP Connection
   \ "ftp"
 9 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
10 / Google Drive
   \ "drive"
11 / Hubic
   \ "hubic"
12 / Local Disk
   \ "local"
13 / Microsoft Azure Blob Storage
   \ "azureblob"
14 / Microsoft OneDrive
   \ "onedrive"
15 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
16 / Pcloud
   \ "pcloud"
17 / QingCloud Object Storage
   \ "qingstor"
18 / SSH/SFTP Connection
   \ "sftp"
19 / Webdav
   \ "webdav"
20 / Yandex Disk
   \ "yandex"
21 / http Connection
   \ "http"
Storage> 10
Google Application Client Id - leave blank normally.
client_id>    ;để trống enter
Google Application Client Secret - leave blank normally.
client_secret>    ;để trống enter
Service Account Credentials JSON file path - needed only if you want use SA instead of interactive login.
service_account_file>   ;để trống enter
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> n   
If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_i          d=202264815644.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googl          eapis.com%2Fauth%2Fdrive&state=f86bed558d52338b57573a89fd49f063
;Copy đoạn url trên và paste vào trình duyệt để get code và nhập vào bên dưới
Log in and authorize rclone for access
Enter verification code> 4/AADAnw3xu563sBsAFW_Ne4Z-7nZzA-uiBbF1Bi863OVw-m325PrUpUFU
Configure this as a team drive?
y) Yes
n) No
y/n> n
--------------------
[itlabvn]
client_id =
client_secret =
service_account_file =
token = {"access_token":"ya29.Glt7BVch-eMTuTrbyfffc_TSRShRRFC54FNj0OZv9vrmNZwIVytxOsl2sglyru6oKrJQq_eDeX82BUQ6XMJ8myPxGAEJ52CAC8e0wu23dbHrL7G          MS0srehuxoNU7a7","token_type":"Bearer","refresh_token":"1/eDGgX0BE-pZzd3I8W4eDEALLinV2WRMNQZzlHf8P2L4","expiry":"2018-03-11T22:35:37.076658          397+07:00"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
itlabvn              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
[root@backup ~]# rclone lsd itlabvn:
2018/03/11 21:36:23 NOTICE: Time may be set wrong - time from "www.googleapis.com" is 6h56m8.115632488s different from this computer
          -1 2017-10-01 05:53:05        -1 BACKUP_ITLABVN
          -1 2017-02-14 15:01:03        -1 Esxi5.5
[root@backup ~]# rclone ls itlabvn:

 

2. Viết bash shell backup data lên google drive

+ Để tự động hóa  backup hàng ngày dữ liệu tự server lên google drive. Tôi sử dụng bash shell

$ vim itlabvnbk.sh

#!/bin/bash

cwd=$(pwd)
SERVER_NAME=BACKUP_ITLABVN
REMOTE_NAME=itlabvn
DATE=`date +%Y-%m-%d`
TIMESTAMP=$(date +%F)
BAK_DIR=/root/BACKUP
BACKUP_DIR=${BAK_DIR}/${TIMESTAMP}
SENDEMAIL=/root/sendEmail/sendEmail
MYSQL_USER="root"
MYSQL=/bin/mysql
MYSQL_PASSWORD=xxxxxxx
Mysqldump=/bin/mysqldump
rclone=/sbin/rclone

SECONDS=0
exec >$BAK_DIR/logs/${DATE}.log
exec 2>&1

mkdir -p "$BACKUP_DIR/mysql"

echo "Starting Backup Database";
databases=`$MYSQL  -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW databases;" | grep -Ev "(Database | information_schema | performance_schema | mysql | sys)" `

for db in $databases; do
echo ${db}
$Mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --databases $db --quick --lock-tables=false | gzip> "$BACKUP_DIR/mysql/$db.gz"
done
echo "Finished";
echo '';

echo "Starting Backup Website";
mkdir -p $BACKUP_DIR/web
#Loop Through the / home directory
for D in /var/www/*; do
if [ -d "$D" ]; then #if a directory
domain=${D##*/}  # Domain name
echo "-" $domain;
zip -r -y -q $BACKUP_DIR/web/$domain.zip /var/www/$domain  #-x /var/www/$domain/wp-content/cache/* #Exclude cache
fi
done
echo "Finished";
echo '';

echo "Starting Backup Nginx Configuration";
mkdir -p $BACKUP_DIR/nginx/
cp -r /etc/nginx $BACKUP_DIR/nginx/
echo "Finished";
echo '';

echo "Starting compress file";
size1=$(du -sh ${BACKUP_DIR} | awk '{print $1}')
cd ${BAK_DIR}
tar -czf  ${TIMESTAMP}".tgz" $TIMESTAMP
cd $cwd
size2=$(du -sh ${BACKUP_DIR}".tgz"| awk '{print $1}')
rm -rf ${BACKUP_DIR}
echo "File compress from "$size1"  to "$size2
echo "Finished";
echo '';

echo "Starting Backup Uploading";
$rclone copy ${BACKUP_DIR}.tgz "$REMOTE_NAME:/$SERVER_NAME/"
$rclone -q delete --min-age 1m "$REMOTE_NAME:/$SERVER_NAME"   #remove all backups older than 1 month
find ${BAK_DIR} -mindepth 1 -mtime +30 -delete
echo "Finished";
echo '';

duration=$SECONDS
echo "Total $size2, $(($duration/60)) minutes and $(($duration%60)) seconds elapsed."
#Send email
${SENDEMAIL} -f monitor@itlabvn.net -t admin@itlabvn.net -s mail.itlabvn.net:25 -xu monitor@itlabvn.net -xp xxxxxxxx -l /var/log/sendEmail -u "[$DATE] itlabvn.net backup report" -o message-file=${BAK_DIR}/logs/${DATE}.log

+ Tạo crontab backup

- Tạo crontab backup vào lúc 23h và backup 2 ngày 1 lần 

0 23 */2 * * /home/ducdt/itlabvnbk.sh