Restic kết hợp Rclone – giải pháp hoàn hảo cho sao lưu và khôi phục dữ liệu

Sau khi tham khảo, dùng thử qua vài tool script hỗ trợ deduplication (chỉ sao lưu những phần dữ liệu thay đổi hoặc mới, giúp tiết kiệm không gian lưu trữ và giảm thiểu thời gian sao lưu), mình thấy Restic thông dụng, đơn giản, dễ dùng, cấu hình rất ít và các câu lệnh đều đủ dùng, thiết thực, nên quyết định thử dùng 1 thời gian xem làm sao, thực tế ban đầu mình khi xem review, mình thích BorgBackup hơn, vì hiệu năng backup cực khủng, mà phần restore của nó phiền quá, không hợp với nhu cầu lắm, đành “Hải, quay xe” 😈

  • Restic là công cụ sao lưu dữ liệu mã nguồn mở, hỗ trợ sao lưu trực tiếp tới nhiều dịch vụ đám mây khác nhau thông qua Rclone, sử dụng công nghệ deduplication để giảm dung lượng lưu trữ
  • Rclone là công cụ dòng lệnh giúp bạn quản lý và đồng bộ hóa dữ liệu giữa các dịch vụ đám mây và máy tính của bạn.

Lý do chính mình chọn Restic

  1. Miễn phí, có tên tuổi thương hiệu lâu năm trong giới
  2. Restic có thể quản lý trực tiếp kho lưu trữ (repository) trên các cloud storage, đỡ công đoạn backup từ local sang cloud như thông thường, trên local cũng đỡ phải tốn dung lượng
  3. Mặc định, tất cả tool, script dùng công nghệ dạng deduplication, đều sẽ bị lỗi “file changed while we backed it up, nôm na là truy cập vào 1 file đang được 1 ứng dụng khác sử dụng, kiểu Mariadb ghi log xuống file, lúc này các tool có tính năng deduplication đọc file log này, sẽ báo lỗi, điểm quái là dùng trên Restic thì không thấy báo lỗi này, chưa rõ họ xử lý kiểu gì nữa
  4. Các lệnh tạo snapshot, restore siêu đơn giản, họ tự đặt tên, nén file sẵn hết, thậm chí khi restore cũng có sẵn tính năng tự chép chính xác vào vị trí cũ, đỡ thao tác copy, paste lại nhiều
  5. Hỗ trợ đa luồng trên các VPS có nhiều core, 1 tool script tận dụng được vấn đề này, vẫn cảm giác có gì đó uy tín hẳn
  6. Do hỗ trợ trực tiếp cloud, các vấn đề liên quan tới quản lý API Restic làm có vẻ tốt, thường dùng Rclone, khi copy file lên Google Drive, rất hay gặp tình huống API của Google giới hạn, mà khi dùng Restic, chạy lại chưa thấy vấn đề này?

Bản thân Restic đã hỗ trợ sẵn các cloud storage dạng Amazon S3, Google Drive, lý thuyết chạy 1 mình Restic là đủ, có điều mình vẫn dùng qua Rclone, vì có sẵn cấu hình, đỡ phải làm lại 1 lần nữa trên Restic, cũng có thể dùng rclone sync sang nhiều cloud khác nhau, tăng hệ số an toàn dữ liệu lên cao hơn, lý do vì sao bài này lại dùng cả Restic và Rclone là vì thế

Dùng cloud storage chứa dữ liệu nào thì tùy nhu cầu mỗi người, thường dạng cloud object storage như S3, kiểu Cloudflare R2 sẽ cho tốc độ tốt, Cloudflare còn rất hào phóng, cho hẳn 1.000.000 requests / month trên Class A, 10 GB dung lượng miễn phí đúng là nghe hơi ít, nhưng khi dùng Restic với deduplication thì lại quá là dư giả luôn 😊

Cài đặt Restic

  • Cài đặt thủ công từ file nhị phân (binary) từ Github Restic, xem VPS đang dùng CPU gì thì down bản thích hợp, như bên dưới là CPU chạy ARM
wget https://github.com/restic/restic/releases/download/v0.17.3/restic_0.17.3_linux_arm64.bz2
bunzip2 restic_0.17.3_linux_arm64.bz2
chmod +x restic_0.17.3_linux_arm64
sudo mv restic_0.17.3_linux_arm64 /usr/local/bin/restic
  • Có thể copy nguyên đoạn code bên dưới, chạy 1 phát cũng được
