Cuộc gọi đánh thức lúc 2:00 sáng: Cạn kiệt dung lượng lưu trữ
Vào lúc 2:15 sáng Chủ nhật, PagerDuty réo chuông liên hồi trên điện thoại của tôi: PVE-Storage-Pool: Đã đạt 98% dung lượng đĩa. Chỉ trong ba tuần, một lịch trình vzdump cơ bản sao lưu tám VM và mười hai LXC container lên hệ thống lưu trữ NFS thông thường đã ngốn sạch 14 TB dung lượng đĩa. Mỗi lần chạy hàng đêm đều tạo ra các file lưu trữ .vma.zst nguyên khối hoặc không nén khổng lồ. Từng tác vụ đều đẩy các lớp hệ điều hành giống hệt nhau qua mạng với dung lượng hàng chục gigabyte, làm nghẽn đường truyền 1 Gbps và khiến I/O của hệ thống lưu trữ bị quá tải nghiêm trọng.
Cảm giác dọn dẹp các bản sao lưu cũ bằng tay trong khi các truy vấn cơ sở dữ liệu production bị nghẽn thực sự rất tồi tệ. Điều đó làm rõ một điều: các chiến lược sao lưu toàn bộ (full) và vi sai (differential) truyền thống sẽ thất bại khi cụm máy chủ của bạn mở rộng vượt quá vài node.
Cách Proxmox Backup Server giải quyết vấn đề phình to dung lượng
Proxmox Backup Server (PBS) thay thế việc xuất image nguyên khối bằng bốn cơ chế chuyên dụng:
- Chống trùng lặp theo khối (Chunk-Level Deduplication): PBS chia nhỏ luồng sao lưu thành các khối (chunk) động, được xác định theo nội dung với kích thước trung bình 4 MB. Khi hai mươi VM Debian hoặc Windows Server dùng chung các file nhị phân hệ điều hành gốc giống nhau, PBS chỉ lưu trữ các khối dùng chung đó một lần duy nhất trên toàn bộ các VM và lịch sử snapshot.
- Sao lưu gia tăng vĩnh viễn qua Dirty Bitmaps: QEMU dirty bitmaps theo dõi các khối đĩa bị thay đổi ngay trong RAM. PVE client chỉ tải lên các chunk mới được sửa đổi sang PBS. Việc sao lưu một VM cơ sở dữ liệu dung lượng 200 GB với 450 MB dữ liệu thay đổi hàng ngày hoàn tất chỉ trong 15 giây thay vì 40 phút.
- Mã hóa phía Client: Hypervisor PVE mã hóa các chunk bằng AES-256-GCM trước khi truyền qua mạng. PBS chỉ lưu trữ các khối dữ liệu mã hóa thô và không bao giờ có quyền truy cập vào khóa giải mã riêng tư của bạn.
- Tự động xác thực tính toàn vẹn: Các tác vụ verify chạy ngầm sẽ kiểm tra mã băm SHA-256 của các chunk đã lưu để phát hiện tình trạng suy thoái dữ liệu (bit rot) trên ổ đĩa từ rất lâu trước khi bạn cần phục hồi sau sự cố.
Thực hành triển khai: Tích hợp PBS Bare-Metal với PVE
Bước 1: Cài đặt Proxmox Backup Server trên máy chủ chuyên dụng
Bạn nên luôn luôn chạy PBS trên phần cứng độc lập hoặc một máy chủ phụ riêng biệt nằm ngoài cụm tính toán PVE chính. Bạn có thể ghi file ISO PBS chính thức ra USB hoặc cài đặt trực tiếp lên một máy chủ Debian 12 (Bookworm) bản minimal sạch sẽ.
Để cài đặt PBS trên máy Debian Bookworm có sẵn, hãy cấu hình kho lưu trữ cộng đồng:
# Thêm kho lưu trữ no-subscription của PBS
echo "deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" > /etc/apt/sources.list.d/pbs.list
# Tải về và đăng ký release key của Proxmox
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
# Cập nhật danh sách gói và cài đặt bộ phần mềm máy chủ
apt update && apt install -y proxmox-backup-server
Sau khi quá trình cài đặt hoàn tất, hãy mở trình duyệt và truy cập vào trang quản trị tại địa chỉ https://<PBS-IP-ADDRESS>:8007.
Bước 2: Khởi tạo lưu trữ và tạo Datastore
Hãy lưu trữ các chunk sao lưu trên một ZFS pool chuyên dụng. Cấu hình mirror hai ổ đĩa hoặc RAIDZ2 nhiều ổ đĩa sẽ mang lại khả năng dự phòng tốt và khả năng tự sửa lỗi cho các khối dữ liệu.
# Tạo ZFS pool dạng mirror từ các ổ đĩa doanh nghiệp 4TB
zpool create -f -o ashift=12 backup-pool mirror /dev/sdb /dev/sdc
# Thiết lập đường dẫn mountpoint cho datastore
zfs set mountpoint=/mnt/datastore/backup-pool backup-pool
Đăng ký datastore bên trong PBS bằng CLI hoặc thông qua Datastore > Add Datastore trên giao diện web:
proxmox-backup-manager datastore create BackupVault /mnt/datastore/backup-pool
Bước 3: Tạo người dùng sao lưu chuyên dụng và API Token
Tránh xác thực PVE bằng tài khoản root của PBS. Thay vào đó, hãy tạo một tài khoản dịch vụ riêng và liên kết với một API token có phạm vi quyền hạn được giới hạn:
# Tạo tài khoản dịch vụ cho PVE
proxmox-backup-manager user create pve-backup@pbs --comment "Worker sao lưu cụm PVE"
# Gán quyền DatastoreBackup trên datastore đích
proxmox-backup-manager acl update /datastore/BackupVault DatastoreBackup --auth-id pve-backup@pbs
# Tạo API token để xác thực tự động
proxmox-backup-manager user generate-token pve-backup@pbs pve-token
Sao chép khóa bí mật của token hiển thị trong terminal. Sau đó lấy fingerprint chứng chỉ TLS từ máy chủ PBS:
# Trích xuất fingerprint chứng chỉ SHA-256
proxmox-backup-manager cert info | grep "Fingerprint (SHA256)"
Bước 4: Gắn Storage Target PBS vào Proxmox VE
Chuyển sang shell root của Proxmox VE. Kết nối cụm máy chủ với PBS bằng lệnh pvesm, truyền API token và fingerprint chứng chỉ để ngăn chặn các cuộc tấn công MITM:
# Thêm PBS remote storage vào PVE và kích hoạt mã hóa phía client
pvesm add pbs PBS-Remote \
--server 192.168.10.50 \
--datastore BackupVault \
--username pve-backup@pbs!pve-token \
--password "ab48f189-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
--fingerprint "9a:4f:b3:81:12:...:5e:31" \
--encryption-key autogen
Tham số --encryption-key autogen sẽ ghi một khóa đối xứng cục bộ vào file /etc/pve/priv/storage/PBS-Remote.enc. Hãy tải file này về và lưu vào trình quản lý mật khẩu có mã hóa hoặc két lưu trữ lạnh offline. Nếu node PVE của bạn gặp sự cố, bạn sẽ không thể khôi phục các bản sao lưu đã mã hóa nếu không có chính xác file khóa này.
Bước 5: Chạy và đánh giá bản sao lưu chống trùng lặp đầu tiên
Kích hoạt một bản sao lưu thử nghiệm ngay lập tức cho một VM (ví dụ: VMID 101) trực tiếp tới đích PBS mới:
vzdump 101 --storage PBS-Remote --mode snapshot
Lần chạy đầu tiên sẽ đọc toàn bộ ổ đĩa của máy ảo khách và truyền các chunk 4 MB duy nhất tới PBS. Bây giờ, hãy chạy lại chính xác lệnh đó một phút sau.
Nhờ QEMU dirty bitmap nhận biết được không có khối nào bị thay đổi, PVE sẽ bỏ qua hoàn toàn các sector đĩa không đổi. Lần chạy thứ hai sẽ hoàn thành trong vòng chưa đầy 5 giây, chỉ truyền vài kilobyte metadata. Trong môi trường production có từ 20–50 VM, tỷ lệ chống trùng lặp thường đạt mức từ 8x đến 25x.
Bước 6: Cấu hình lưu trữ (Retention), Garbage Collection và Verification
Giữ cho datastore của bạn luôn ổn định bằng cách cấu hình các tác vụ bảo trì tự động trong mục Datastore > Prune & GC Jobs:
- Lịch Prune: Cấu hình các quy tắc giữ lại bản sao lưu như
keep-daily=7,keep-weekly=4, vàkeep-monthly=6. - Garbage Collection (GC): Lên lịch GC chạy mỗi tuần một lần (ví dụ: Chủ nhật lúc 03:00). Việc Prune chỉ đánh dấu các snapshot không còn tham chiếu để xóa, trong khi GC mới thực sự xóa các chunk không còn liên kết khỏi đĩa.
- Verify Jobs: Chạy xác minh hàng tuần trên các chunk đã lưu để phát hiện bất kỳ lỗi hỏng dữ liệu nào ở cấp lưu trữ trước khi sự cố xảy ra buộc bạn phải phục hồi.
Nền tảng vững chắc hơn cho quá trình khắc phục thảm họa
Chuyển sang Proxmox Backup Server giúp loại bỏ hoàn toàn các khung thời gian sao lưu kéo dài và sự lãng phí dung lượng lưu trữ khổng lồ. Mức sử dụng mạng giảm đáng kể, khả năng chống trùng lặp dữ liệu giữa các VM giúp giảm dung lượng ổ đĩa hơn 80%, và mã hóa phía client đảm bảo an toàn cho dữ liệu lưu trữ offsite. Hãy thiết lập các chính sách lưu giữ và tác vụ kiểm tra hàng tuần, quy trình sao lưu của bạn sẽ vận hành bền bỉ và đáng tin cậy.

