Ngừng lãng phí dung lượng: Hướng dẫn thực tế về BorgBackup trên Linux

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Cơn ác mộng về chi phí sao lưu tăng vọt

Trong những ngày đầu sự nghiệp, tôi quản lý một cụm máy chủ web nhỏ. Mỗi đêm, một tác vụ cron đơn giản chạy lệnh tar để nén các thư mục web và bản sao lưu cơ sở dữ liệu, rồi chuyển chúng tới một máy chủ lưu trữ từ xa. Nó hoạt động hoàn hảo trong khoảng ba tuần. Sau đó, hóa đơn lưu trữ ập đến.

Mặc dù dữ liệu thực tế của trang web chỉ tăng khoảng 50MB mỗi ngày, nhưng dung lượng lưu trữ của tôi lại tăng vọt 20GB mỗi đêm. Tôi đã phải trả tiền để lưu đi lưu lại cùng một tệp hình ảnh, cùng các tệp thư viện và cấu trúc cơ sở dữ liệu. Khi tôi cần khôi phục một tệp cấu trúc 10KB từ kho lưu trữ 50GB, tôi đã phải tải xuống toàn bộ khối dữ liệu đó. Với kết nối bị bóp băng thông, việc đó đã gây ra ba giờ gián đoạn (downtime) mà tôi không thể gánh nổi.

Vấn đề của sao lưu cấp độ tệp

Các công cụ tiêu chuẩn như rsync hoặc các script tar cơ bản xử lý dữ liệu không hiệu quả vì chúng coi tệp là một đơn vị nguyên khối. Hãy tưởng tượng bạn có một bản sao lưu cơ sở dữ liệu nặng 2GB. Nếu bạn chỉ thay đổi một dòng văn bản, rsync sẽ thấy tệp đã thay đổi và sao chép lại toàn bộ 2GB đó. Sau một tháng, bạn tốn 60GB dung lượng cho những dữ liệu về cơ bản là giống hệt nhau.

Bảo mật là một vấn đề đau đầu khác. Hầu hết các script cơ bản không mã hóa dữ liệu theo mặc định. Nếu máy chủ sao lưu bị xâm nhập, dữ liệu thô của khách hàng sẽ bị lộ. Việc quản lý thời gian lưu trữ (retention) — quyết định xóa bản sao lưu cũ nào mà không làm hỏng chuỗi dữ liệu — thường đòi hỏi phải viết các script phức tạp và dễ lỗi. Bạn cần một hệ thống hiểu dữ liệu ở cấp độ chi tiết, chứ không chỉ là một tập hợp các tệp tin.

Lựa chọn công cụ phù hợp

Một số cái tên thống trị hệ sinh thái sao lưu trên Linux, mỗi loại phục vụ một mục đích khác nhau:

  • Rsync: Đây là tiêu chuẩn vàng để đồng bộ thư mục. Tuy nhiên, nó không cung cấp tính năng quản lý phiên bản hoặc deduplication (khử trùng lặp) mặc định, dẫn đến chi phí lưu trữ cao cho lịch sử lâu dài.
  • Rclone: Hãy coi đây là con dao đa năng cho lưu trữ đám mây. Nó rất xuất sắc trong việc di chuyển dữ liệu sang S3 hoặc Google Drive, nhưng nó là công cụ đồng bộ, không phải là trình quản lý lưu trữ chuyên dụng.
  • BorgBackup (Borg): Công cụ này sử dụng deduplication ở cấp độ khối (chunk-level). Nó chia nhỏ các tệp thành các phần có kích thước thay đổi và chỉ lưu trữ các khối duy nhất. Nếu mười tệp khác nhau chứa cùng một khối mã 1MB, Borg chỉ lưu trữ nó đúng một lần.

BorgBackup nổi bật vì nó tích hợp tính năng deduplication, mã hóa AES-256 đã xác thực và nén vào trong một tệp thực thi duy nhất và nhanh chóng. Theo kinh nghiệm của tôi, việc chuyển từ tar sang Borg thường giúp giảm nhu cầu lưu trữ từ 70% đến 90%.

Từng bước triển khai BorgBackup

Sau khi quản lý hơn 10 VPS Linux trong vài năm qua, tôi đã tinh chỉnh một quy trình làm việc cân bằng giữa bảo mật và tính dễ sử dụng. Dưới đây là cách để vận hành nó.

1. Cài đặt BorgBackup

Hầu hết các bản phân phối Linux hiện đại đều có Borg trong kho lưu trữ chính thức. Trên Ubuntu hoặc Debian, việc cài đặt rất nhanh chóng:

sudo apt update
sudo apt install borgbackup -y

Đối với các hệ thống dựa trên RHEL như AlmaLinux hoặc Fedora, hãy sử dụng dnf:

sudo dnf install borgbackup -y

2. Khởi tạo kho lưu trữ sao lưu

Borg lưu trữ dữ liệu trong một “repository” (kho lưu trữ), thực chất là một thư mục nơi nó quản lý các khối dữ liệu đã mã hóa. Bạn chỉ cần khởi tạo nó một lần. Hãy luôn sử dụng mã hóa — thà có mà không dùng còn hơn cần dùng mà không có.