ARCH=$(uname -m)
LATEST_RELEASE=$(curl -s https://api.github.com/repos/restic/restic/releases/latest | jq -r .tag_name)
if [ "$ARCH" == "x86_64" ]; then
    URL="https://github.com/restic/restic/releases/download/$LATEST_RELEASE/restic_${LATEST_RELEASE:1}_linux_amd64.bz2"
elif [ "$ARCH" == "aarch64" ]; then
    URL="https://github.com/restic/restic/releases/download/$LATEST_RELEASE/restic_${LATEST_RELEASE:1}_linux_arm64.bz2"
else
    echo "Kiến trúc không hỗ trợ!"
    exit 1
fi
wget -L $URL -O restic.bz2
bunzip2 restic.bz2
chmod +x restic
sudo mv restic /usr/local/bin/restic

Hoặc cài đặt theo hướng dẫn của Restic tại đây (mặc định thường là các phiên bản cũ hơn)

  • Kiểm tra phiên bản
restic version
restic 0.17.3 compiled with go1.23.3 on linux/arm64

Cài đặt Rclone

curl https://rclone.org/install.sh | sudo bash
rclone version
  • Cấu hình như các bài viết cũ, nói chung thèng này nổi quá rồi, gần như ai quan tâm tới backup đều đã và đang dùng

Có thể thêm sẵn các giá trị bên dưới để tăng thêm hiệu quả khi upload, download

export RCLONE_TRANSFERS=32
export RCLONE_CHECKERS=32

Cấu hình Restic với Rclone

Phần bên dưới mình viết dài dòng, ngắn gọn nhất bạn có thể xem hướng dẫn từ hãng

  • Khởi tạo repository:

Ví dụ bạn đang có 1 cấu hình cho Cloudflare R2 trong Rclone là cloudflare-free

Copy các dòng bên dưới thẳng vào shell console là được

export RESTIC_REPOSITORY="rclone:cloudflare-free:restic-backup/bibica-net"
export RESTIC_PASSWORD="your-secure-password"
restic init
  • cloudflare-free tên của remote bạn đã cấu hình trong Rclone
  • /restic-backup/bibica-net đường dẫn thư mục trên cloudflare-free
  • your-secure-password mật khẩu đặt tùy ý

Khi chạy restic init sẽ tự tạo thư mục restic-backup/bibica-net nếu chưa có

Các giá trị RESTIC_REPOSITORYRESTIC_PASSWORD mặc định sẽ mất, khi tắt màn hình shell console, nếu bạn chỉ dùng 1 cloud cố định, đỡ lằng nhằng, nên set cứng giá trị này vào môi trường shell, sau này đỡ phải điền lại

Ví dụ bên dưới chạy trên Ubuntu hoặc Debian

nano ~/.bashrc
  • Kéo xuống cuối trang, thêm vào
# Thiết lập biến cấu hình cho restic
export RESTIC_REPOSITORY="rclone:cloudflare-free:restic-backup/bibica-net"
export RESTIC_PASSWORD="your-secure-password"

Ctrl + X, sau đó nhấn YEnter).

  • Chạy tiếp lệnh bên dưới để thay đổi có hiệu lực
source ~/.bashrc

Lúc này khi bạn chạy các lệnh trên restic, sẽ tự dùng cấu hình theo RESTIC_REPOSITORYRESTIC_PASSWORD ở trên, nếu  đổi sang cloud khác thì nhớ sửa lại 2 giá trị này là được

  • Sao lưu dữ liệu với Restic
restic backup /home /var/spool/cron/crontabs/root

/home/var/spool/cron/crontabs/root 2 là 2 thư mục và file cần backup, cách nhau bởi dấu khoảng trắng

restic backup mặc định dùng chế độ nén auto, trừ trường hợp bạn sao lưu toàn dữ liệu đã nén, kiểu toàn là ảnh, hoặc dữ liệu cực khủng, tính theo TB, có thể không hiệu quả, còn lại độ nén auto của Restic rất ổn, dung lượng đủ nhỏ, chạy đủ nhanh

Theo Restic, họ đã xác minh các file được tạo ra có thể được giải mã và chứa dữ liệu chính xác khi backup rồi, mà mình cũng không biết kiểm chứng lại ý này làm sao

Kiểm tra sau khi chạy xong, dung lượng cache trên VPS cũng rất nhẹ

root@bibica-net:~# du -sh /root/.cache/restic
26M     /root/.cache/restic
  • Liệt kê các snapshot:

Restic họ gọi mỗi bản backup là snapshot (ảnh chụp nhanh), theo mình cách đặt tên này khá phù hợp với cách Restic đang hoạt động

restic snapshots

Chú ý giá trị ID là được, giá trị này dùng để phân biệt các snapshot với nhau, nó cũng có sẵn ngày tháng, giờ cụ thể, dễ quan sát lắm

repository 311cf31e opened (version 2, compression level auto)
ID        Time                 Host        Tags        Paths                          Size
-----------------------------------------------------------------------------------------------
61a66070  2025-01-19 13:57:16  bibica-net              /home                          2.286 GiB
                                                       /var/spool/cron/crontabs/root

06df414e  2025-01-19 14:59:04  bibica-net              /home                          2.286 GiB
                                                       /var/spool/cron/crontabs/root

fa1db9dd  2025-01-19 15:22:04  bibica-net              /home                          2.286 GiB
                                                       /var/spool/cron/crontabs/root
-----------------------------------------------------------------------------------------------
3 snapshots
  • Khôi phục snapshot:

Khôi phục 1 snapshot cụ thể, ví dụ 61a66070 về thư mục /restore/test trên VPS

restic restore 61a66070 --target /restore/test

Khôi phục thư mục (file) cụ thể (/home/backup/config) từ snapshot (ded97bac) về thư mục /restore/test trên VPS

restic restore ded97bac:/home/backup/config --target /restore/test

Hoặc khôi phục mọi thư mục và tệp từ bản sao lưu gần nhất (latest) vào chính xác vị trí ban đầu

restic restore latest --target /

Ấn đúng 1 lệnh là coi như như restore dữ liệu mới nhất về chính xác chỗ cũ, đỡ bao nhiêu thao tác nào là giải nén, nào là chép lại vào vị trí cũ so với cách backup truyền thống

  • Kiểm tra và bảo trì repository
restic check --read-data
  • Kiểm tra tất cả các tệp trong kho lưu trữ.
  • Xác minh rằng các khối dữ liệu (blocks) có thể đọc được và không bị hỏng.
  • Kiểm tra các chỉ mục và dữ liệu metadata (ví dụ như thông tin về các bản sao lưu, các tệp đã sao lưu, v.v.).
  • Đảm bảo rằng tất cả dữ liệu đã sao lưu là có thể truy cập được và nguyên vẹn.

Mặc định, các hãng dùng các công nghệ deduplication, đều có các hình thức kiểm tra để xem dữ liệu có được sao lưu chính xác không, đôi khi đang chạy cúp điện, hdd, ram, cpu bị hỏng, hay đơn giản là bản thân chính tool script gặp lỗi, nói chứ đúng là sau khi viết bài này, để ý lại thì mình cũng chưa bao giờ check lại các file zip sau khi tạo ra

Lo xa có thể chạy restic check 1 ngày 1 lần để kiểm tra lại toàn bộ dữ liệu, trung bình mỗi tuần hoặc mỗi tháng chạy 1 lần cũng đủ, lười hoặc dữ liệu không quan trọng thì kệ cũng được 😛 các công nghệ giờ không dễ lỗi thế đâu 😀

Bước restic check này mình chạy chưa khi nào gặp lỗi, nên cũng không rõ khi check thấy lỗi thì hướng tiếp theo cần làm gì 😀 nói chung dữ liệu lưu trên cloud object storage, độ ổn định của họ cấp độ vũ trụ luôn rồi, phần check này mình bổ xung thêm thôi, chắc không ông nào đọc bài này mà gặp tình huống đó nổi đâu :]]

  • Xóa các snapshot cũ

Cá nhân mình thích duy trì các snapshot theo tỷ lệ như bên dưới, sẽ có đủ các bản backup cho nhiều tình huống gặp phải

restic forget --keep-hourly 24 --keep-daily 31 --keep-monthly 12 --prune

--keep-hourly 24: giữ lại 24 bản snapshot (1 bản mỗi giờ trong 24 giờ gần nhất)

--keep-daily 31: giữ lại 31 bản snapshot (1 bản mỗi ngày trong 31 ngày gần nhất)

--keep-monthly 12: giữ lại 12 bản snapshot (1 bản mỗi tháng trong 12 tháng gần nhất).

Lưu cho các năm tiếp theo nữa thì tùy nhu cầu, nếu thích có thể dùng thêm --keep-yearly, là số lượng snapshot cho mỗi năm

Đây là các con số theo mình phù hợp cho 1 trang tương tác khủng, thường xuyên bị phá hoại, quản trị lo xa mất dữ liệu mới backup tới cỡ này, cơ bản 1 ngày lưu 1 snapshot đã đủ

Tổng dung lượng các snapshot theo cấu hình trên ~ 67 snapshot, nếu dữ liệu không thay đổi nhiều thì mỗi bản snapshot tăng vào tầm 4-6MB dữ liệu, 10 GB Cloudflare R2 miễn phí dùng bét nhè trên các website rồi

Kiểm tra lại mọi thứ

  • Xem thông tin tổng quan về kho lưu trữ, bao gồm kích thước dữ liệu đã sao lưu và các thông tin khác liên quan đến kho lưu trữ.
restic stats
repository 311cf31e opened (version 2, compression level auto)
[0:00] 100.00%  1 / 1 index files loaded
scanning...
Stats in restore-size mode:
     Snapshots processed:  3
        Total File Count:  113757
              Total Size:  6.858 GiB
  • Kiểm tra dung lượng thực tế kho lưu trữ (repository) trên cloud
rclone size cloudflare-free:restic-backup/bibica-net
Total objects: 92
Total size: 1.069 GiB (1147807075 Byte)
  • Sau khi chạy gần 1 ngày
root@bibica-net:~# restic stats
repository cb710fbc opened (version 2, compression level auto)
[0:00] 100.00%  2 / 2 index files loaded
scanning...
Stats in restore-size mode:
     Snapshots processed:  20
        Total File Count:  758394
              Total Size:  45.724 GiB
root@bibica-net:~# rclone size cloudflare-free:restic-backup/bibica-net
Total objects: 198
Total size: 1.168 GiB (1253758003 Byte)

Thêm vào 17 snapshots so với ban đầu mà chỉ tăng thêm tầm 100MB, tính ra mỗi snapshots chưa tới 6MB nữa, công nhận mấy cơ chế deduplication khét thật

  • Thử nghiệm hiệu năng trên 1 bash script chạy sẵn các lệnh restic backuprestic forget theo cấu hình như bài viết này, tần xuất 5 phút chạy cron 1 lần
[2025-01-20 13:30:01] [INFO] 🚀 Bắt đầu tạo backup...
[2025-01-20 13:30:01] [INFO] Thực hiện Restic Backup (lần thử 1/3)...
[2025-01-20 13:30:07] [INFO] Restic Backup thành công
[2025-01-20 13:30:07] [INFO] Bắt đầu dọn dẹp backup cũ...
[2025-01-20 13:30:07] [INFO] Thực hiện Restic Forget & Prune (lần thử 1/3)...
[2025-01-20 13:30:11] [INFO] Restic Forget & Prune thành công
[2025-01-20 13:30:11] [INFO] ✨ Script kết thúc.
[2025-01-20 13:35:01] [INFO] 🚀 Bắt đầu tạo backup...
[2025-01-20 13:35:01] [INFO] Thực hiện Restic Backup (lần thử 1/3)...
[2025-01-20 13:35:05] [INFO] Restic Backup thành công
[2025-01-20 13:35:05] [INFO] Bắt đầu dọn dẹp backup cũ...
[2025-01-20 13:35:05] [INFO] Thực hiện Restic Forget & Prune (lần thử 1/3)...
[2025-01-20 13:35:11] [INFO] Restic Forget & Prune thành công
[2025-01-20 13:35:11] [INFO] ✨ Script kết thúc.
[2025-01-20 13:40:01] [INFO] 🚀 Bắt đầu tạo backup...
[2025-01-20 13:40:01] [INFO] Thực hiện Restic Backup (lần thử 1/3)...
[2025-01-20 13:40:06] [INFO] Restic Backup thành công
[2025-01-20 13:40:06] [INFO] Bắt đầu dọn dẹp backup cũ...
[2025-01-20 13:40:06] [INFO] Thực hiện Restic Forget & Prune (lần thử 1/3)...
[2025-01-20 13:40:10] [INFO] Restic Forget & Prune thành công
[2025-01-20 13:40:10] [INFO] ✨ Script kết thúc.
[2025-01-20 13:45:01] [INFO] 🚀 Bắt đầu tạo backup...
[2025-01-20 13:45:01] [INFO] Thực hiện Restic Backup (lần thử 1/3)...
[2025-01-20 13:45:06] [INFO] Restic Backup thành công
[2025-01-20 13:45:06] [INFO] Bắt đầu dọn dẹp backup cũ...
[2025-01-20 13:45:06] [INFO] Thực hiện Restic Forget & Prune (lần thử 1/3)...
[2025-01-20 13:45:11] [INFO] Restic Forget & Prune thành công
[2025-01-20 13:45:11] [INFO] ✨ Script kết thúc.
[2025-01-20 13:50:01] [INFO] 🚀 Bắt đầu tạo backup...
[2025-01-20 13:50:01] [INFO] Thực hiện Restic Backup (lần thử 1/3)...
[2025-01-20 13:50:06] [INFO] Restic Backup thành công
[2025-01-20 13:50:06] [INFO] Bắt đầu dọn dẹp backup cũ...
[2025-01-20 13:50:06] [INFO] Thực hiện Restic Forget & Prune (lần thử 1/3)...
[2025-01-20 13:50:11] [INFO] Restic Forget & Prune thành công
[2025-01-20 13:50:11] [INFO] ✨ Script kết thúc.

Tổng thời gian mất khoảng 10-11s, độ ổn định rất cao, Restic, Rclone và Cloudflare R2 đúng là như đường với sữa nhờ 👾

  • Kiểm tra hiệu năng CPU

Restic kết hợp Rclone – giải pháp hoàn hảo cho sao lưu và khôi phục dữ liệu

Thử nghiệm ở chế độ bào phần cứng cao nhất bằng restic check --read-data, công nhận Restic hỗ trợ được trên CPU nhiều core thật, hú lên tới 70%-80% công xuất luôn 😀

Mặc định Restic thả cửa cho 1 ứng dụng backup, dùng hết công xuất CPU như thế cũng hơi khó hiểu, đúng ra mặc định chỉ nên set CPU và I/O ở mức thấp, nói chung vấn đề này cũng không quan trọng lắm, VPS nếu yếu quá thêm ionice -c2 nice -n19 vào trước lệnh chạy là được, ví dụ ionice -c2 nice -n19 restic check --read-data

  • Kiểm tra API Cloudlare R2

Phần này thường không quan trọng, mà do mình chỉ muốn dùng ở giới hạn miễn phí của Cloudflare, nên kiểm tra lại để xem nên chạy cron ở cường độ nào thì phù hợp

Restic kết hợp Rclone – giải pháp hoàn hảo cho sao lưu và khôi phục dữ liệu

Kiểm tra đơn giản bằng cách chạy tuần tự các lệnh restic backup, restic forgetrestic check --read-data xem số API thực tế dùng mỗi phút là bao nhiêu, ở cường độ cao nhất, 1 phút dùng ~ 40 API, cộng trừ nhân chia cơ bản nếu cứ 1 phút chạy cron 1 lần, 1 tháng dùng ~ 1,728,000 API, gần gấp đôi con số Cloudflare miễn phí

Dễ hiểu là với tính toán này, có thể chạy cron tối đa là 2 phút 1 lần, sẽ không bị quá giới hạn miễn phí, có điều cũng chẳng trang nào chạy backup cường độ điên cuồng như thế, quá không cần thiết 😀 mình sẽ duy trì thời gian hợp lý hơn, 15 phút chạy 1 lần 😈 nói là hợp lý chứ 15 phút chạy 1 lần cũng dạng cường độ cao lắm 🙀

  • Kiểm tra restore lại dữ liệu

Kiểm tra đơn giản bằng cách thêm 1 file mới vào các thư mục backup, điền bừa 1 nội dung tùy ý, sau đó chạy restic backup rồi restic restore, nếu thấy file đó ở bản restore nghĩa là backup ban đầu hoạt động chính xác, phần này kiểm tra cho vui mồm, chứ Restic xử lý mấy cái này chắc như muỗi 💀

Restic kết hợp Rclone – giải pháp hoàn hảo cho sao lưu và khôi phục dữ liệu

Nhìn thông số thì thấy ảo quá, nên không không chắc thông số lừa tình hay nó thực sự restore lại toàn bộ ~2.3GB dữ liệu trong 10s???

Kết luận

Phải nói là lâu rồi mới thấy có sản phẩm đáng giới thiệu như thế, dù thực tế Restic đã ra mắt từ 2014 mà nay mới dùng thử, nói nghiêm túc thì khi trải nghiệm sản phẩm mới, mình luôn cố kiếm lỗi, mà trên combo Restic, Rclone và Cloudflare R2 đúng là không biết chê cái gì luôn

Cài đặt đơn giản, trực tiếp lưu backup vào cloud, cấu hình đơn giản, sử dụng đơn giản, hiệu năng thì xé gió tụt wần, thậm chí lỗi file changed while we backed it up khi dùng các công nghệ dạng deduplication cũng không thấy luôn

Với các nhu cầu cường độ cao hơn thì không rõ, còn thuần túy sao lưu và khôi phục dữ liệu cho thèng bibica.net, 1 trang chạy WordPress qua docker thì phải nói là hoàn hảo


Related Posts

Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.

• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.

✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!