Backup VPS chống trùng lặp với Restic (Tiết kiệm dung lượng)
Tóm tắt nhanh: Bài viết này hướng dẫn bạn cách sử dụng Restic để backup VPS chống trùng lặp hiệu quả, giúp tiết kiệm dung lượng lưu trữ đáng kể. Bạn sẽ học cách cài đặt, khởi tạo kho lưu trữ (repository), thực hiện backup, khôi phục dữ liệu (kể cả file lẻ), và tự động hóa toàn bộ quy trình một cách an toàn.
Restic là gì? Vì sao nên dùng Restic để backup VPS chống trùng lặp?
Thực hiện backup VPS chống trùng lặp là nhu cầu thiết yếu để bảo vệ dữ liệu mà vẫn tối ưu chi phí lưu trữ.
Nếu bạn đã đọc bài viết 3 cách backup VPS phổ biến của chúng tôi, bạn đã biết Rclone là giải pháp off-site tuyệt vời và Tar là cách backup thủ công. Nhưng cả hai đều có hạn chế:
tartạo ra các file.tar.gzđầy đủ (full backup) mỗi lần chạy, cực kỳ tốn dung lượng lưu trữ.rclone syncchỉ đồng bộ hóa 1-1. Nó không giúp bạn quản lý nhiều phiên bản (versioning) một cách hiệu quả.
Restic chính là giải pháp hoàn hảo cho vấn đề này.
Restic là một công cụ backup hiện đại, an toàn và cực kỳ thông minh. Nó không chỉ sao lưu dữ liệu mà còn quản lý chúng hiệu quả.
Giải thích “chống trùng lặp” (Deduplication)
Đây chính là tính năng cốt lõi của Restic và là lý do bạn nên dùng nó.
Khi bạn backup bằng tar, nếu bạn có 1 file 20GB và ngày mai file đó thay đổi 50MB, bạn phải backup lại toàn bộ 20.05GB.
Với Restic, quy trình hoạt động hoàn toàn khác:
- Chia nhỏ (Chunks): Lần đầu tiên, Restic chia file 20GB của bạn thành hàng ngàn “khối” (chunks) dữ liệu nhỏ.
- Hash: Nó tạo một chỉ mục (index) dựa trên mã hash của từng khối và lưu trữ các khối duy nhất.
- So sánh (Compare): Vào ngày mai, khi bạn backup lại file đã thay đổi 50MB, Restic chỉ cần xử lý 50MB mới đó.
- Chỉ lưu cái mới: Nó nhận ra 20GB kia đã tồn tại, và chỉ upload 50MB dữ liệu mới lên kho lưu trữ.
Kết quả? Bản backup 20GB của bạn vẫn được lưu trữ an toàn, nhưng dung lượng tăng thêm cho ngày hôm sau chỉ là 50MB, không phải 20GB. Đây chính là backup VPS chống trùng lặp ở cấp độ khối (block-level).
Cảnh báo quan trọng: Tài nguyên VPS
Vì Restic phải thực hiện nhiều phép toán hash và so sánh, nó có thể tiêu tốn tài nguyên khi chạy.
- RAM: Restic có thể sử dụng từ 200MB đến 500MB RAM (hoặc hơn nếu backup hàng triệu file nhỏ).
- Khuyến nghị: Hãy đảm bảo VPS của bạn có ít nhất 1GB RAM để Restic chạy ổn định mà không ảnh hưởng đến các dịch vụ khác. (Chúng ta sẽ có mẹo để giảm tải ở Mục 7).
Hướng dẫn cài đặt Restic trên VPS (Linux)
Bạn có hai cách chính để cài đặt Restic. Chúng tôi khuyến khích cách 1, vì nó đảm bảo bạn luôn có phiên bản mới nhất với đầy đủ tính năng và bản vá bảo mật.
Cách 1 (Khuyên dùng): Tải binary mới nhất
Cách này áp dụng được cho mọi bản phân phối Linux (Ubuntu, CentOS, Debian…) và luôn đảm bảo bạn có bản Restic mới nhất.
Bước 1: Tải về
Truy cập Trang phát hành Restic trên GitHub để tìm link bản linux_amd64.bz2 mới nhất.
Ví dụ dưới đây dùng bản 0.16.4. Bạn nên thay thế bằng link mới nhất bạn tìm được.
# Tải file nén .bz2 từ GitHub
wget https://github.com/restic/restic/releases/download/v0.16.4/restic_0.16.4_linux_amd64.bz2
Bước 2: Giải nén
Sử dụng bunzip2 (hoặc bzip2 -d) để giải nén file:
bunzip2 restic_0.16.4_linux_amd64.bz2
Bạn sẽ nhận được một file duy nhất tên là restic_0.16.4_linux_amd64.
Bước 3: Di chuyển và cấp quyền
Di chuyển file binary này vào thư mục /usr/local/bin để bạn có thể gọi lệnh restic từ bất cứ đâu, và cấp quyền thực thi (+x) cho nó.
# Đổi tên và di chuyển vào PATH
sudo mv restic_0.16.4_linux_amd64 /usr/local/bin/restic
# Cấp quyền thực thi
sudo chmod +x /usr/local/bin/restic
Cách 2 (Dễ nhưng có thể cũ): Dùng trình quản lý gói
Nếu bạn không ngại dùng bản cũ hơn một chút, apt (cho Ubuntu/Debian) hoặc yum (cho CentOS) là cách nhanh nhất.
Trên Ubuntu/Debian:
sudo apt update
sudo apt install restic -y
Trên CentOS/RHEL (Cần EPEL repo):
sudo yum install epel-release -y
sudo yum install restic -y
Kiểm tra và cập nhật Restic
Sau khi cài đặt (bằng bất kỳ cách nào), hãy kiểm tra phiên bản:
restic version
Bạn sẽ thấy output kiểu restic 0.16.4 compiled with go1.21.3...
Mẹo Pro: Tự động cập nhật
Nếu bạn đã cài đặt Restic (từ bản 0.9.3 trở lên), bạn có thể dùng chính nó để tự cập nhật lên phiên bản mới nhất. Đây là lý do chúng ta nên dùng binary!
Chỉ cần chạy lệnh:
sudo restic self-update
Restic sẽ tự động kiểm tra, tải về và thay thế chính nó bằng phiên bản mới nhất.
Khởi tạo repository (Kho lưu trữ)
Repository (hay “repo”) là nơi Restic lưu trữ tất cả dữ liệu backup.
Hãy tưởng tượng nó là một thư mục đặc biệt. Mọi thứ bạn đưa vào thư mục này đều được mã hóa, chống trùng lặp, và được bảo vệ. Bạn không thể đọc được dữ liệu bên trong nó nếu không có mật khẩu.
Bạn có nhiều lựa chọn để đặt repo này, nhưng tuyệt đối không đặt nó trên cùng VPS mà bạn đang backup. Điều đó vi phạm nguyên tắc an toàn off-site.
Dưới đây là các cách phổ biến nhất để khởi tạo repo:
Cách 1 (Đơn giản): Dùng Rclone
Nếu bạn đã quen thuộc với Rclone, đây là cách dễ nhất. Restic có thể tương tác trực tiếp với Rclone.
Giả sử bạn đã có một “remote” Rclone tên là b2_backup (trỏ đến Backblaze B2) và bạn muốn lưu backup vào thư mục my-vps-backup bên trong đó.
Lệnh khởi tạo:
restic -r rclone:b2_backup:/my-vps-backup init
-rlà viết tắt của--repository.rclone:báo cho Restic biết nó sẽ dùng Rclone.b2_backup:/my-vps-backupchính là đường dẫn Rclone remote của bạn.
Cách 2 (Native – Tối ưu): Dùng backend gốc của Restic
Restic cũng có thể tự kết nối trực tiếp đến nhiều dịch vụ lưu trữ. Cách này tối ưu hơn một chút vì nó là kết nối native (gốc) và không cần cài Rclone.
Ví dụ 1: Dùng SFTP (Một VPS khác)
Nếu bạn có một VPS thứ hai (ví dụ một VPS lưu trữ giá rẻ), bạn có thể dùng nó làm repo.
# Đặt biến môi trường cho đường dẫn repo
export RESTIC_REPOSITORY="sftp:[email protected]:/path/to/backup-repo"
# Chạy lệnh init
restic init
Ví dụ 2: Dùng S3-compatible (Khuyến nghị cho B2, Wasabi, v.v.)
Đây là cách khuyến nghị chính thức để kết nối với các dịch vụ như Backblaze B2, Wasabi, Linode Object Storage…
- Với Backblaze B2: Đăng nhập, vào mục “App Keys”, tạo một “Application Key” mới. Quan trọng là bạn phải chọn “Allow access to Bucket(s)” và lấy key S3-compatible (nó sẽ cung cấp
endpoint,Key IDvàSecret Key). - Với Wasabi (hoặc S3 khác): Lấy Access Key và Secret Key của bạn.
Sau đó, đặt các biến môi trường và chạy init:
# Đặt key của bạn (ví dụ dùng B2 S3-compatible)
export AWS_ACCESS_KEY_ID="KEY_ID_CUA_BAN"
export AWS_SECRET_ACCESS_KEY="SECRET_KEY_CUA_BAN"
# Đặt đường dẫn repo (Endpoint và tên bucket)
# (Endpoint của B2 S3, ví dụ: s3.us-west-004.backblazeb2.com)
export RESTIC_REPOSITORY="s3:https://s3.us-west-004.backblazeb2.com/my-bucket-name"
# Chạy lệnh init
restic init
QUAN TRỌNG: Mật khẩu repository
Dù bạn chọn cách nào, sau khi chạy restic init, Restic sẽ yêu cầu bạn:
enter password for new repository:
enter password again:
Hãy dùng một mật khẩu cực kỳ mạnh (nên dùng trình quản lý mật khẩu để tạo) và cất giữ nó cẩn thận.
Cảnh báo: Restic sử dụng mã hóa client-side. Điều này có nghĩa là nếu bạn mất mật khẩu này, bạn sẽ mất toàn bộ dữ liệu backup MÃI MÃI. Không có cách nào để reset hay khôi phục mật khẩu.
Sau khi khởi tạo thành công, bạn sẽ thấy thông báo: created restic repository at ...
Backup VPS với Restic (Lệnh thực tế)
Sau khi có repo, việc backup rất đơn giản. Nhưng trước khi gõ lệnh restic backup, có một bước cực kỳ quan trọng bạn phải làm: Lên danh sách loại trừ (exclude list).
Bước 1 (Bắt buộc): Tạo file loại trừ (Exclude List)
Chúng ta sẽ tạo một file exclude.list để chỉ định Restic bỏ qua các tệp không cần thiết. Nếu không, bạn sẽ vô tình backup cả file rác, file tạm, và các file ảo của hệ thống (/proc, /sys).
Tạo file:
# Tạo thư mục /etc/restic nếu chưa có
sudo mkdir -p /etc/restic
# Tạo và mở file exclude
sudo nano /etc/restic/exclude.list
Nếu bạn chưa quen dùng nano, đây là một trình soạn thảo văn bản cơ bản trong Linux, nằm trong danh sách các lệnh Linux cơ bản.
Dán nội dung sau vào file: Đây là danh sách loại trừ an toàn, phổ biến cho hầu hết các VPS Linux.
# Loại bỏ các hệ thống file ảo của Linux
/dev/*
/proc/*
/sys/*
# Loại bỏ các file tạm và cache
/tmp/*
/var/tmp/*
/var/cache/*
# Các thư mục hệ thống khác
/run/*
/mnt/*
/media/*
lost+found
Lưu file và thoát (Nhấn Ctrl+O rồi Ctrl+X trong nano).
Bước 2: Đặt biến môi trường (Tiện lợi)
Để không phải gõ lại mật khẩu và đường dẫn repo mỗi lần, hãy “export” chúng thành biến môi trường.
# Đặt mật khẩu của bạn
export RESTIC_PASSWORD="MAT_KHAU_MANH_ME_CUA_BAN"
# Đặt đường dẫn repo (Chọn 1 trong các cách bạn đã làm ở Mục 3)
# Ví dụ dùng Rclone:
export RESTIC_REPOSITORY="rclone:b2_backup:/my-vps-backup"
Hãy chạy các lệnh export này ngay trong terminal của bạn.
Bước 3: Chạy lệnh backup (Snapshot đầu tiên)
Bây giờ là lúc chạy lệnh. Chúng ta sẽ backup 3 thư mục quan trọng nhất (ví dụ):
/etc: Chứa toàn bộ file cấu hình server./home: Chứa dữ liệu người dùng./var/www: Thư mục chứa source code website.
Lệnh backup:
restic backup /etc /home /var/www \
--exclude-file /etc/restic/exclude.list \
--one-file-system \
--tag vps-web
Giải thích các tùy chọn (flags):
restic backup ...: Lệnh backup các đường dẫn/etc,/home,/var/www.--exclude-file ...: Sử dụng file loại trừ chúng ta vừa tạo.--one-file-system: Một cờ rất an toàn. Nó ngăn Restic backup các ổ đĩa khác nếu bạn có mount (gắn) thêm ổ đĩa ngoài vào VPS.--tag vps-web: Gắn nhãn (tag) cho bản backup này. Cực kỳ hữu ích để sau này bạn tìm và khôi phục.
Mẹo nhanh: Lỡ may VPS mất kết nối khi đang backup? Đừng lo. Restic được thiết kế để tiếp tục. Chỉ cần chạy lại lệnh, nó sẽ tự động quét và chỉ upload phần còn dang dở mà không cần bắt đầu lại từ đầu.
Bước 4: Kiểm tra các bản backup
Sau khi backup xong, làm sao để biết nó đã thành công? Hãy dùng lệnh snapshots.
restic snapshots
Bạn sẽ thấy một bảng danh sách các snapshot bạn vừa tạo, kèm theo ID, thời gian, và các thư mục đã backup.
ID Time Host Tags Paths
----------------------------------------------------------------------
a1b2c3d4 2025-11-07 14:30:00 my-vps vps-web /etc
/home
/var/www
----------------------------------------------------------------------
Phục hồi dữ liệu (Restore) khi gặp sự cố
Backup mà không biết cách restore thì không có giá trị. Đây là hai cách cực kỳ mạnh mẽ để khôi phục dữ liệu của bạn.
Cài fuse (Điều kiện tiên quyết cho Cách 1)
Nếu bạn muốn dùng tính năng “Mount” (Cách 1), bạn cần cài gói fuse trước.
Trên Ubuntu/Debian:
sudo apt install fuse -y
Trên CentOS/RHEL:
sudo yum install fuse -y
Lựa chọn 1: “Mount” repo (Cách hay nhất để lấy file lẻ)
Đây là tính năng giá trị nhất của Restic. Bạn không cần tải toàn bộ bản backup về. Bạn có thể mount (gắn) toàn bộ kho lưu trữ backup của bạn thành một ổ đĩa ảo trên VPS và duyệt nó như một thư mục bình thường.
Bước 1: Tạo thư mục để mount
mkdir /mnt/restic-browse
Bước 2: Mount repo (Đảm bảo bạn vẫn đang đặt các biến môi trường RESTIC_PASSWORD và RESTIC_REPOSITORY nhé).
# Chạy lệnh mount và để nó chạy ở chế độ nền (dấu &)
restic mount /mnt/restic-browse &
Bước 3: Duyệt file
Bây giờ, hãy thử ls thư mục đó:
ls /mnt/restic-browse
Bạn sẽ thấy các thư mục con như snapshots, ids, tags…
Đi vào thư mục tags (ví dụ):
cd /mnt/restic-browse/tags/vps-web
ls -l
Bạn sẽ thấy tất cả các bản backup có tag vps-web, được sắp xếp theo ngày. Bạn có thể cd sâu vào bên trong và dùng lệnh cp (copy) để lấy chính xác file config mà bạn lỡ tay xóa.
Bước 4: Unmount khi xong
Khi đã lấy file xong, hãy ngắt kết nối ổ đĩa ảo:
# Trở về thư mục home
cd ~
# Unmount
sudo umount /mnt/restic-browse
Lựa chọn 2: Khôi phục toàn bộ Snapshot
Cách này dùng khi bạn cần khôi phục toàn bộ thư mục. Restic sẽ tải dữ liệu từ repo về.
Ví dụ: Khôi phục bản backup vps-web mới nhất vào một thư mục tạm tên là /tmp/restore (để kiểm tra trước).
# Luôn khôi phục vào thư mục TẠM.
# Đừng bao giờ restore thẳng đè lên dữ liệu gốc!
restic restore latest --tag vps-web --target /tmp/restore
latest: Lấy snapshot mới nhất. Bạn cũng có thể thay bằng ID (nhưa1b2c3d4).--tag vps-web: Chỉ tìm trong các snapshot có tag này.--target /tmp/restore: Thư mục đích để chứa dữ liệu khôi phục.
Sau khi xong, bạn vào /tmp/restore sẽ thấy đầy đủ các thư mục /etc, /home, /var/www của mình.
[NÂNG CAO] Backup Database (MySQL/PostgreSQL) đúng cách
Bạn không thể backup database (như MySQL, PostgreSQL) bằng cách backup file (/var/lib/mysql) khi nó đang hoạt động. Làm vậy sẽ khiến file backup bị lỗi (corrupt).
Cách đúng là phải dump database ra file .sql trước, rồi mới backup file đó.
Cách thông minh là dùng pipe (ống dẫn): dump database và chuyển thẳng luồng dữ liệu đó vào Restic mà không cần lưu file .sql tạm. Chúng ta sẽ dùng cờ --stdin.
Script cho MySQL (MariaDB)
#!/bin/bash
# Dòng này cực kỳ quan trọng:
# Nếu lệnh mysqldump thất bại, toàn bộ script sẽ dừng lại
# Tránh Restic backup một file dump rỗng
set -o pipefail
# Đảm bảo bạn đã export các biến:
# export RESTIC_PASSWORD="..."
# export RESTIC_REPOSITORY="..."
DB_USER="[user_db_cua_ban]"
DB_PASS="[pass_db_cua_ban]"
FILENAME="all-databases-$(date +%Y-%m-%d).sql"
echo "Đang dump MySQL và pipe vào Restic..."
# Lệnh chính:
mysqldump --all-databases -u $DB_USER -p$DB_PASS | restic backup \
--stdin \
--stdin-filename $FILENAME \
--tag db-dump
echo "Backup database hoàn tất, lưu với tên: $FILENAME"
Giải thích:
set -o pipefail: Đảm bảo an toàn.|(dấu pipe): Chuyển toàn bộ output củamysqldump…restic backup --stdin: …làm input (đầu vào) cho Restic.--stdin-filename ...: Đặt tên cho file “ảo” này bên trong Restic để bạn dễ nhận ra khi restore.
Script cho PostgreSQL
Tương tự MySQL, chúng ta dùng pg_dumpall và pipe:
#!/bin/bash
set -o pipefail
# Đặt biến môi trường cho PostgreSQL
export PGUSER="[user_pg_cua_ban]"
export PGPASSWORD="[pass_pg_cua_ban]"
# (Các biến Restic...)
FILENAME="pg-all-$(date +%Y-%m-%d).sql"
echo "Đang dump PostgreSQL và pipe vào Restic..."
pg_dumpall | restic backup \
--stdin \
--stdin-filename $FILENAME \
--tag db-dump
Tự động hóa (Cron / Systemd) và dọn dẹp
Chúng ta sẽ kết hợp mọi thứ đã học vào một script duy nhất và cho nó tự động chạy mỗi đêm.
Bước 1: Tạo file mật khẩu (Bảo mật)
Bạn không nên gõ mật khẩu vào script. Hãy tạo một file chứa mật khẩu và bảo mật nó.
# Tạo file chứa mật khẩu
echo "MAT_KHAU_MANH_ME_CUA_BAN" > /root/.restic-pass
# Set quyền CHỈ ROOT được đọc
chmod 600 /root/.restic-pass
Bước 2: Tạo script backup tổng hợp
Đây là “trung tâm điều khiển” của hệ thống backup. Chúng ta sẽ tạo một file script backup.sh tại /root/.
# Tạo và mở file script
sudo nano /root/backup.sh
Dán toàn bộ nội dung sau vào file: (Hãy sửa lại các biến cho đúng với cấu hình của bạn, đặc biệt là RESTIC_REPOSITORY và thông tin DB).
#!/bin/bash
# Dừng script nếu có lỗi
set -o pipefail
# ----- CẤU HÌNH CỦA BẠN -----
# Đặt biến môi trường
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export RESTIC_REPOSITORY="s3:https://s3.us-west-004.backblazeb2.com/my-bucket-name" # (Ví dụ B2 S3-compatible)
# (Tùy chọn) Thông tin Database
DB_USER="[user_db_cua_ban]"
DB_PASS="[pass_db_cua_ban]"
# Nơi lưu file log
LOG_FILE="/var/log/restic_backup.log"
# ----- BẮT ĐẦU SCRIPT -----
echo "--- Bắt đầu backup lúc $(date) ---" >> $LOG_FILE
# 1. Backup file hệ thống (Ví dụ: /etc, /home, /var/www)
echo "Backup file hệ thống..." >> $LOG_FILE
restic backup /etc /home /var/www \
--exclude-file /etc/restic/exclude.list \
--one-file-system \
--tag vps-web \
--skip-if-unchanged >> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
echo "Backup file thành công (hoặc không có gì thay đổi)." >> $LOG_FILE
else
echo "LỖI: Backup file thất bại." >> $LOG_FILE
fi
# 2. Backup database (Nếu có)
echo "Backup database..." >> $LOG_FILE
mysqldump --all-databases -u $DB_USER -p$DB_PASS | restic backup \
--stdin \
--stdin-filename all-databases-$(date +%Y-%m-%d).sql \
--tag db-dump \
--skip-if-unchanged >> $LOG_FILE 2>&1
# (Lưu ý: skip-if-unchanged cho DB thường sẽ luôn tạo mới do có timestamp trong file dump)
if [ $? -eq 0 ]; then
echo "Backup database thành công." >> $LOG_FILE
else
echo "LỖI: Backup database thất bại." >> $LOG_FILE
fi
# 3. Kiểm tra tính toàn vẹn (Check 10% dữ liệu)
echo "Kiểm tra dữ liệu repo (10% subset)..." >> $LOG_FILE
restic check --read-data-subset=10% >> $LOG_FILE 2>&1
# 4. Dọn dẹp snapshot cũ (Chính sách lưu trữ)
echo "Dọn dẹp snapshot cũ..." >> $LOG_FILE
restic forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--prune >> $LOG_FILE 2>&1
echo "Dọn dẹp hoàn tất." >> $LOG_FILE
echo "--- Backup hoàn tất lúc $(date) ---" >> $LOG_FILE
Ghi chú: Chúng ta đã thêm cờ --skip-if-unchanged (Mục 2) để script chạy hiệu quả hơn, tránh tạo snapshot rác nếu không có gì thay đổi.
Sau khi lưu file, hãy cấp quyền thực thi cho nó:
sudo chmod +x /root/backup.sh
Mẹo Pro: Hiểu rõ lệnh restic check
Script của chúng ta dùng restic check --read-data-subset=10%, đây là sự cân bằng tuyệt vời giữa tốc độ và độ an toàn. Tuy nhiên, bạn nên biết các cấp độ của check để quản lý mức độ tin cậy vào bản backup:
restic check(Không cờ): Rất nhanh. Chỉ kiểm tra cấu trúc và siêu dữ liệu (metadata) của repo, đảm bảo các snapshot có thể đọc được.restic check --read-data(Không có “subset”): Đây là tiêu chuẩn cao nhất nhưng rất chậm. Nó sẽ tải về, giải mã và xác minh toàn bộ dữ liệu trong kho lưu trữ của bạn.
Khuyến nghị: Hãy chạy restic check --read-data thủ công mỗi tháng một lần (hoặc tạo một cron job riêng chạy vào Chủ Nhật đầu tiên của tháng) để có sự yên tâm tuyệt đối.
Bước 3: Lên lịch tự động chạy
Bạn có hai lựa chọn: cron (cổ điển, dễ) hoặc systemd (hiện đại).
Cách 1 (Khuyên dùng cho người mới): Dùng cron
Mở trình chỉnh sửa crontab:
crontab -e
Thêm dòng sau vào cuối file để chạy script vào 2:30 sáng mỗi ngày:
# Chạy Restic backup mỗi ngày lúc 2:30 sáng
30 2 * * * /bin/bash /root/backup.sh
Mẹo Pro: Giới hạn tài nguyên Restic trên VPS yếu
Để Restic backup “nhẹ nhàng” không ảnh hưởng đến website, bạn có thể dùng nice (ưu tiên CPU) và ionice (ưu tiên I/O).
Sửa lại dòng crontab -e của bạn như sau:
# Chạy Restic với ưu tiên CPU và I/O thấp nhất
30 2 * * * nice -n 19 ionice -c 3 /bin/bash /root/backup.sh
Bằng cách này, nếu website có truy cập đột ngột (gây VPS bị chậm, lag), Restic sẽ tự động “nhường” tài nguyên.
Cách 2 (Hiện đại): Dùng systemd Timers (Dành cho các bản Linux hiện đại như Ubuntu 18.04+, CentOS 7+).
- Tạo file Service:
sudo nano /etc/systemd/system/restic-backup.service[Unit] Description=Restic Backup Service [Service] Type=oneshot ExecStart=/bin/bash /root/backup.sh CPUSchedulingPolicy=idle IOSchedulingClass=idle - Tạo file Timer:
sudo nano /etc/systemd/system/restic-backup.timer[Unit] Description=Run Restic Backup daily at 2:30 AM [Timer] OnCalendar=02:30:00 Persistent=true Unit=restic-backup.service [Install] WantedBy=timers.target - Kích hoạt:
sudo systemctl daemon-reloadsudo systemctl enable --now restic-backup.timer
Mẹo Pro (Bảo mật): Backup toàn quyền mà không cần root
Script trên đang chạy với quyền root (qua sudo hoặc crontab của root). Nếu bạn muốn bảo mật hơn (ví dụ như vô hiệu hóa đăng nhập root), bạn có thể cấp cho Restic khả năng đọc mọi file mà không cần root.
Chạy lệnh này một lần duy nhất:
sudo setcap cap_dac_read_search=+ep /usr/local/bin/restic
cap_dac_read_search: Cho phép tiến trình bỏ qua quyền (permission) khi đọc file.
Sau khi chạy lệnh này, bạn có thể tạo một user mới (ví dụ backup-user), chạy script backup.sh với user đó, và nó vẫn có thể đọc được file của /var/www (dù không phải là chủ sở hữu). Đây là một kỹ thuật bảo mật nâng cao rất mạnh mẽ.
Kết luận
Vậy là xong! Bạn đã vừa thiết lập một hệ thống backup VPS chống trùng lặp hoàn toàn tự động, an toàn và siêu tiết kiệm dung lượng.
Restic là một cuộc cách mạng cho quản trị viên hệ thống. Nó giải quyết triệt để bài toán “tốn dung lượng” của tar và “thiếu phiên bản” của rsync. Với Restic, bạn có thể tự tin backup hàng ngày mà không lo đầy ổ cứng hay tốn kém chi phí.
Tóm tắt lợi ích của Restic:
- An toàn: Mã hóa client-side, không ai đọc được dữ liệu của bạn trừ bạn.
- Hiệu quả: Chỉ backup các “khối” (chunks) thay đổi, giúp lần backup sau cực nhanh.
- Siêu tiết kiệm: Công nghệ chống trùng lặp (deduplication) giảm dung lượng lưu trữ xuống mức tối đa.
- Linh hoạt: Quản lý phiên bản (snapshot) thông minh, khôi phục file lẻ dễ dàng.
Restic là công cụ mạnh mẽ xứng đáng thay thế các script backup
tar.gztruyền thống. Hãy cài đặt và chạy snapshot đầu tiên ngay hôm nay để bảo vệ dữ liệu VPS của bạn!