# Tạo một thư mục cho các bản sao lưu
mkdir -p /mnt/backups/my_server_repo

# Khởi tạo repo với tính năng mã hóa
borg init --encryption=repokey /mnt/backups/my_server_repo

Borg sẽ yêu cầu một mật khẩu (passphrase). Đừng để mất nó. Nếu bạn mất mật khẩu này, các bản sao lưu của bạn thực tế chỉ là những nhiễu loạn ngẫu nhiên không bao giờ có thể khôi phục được. Hãy lưu nó vào một trình quản lý mật khẩu như Bitwarden hoặc 1Password ngay lập tức.

3. Tạo bản sao lưu đầu tiên

Tạo một bản lưu trữ (archive) rất đơn giản. Bạn đặt tên cho bản lưu trữ (tôi khuyên bạn nên sử dụng mốc thời gian) và trỏ nó tới dữ liệu của bạn.

# Cú pháp: borg create /đường/dẫn/tới/repo::TênBảnLưuTrữ /đường/dẫn/tới/dữ/liệu
borg create --stats --progress /mnt/backups/my_server_repo::Monday-Backup /var/www/html /etc/nginx

Cờ --stats rất quan trọng để bạn yên tâm. Nó hiển thị cho bạn “Kích thước gốc” so với “Kích thước sau khử trùng lặp”, giúp bạn thấy chính xác lượng không gian đang được tiết kiệm trong thời gian thực.

4. Duyệt và khôi phục dữ liệu

Điều kỳ diệu thực sự xảy ra khi bạn cần lấy lại dữ liệu. Thay vì giải nén một bản lưu trữ khổng lồ, bạn có thể gắn (mount) bản sao lưu đó như một hệ thống tệp ảo. Điều này cho phép bạn duyệt các tệp bằng lệnh ls hoặc cp như thể chúng đang nằm trên ổ cứng của bạn.

mkdir /tmp/restore_point
borg mount /mnt/backups/my_server_repo::Monday-Backup /tmp/restore_point

# Bây giờ bạn có thể duyệt /tmp/restore_point và chỉ sao chép những gì bạn cần.
# Khi hoàn tất, hãy gỡ gắn nó:
borg umount /tmp/restore_point

5. Tự động hóa quy trình

Sao lưu thủ công là công thức dẫn đến thảm họa. Bạn cần một script để xử lý các công việc nặng nhọc và tự dọn dẹp sau đó. Dưới đây là một mẫu script sẵn sàng cho môi trường thực tế:

#!/bin/bash

export BORG_REPO='/mnt/backups/my_server_repo'
export BORG_PASSPHRASE='mật_khẩu_bảo_mật_của_bạn_ở_đây'

# Tạo bản sao lưu mới với mốc thời gian chính xác
echo "Đang bắt đầu sao lưu..."
borg create ::"$(date +%Y-%m-%d-%H%M)" /var/www/html /etc

# Giữ lại 7 bản sao lưu hàng ngày, 4 hàng tuần và 6 hàng tháng gần nhất
echo "Đang dọn dẹp các bản sao lưu cũ..."
borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6

# Giải phóng dung lượng từ các khối dữ liệu đã xóa
borg compact

echo "Sao lưu đã hoàn thành thành công."

Lưu tệp này thành /usr/local/bin/backup.sh, cấp quyền thực thi bằng chmod +x, và thiết lập một tác vụ cron để chạy vào 2:00 sáng hàng ngày:

0 2 * * * /usr/local/bin/backup.sh >> /var/log/borg-backup.log 2>&1

Những bài học xương máu cho môi trường thực tế

Thiết lập script mới chỉ là một nửa chặng đường. Tôi đã học được bài học đắt giá rằng một bản sao lưu chưa được kiểm tra chỉ là một giấc mơ. Hãy chạy lệnh borg check mỗi tháng một lần để đảm bảo phần cứng lưu trữ của bạn không làm hỏng các khối dữ liệu bên dưới.

Ngoài ra, hãy nhớ quy tắc 3-2-1. Nếu đĩa cứng máy chủ của bạn bị hỏng và repo Borg nằm trên chính đĩa đó, bạn sẽ mất trắng. Sau khi script Borg của tôi kết thúc, tôi sử dụng rclone để đồng bộ toàn bộ kho lưu trữ sang một bucket S3 bên ngoài. Vì Borg mã hóa mọi thứ cục bộ, dữ liệu của bạn vẫn riêng tư ngay cả khi nó nằm trên máy chủ của nhà cung cấp đám mây bên thứ ba.

Lời kết

BorgBackup loại bỏ “thuế lưu trữ” của các phương pháp sao lưu truyền thống bằng cách tập trung vào các khối dữ liệu duy nhất thay vì toàn bộ tệp. Bằng cách triển khai deduplication, bạn có thể lưu giữ lịch sử trạng thái máy chủ một cách chi tiết với chi phí cực thấp. Hãy bắt đầu bằng việc thiết lập một repo cục bộ, kiểm tra quy trình khôi phục hai lần, sau đó tự động hóa nó để giữ an toàn cho dữ liệu mà không làm cạn kiệt ngân sách của bạn.

Share: