BorgBackup trên Ubuntu: Giải pháp sao lưu ‘siêu nén’ và mã hóa an toàn cho Sysadmin

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

Cú điện thoại lúc 2 giờ sáng và bài học nhớ đời

2 giờ sáng, chuông điện thoại reo dồn dập. Đầu dây bên kia, cậu em trực ca đêm báo tin sét đánh: Ổ cứng con server chứa database staging vừa sập vì lỗi filesystem. Mình bật dậy, mồ hôi vã ra khi kiểm tra script backup cũ chạy bằng rsync. Kết quả còn tệ hơn: Cái ổ 1TB tưởng thênh thang bỗng chốc đầy nhóc vì hàng chục bản copy trùng lặp, khiến bản backup mới nhất bị hỏng giữa chừng.

Sau đêm đó, mình dẹp bỏ toàn bộ các script tar hay rsync thủ công. Trên hơn 20 con VPS Ubuntu đang quản lý, quy trình thiết lập BorgBackup luôn là ưu tiên số một của mình. Nếu bạn đang vận hành server, đừng đợi đến lúc mất trắng dữ liệu mới bắt đầu đi tìm giải pháp.

BorgBackup có gì mà dân hệ thống lại mê đến thế?

Khác với rsync chỉ copy file đơn thuần, BorgBackup (gọi tắt là Borg) xử lý dữ liệu thông minh hơn hẳn nhờ hai vũ khí hạng nặng:

  • Chống trùng lặp (Deduplication): Borg chia nhỏ file thành các khối dữ liệu (chunks). Nếu bạn backup 10 ngày liên tiếp cho một thư mục 100GB mà dữ liệu ít thay đổi, thay vì tốn 1TB, Borg có thể chỉ chiếm khoảng 110GB.
  • Mã hóa đầu cuối (Client-side Encryption): Dữ liệu được khóa lại bằng AES-256 ngay tại server của bạn trước khi gửi đi. Dù hacker có lấy được ổ cứng backup, chúng cũng chỉ thấy một đống ký tự vô nghĩa nếu không có mật mã.
  • Nén cực đỉnh: Với các thuật toán như LZ4 hay Zstandard, dung lượng lưu trữ thường giảm thêm 30-50% sau khi đã chống trùng lặp.

Bước 1: Cài đặt nhanh trên Ubuntu

Borg đã có sẵn trong kho phần mềm chính thức nên việc cài đặt chỉ mất chưa đầy 1 phút. Mình thường thực hiện lệnh này trên các bản Ubuntu 22.04 hoặc 24.04 LTS.

sudo apt update
sudo apt install borgbackup -y

Kiểm tra xem mọi thứ đã sẵn sàng chưa bằng lệnh:

borg --version

Bước 2: Khởi tạo Kho lưu trữ (Repository)

Bạn cần một nơi để chứa các bản backup, gọi là Repository. Kho này có thể nằm trên ổ cứng gắn ngoài hoặc một server từ xa qua SSH. Ở đây, mình dùng chế độ repokey để mã hóa dữ liệu bằng mật khẩu.

# Tạo thư mục chứa repo
mkdir -p /mnt/backup/my_webapp_repo

# Khởi tạo repo với chuẩn mã hóa mạnh nhất
borg init --encryption=repokey /mnt/backup/my_webapp_repo

Lưu ý ‘sống còn’: Borg sẽ yêu cầu bạn nhập passphrase (mật khẩu). Hãy lưu mật khẩu này vào trình quản lý password như Bitwarden hoặc ghi ra giấy. Mất passphrase là mất luôn toàn bộ dữ liệu, không có nút ‘Quên mật khẩu’ đâu!

Bước 3: Chạy bản backup đầu tiên

Giả sử mình cần sao lưu code tại /var/www/html và cấu hình Nginx tại /etc/nginx. Mình sẽ đặt tên bản backup này theo ngày cho dễ nhớ.

borg create --stats --progress /mnt/backup/my_webapp_repo::web-2026-05-12 /var/www/html /etc/nginx

Khi lệnh chạy xong, phần --stats sẽ cho bạn thấy con số thực tế: Dung lượng gốc là bao nhiêu và Borg đã ‘gọt giũa’ nó còn lại bao nhiêu MB. Lần đầu sẽ hơi lâu, nhưng từ lần sau tốc độ sẽ cực nhanh vì Borg chỉ gửi đi những phần dữ liệu mới thay đổi.

Bước 4: Cách khôi phục khi có sự cố

Để xem danh sách các bản backup đã thực hiện, bạn dùng lệnh list:

borg list /mnt/backup/my_webapp_repo

Nếu lỡ tay xóa nhầm một file cấu hình quan trọng, bạn không cần khôi phục cả GB dữ liệu. Chỉ cần ‘trích xuất’ đúng file đó:

cd /tmp/restore
borg extract /mnt/backup/my_webapp_repo::web-2026-05-12 etc/nginx/nginx.conf

Một tính năng ‘ăn tiền’ nữa là Mount. Bạn có thể gắn cả kho backup vào một thư mục để duyệt file như ổ đĩa bình thường bằng lệnh lscp. Tiện hơn nhiều so với việc phải giải nén thủ công.

Bước 5: Tự động hóa và dọn dẹp kho bãi

Sysadmin thực thụ không bao giờ gõ lệnh backup bằng tay mỗi ngày. Hãy dùng một script Bash đơn giản và đẩy vào Crontab. Đừng quên dùng lệnh prune để tự động xóa các bản backup quá cũ, tránh việc đầy ổ cứng một lần nữa.

# Script backup tự động mẫu
export BORG_PASSPHRASE='mat_khau_cua_ban'

borg create /mnt/backup/my_webapp_repo::web-{now:%Y-%m-%d} /var/www/html

# Chỉ giữ lại 7 bản hàng ngày, 4 bản hàng tuần và 6 bản hàng tháng
borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /mnt/backup/my_webapp_repo

Đặt script này chạy lúc 1 giờ sáng qua crontab -e là bạn có thể yên tâm đi ngủ mà không lo ‘giật mình’ lúc nửa đêm.

Lời kết

Kinh nghiệm thực chiến cho mình thấy: Backup không phải là để lưu trữ cho vui, mà là để khi cần phải khôi phục được ngay lập tức. BorgBackup đã cứu mình không dưới 3 lần trong những tình huống server ‘đột tử’. Nó nhanh, tiết kiệm và cực kỳ tin cậy.

Hãy dành 10 phút để thiết lập Borg ngay hôm nay. Đừng để đến lúc mất sạch dữ liệu mới ước giá như mình đã cài nó sớm hơn.

Share: