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
- Miễn phí, có tên tuổi thương hiệu lâu năm trong giới
- 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
- 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 - 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
- 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
- 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êncloudflare-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_REPOSITORY
và RESTIC_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 Y
và Enter
).
- 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_REPOSITORY
và RESTIC_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
và /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 1 --prune
--keep-hourly 24
: mỗi giờ lưu 1 snapshots trong 24h gần nhất
--keep-daily 31
: mỗi ngày lưu 1 snapshots, trong 31 ngày gần nhất
--keep-monthly 1
: mỗi tháng lưu 1 bản snapshots, 1 năm gần nhất lưu 12 bản
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 backup
vàrestic 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
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
Kiểm tra đơn giản bằng cách chạy tuần tự các lệnh restic backup,
restic forget
và restic 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 💀
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
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ị!