Vượt xa ‘Copy-Paste’: Xây dựng hệ thống sao lưu HomeLab 3-2-1 “bất khả xâm phạm” với Restic

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Nỗi đau mất dữ liệu HomeLab

Tôi vẫn nhớ như in cảm giác hoảng loạn lúc 2 giờ sáng khi nhận ra sáu tháng công sức cấu hình đã tan thành mây khói. Trong khi đang hí hoáy với một Docker container mới, tôi đã làm sai phần ánh xạ persistent volume và vô tình xóa sạch instance MariaDB chính của mình. Tôi không có bản sao lưu nào cả. Cảm giác hụt hẫng đó—khi nhận ra hàng giờ tinh chỉnh Proxmox và tự động hóa Home Assistant đã biến mất—là một trải nghiệm mà bất kỳ người đam mê công nghệ nào cũng khiếp sợ. Chúng ta thường coi lab của mình như môi trường doanh nghiệp nhưng lại quản lý sao lưu như một việc làm cho có.

Chiến lược sao lưu thủ công là một chiến lược thất bại. Nếu kế hoạch của bạn chỉ đơn giản là nhớ cắm ổ USB mỗi tháng một lần, thì nó đã lỗi thời ngay từ đầu. Ổ cứng thường hỏng mà không có cảnh báo trước, và những rủi ro tại chỗ như lũ lụt hay sốc điện sẽ không nể nang gì ổ cứng nội bộ “thứ hai” của bạn. Bạn cần một hệ thống vô hình, tự động và có tính dự phòng về mặt địa lý.

Tại sao chỉ copy file thủ công là không đủ

Hầu hết người mới bắt đầu đều sử dụng rsync hoặc copy-paste cơ bản. Cách tiếp cận này thất bại trước các bài kiểm tra an toàn vì ba lý do. Đầu tiên là thiếu sự cô lập; nếu nguồn điện làm cháy máy chủ, nó thường kéo theo mọi ổ SATA đang kết nối. Thứ hai, việc copy tiêu chuẩn cực kỳ kém hiệu quả.

Nếu không có tính năng khử trùng lặp (deduplication), bạn sẽ lưu trữ cùng một file OS image 20GB mười lần, gây lãng phí dung lượng lưu trữ đắt đỏ. Cuối cùng là lỗ hổng về quyền riêng tư. Hầu hết các script tự chế không mã hóa dữ liệu khi lưu trữ (at rest). Nếu bạn đẩy những file đó lên cloud công cộng, các private key và tài liệu cá nhân của bạn về cơ bản là đang phơi bày công khai.

Những sysadmin đáng tin cậy luôn xây dựng các pipeline. Bạn cần một quy trình tuân thủ quy tắc 3-2-1 trong khi vẫn giữ chi phí hàng tháng thấp hơn giá một tách cà phê.

Chiến lược 3-2-1: Tấm lưới an toàn của bạn

Trước khi bắt tay vào terminal, hãy cùng định nghĩa khung sườn của chúng ta. Quy tắc 3-2-1 là tiêu chuẩn vàng của ngành để đảm bảo sự tồn tại của dữ liệu:

  • 3 bản sao dữ liệu: Bao gồm dữ liệu thực tế đang chạy cộng với hai bản sao lưu riêng biệt.
  • 2 loại phương tiện lưu trữ khác nhau: Lưu trữ bản sao lưu trên các thiết bị vật lý khác nhau, chẳng hạn như SSD cục bộ và một NAS hoặc ổ cứng ngoài riêng biệt.
  • 1 bản sao lưu Offsite: Ít nhất một bản sao phải nằm ở một vị trí địa lý khác—thường là trên cloud.

Để thực hiện điều này mà không gây đau đầu, tôi dựa vào ResticRclone. Restic đóng vai trò là bộ não; nó xử lý việc khử trùng lặp (thường giúp giảm tập dữ liệu 150GB của tôi xuống còn 90GB) và mã hóa mọi thứ tại chỗ trước khi chúng rời khỏi mạng của bạn. Rclone đóng vai trò là cây cầu nối. Nó cho phép Restic giao tiếp với hầu hết mọi nhà cung cấp, bao gồm cả Backblaze B2, vốn chỉ tính phí cố định 6 USD cho mỗi Terabyte hàng tháng mà không có phí ẩn.

Thực hành: Xây dựng Pipeline

Điều kiện cần thiết

Bạn sẽ cần một máy chủ Linux (Ubuntu hoặc Debian là tốt nhất) và một tài khoản Backblaze B2. Lưu ý rằng B2 cho phép bạn sử dụng 10GB đầu tiên miễn phí—rất hoàn hảo để thử nghiệm. Hãy tạo một “Bucket” trong bảng điều khiển B2 và tạo một Application Key. Lưu Key IDApplication Key vào trình quản lý mật khẩu ngay lập tức.

Bước 1: Cài đặt công cụ

Đừng hài lòng with những phiên bản cũ kỹ. Hãy cài đặt các công cụ trực tiếp từ kho lưu trữ chính thức để nhận được các bản vá bảo mật mới nhất:

sudo apt update && sudo apt install restic rclone -y

Bước 2: Kết nối với Cloud

Rclone cần một cấu hình ‘remote’ để giao tiếp với Backblaze. Hãy bắt đầu cấu hình tương tác:

rclone config

Thực hiện theo các bước menu với các thiết lập sau:

  1. Nhập n để tạo Remote mới.
  2. Đặt tên là b2-remote.
  3. Chọn “backblaze” từ danh sách (thường là tùy chọn số 5).
  4. Nhập Account IDApplication Key của bạn.
  5. Chấp nhận các giá trị mặc định cho các thông báo còn lại và lưu lại.

Kiểm tra kết nối bằng cách liệt kê các bucket của bạn: rclone lsd b2-remote:

Bước 3: Khởi tạo Repository

Restic không chỉ đơn thuần là “đổ” các file vào một chỗ; nó tạo ra một repository có cấu trúc. Đây là nơi phép màu của việc khử trùng lặp diễn ra. Chúng ta sẽ khởi tạo nó trực tiếp trên Backblaze B2.

Cảnh báo: Hãy chọn một mật khẩu mạnh. Nếu bạn mất mật khẩu này, dữ liệu của bạn sẽ không thể khôi phục được, ngay cả bởi Backblaze.

export RESTIC_PASSWORD="mật_khẩu_mạnh_của_bạn"
export RESTIC_REPOSITORY="rclone:b2-remote:tên-bucket-của-bạn/backup"

restic init

Bước 4: Chạy bản sao lưu đầu tiên

Hãy sao lưu một thứ gì đó quan trọng, ví dụ như thư mục /opt/stacks của bạn. Restic hoạt động theo cơ chế tăng cường (incremental); sau lần tải lên đầu tiên này, chỉ những khối dữ liệu cụ thể của các file có thay đổi mới được tải lên trong tương lai.

restic backup /opt/stacks /home/user/documents

Kiểm tra kết quả bằng cách xem các snapshot của bạn: restic snapshots. Bạn sẽ thấy một ID duy nhất cho mỗi thời điểm bạn đã sao lưu.

Bước 5: Thiết lập chế độ tự động

Sao lưu thủ công là một ảo tưởng. Hãy sử dụng một shell script đơn giản tại /usr/local/bin/homelab-backup.sh để chạy hàng đêm khi bạn đang ngủ:

#!/bin/bash
export RESTIC_PASSWORD="mật_khẩu_của_bạn_ở_đây"
export RESTIC_REPOSITORY="rclone:b2-remote:tên-bucket-của-bạn/backup"

# Sao lưu các đường dẫn quan trọng
restic backup /opt/stacks /etc/letsencrypt --tag "automated"

# 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. Xóa các bản còn lại.
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

# Kiểm tra tính toàn vẹn của dữ liệu
restic check

Cấp quyền thực thi bằng lệnh chmod +x và thêm nó vào crontab của bạn (0 2 * * *) để chạy vào lúc 2 giờ sáng mỗi ngày.

Sức mạnh của ‘Forget’ và ‘Prune’

Trong những ngày đầu, tôi đã mắc sai lầm khi giữ lại mọi snapshot mãi mãi. Mặc dù B2 rẻ, nhưng việc lưu trữ snapshot hàng ngày của một cơ sở dữ liệu trong ba năm sẽ tốn kém đáng kể. Lệnh restic forget giúp quản lý chính sách lưu giữ của bạn một cách tự động. Flag --prune là “vũ khí hạng nặng”; nó sẽ thực sự kết nối tới cloud và xóa các khối dữ liệu không còn được tham chiếu, giúp giữ cho chi phí lưu trữ của bạn ở mức tối thiểu.

Lời kết

Ba mươi phút thiết lập sẽ đổi lại cho bạn sự an tâm trọn đời. Hiện tại, tôi đang bảo vệ khoảng 150GB dữ liệu HomeLab đã được khử trùng lặp với mức phí khoảng 0,90 USD mỗi tháng. Khi ổ SSD tiếp theo của tôi chắc chắn sẽ đạt giới hạn ghi, tôi sẽ không phải toát mồ hôi hay lùng sục các diễn đàn để tìm công cụ khôi phục. Tôi chỉ cần chạy lệnh restic restore. Nếu bạn chưa kiểm tra các bản sao lưu của mình trong tháng này, hãy coi đây là tín hiệu để xây dựng một pipeline thực sự hiệu quả.

Share: