Đến nội dung chính
Infra Notes
DOCS / UTF-8
Runbook // Quy trình vận hànhtruenas

TrueNAS — Khôi phục dữ liệu

DOC PATH runbooks/truenas/data-recovery

Doc Type
Runbook
Technology
truenas
Status
Active
Version
25.10.6
Tags
truenasRestoreBackup

Chọn snapshot, clone, rollback hoặc replica restore và kiểm tra trước cutover. Đọc theo thứ tự các chương hoặc chọn mục cần tra cứu trong mục lục.

Khôi phục dữ liệu TrueNAS ở phạm vi nhỏ nhất phù hợp: một file, clone để kiểm tra, toàn dataset hoặc từ replica. Quy trình không yêu cầu gây mất dữ liệu trước khi restore.

  • Xác định dataset/file, thời điểm tốt cần phục hồi và dữ liệu mới phải giữ.
  • Dừng hoặc phối hợp workload ghi để tránh thay đổi trong khi kiểm tra/copy/cutover.
  • Có backup độc lập, đủ dung lượng và quyền thay đổi; snapshot phải chứa đúng dữ liệu cần phục hồi.
  • Ghi nhận ACL, ownership, properties, share/export và mountpoint.
  • Checksum baseline lưu ngoài dataset bị ảnh hưởng; có bản sao ngoài host khi cần chống mất host.
  • Kiểm tra pool health, snapshot và clone dependency trước thao tác.
Terminal window
zpool status tank
zfs list -t snapshot -o name,creation,used,refer -r <dataset>
zfs get clones <dataset@snapshot>

Các placeholder phải thay bằng inventory đã xác nhận. Lệnh chỉ đọc có thể tiết lộ đường dẫn nội bộ; không công khai nguyên output.

Snapshot lưu trạng thái nhất quán của dataset/ZVOL tại thời điểm tạo. Nhờ Copy-on-Write, snapshot ban đầu gần như không sao chép dữ liệu; nó giữ lại các block cũ khi dữ liệu live thay đổi. Dung lượng snapshot tăng theo mức độ dữ liệu cũ mà nó phải giữ.

Clone là dataset writable được tạo từ snapshot. Ban đầu clone chia sẻ block với snapshot nguồn, sau đó dữ liệu tách dần khi có thay đổi. Clone thường dùng cho kiểm thử, forensic, staging hoặc phục hồi có kiểm soát.

Rollback đưa dataset trở về trạng thái snapshot. Thao tác này có thể loại bỏ các thay đổi sau thời điểm snapshot. Trước rollback production cần hiểu dependency, snapshot mới hơn và phạm vi dữ liệu bị mất.

Cơ chế Tốt cho Không thay thế
Snapshot Xóa nhầm, Previous Versions, recovery nhanh Backup độc lập.
Clone Test/khôi phục tạm thời không phá source Replica/DR.
Rollback Đưa toàn dataset về thời điểm trước Selective file restore khi chỉ mất 1 file.
Replication Sao chép snapshot sang hệ thống/pool khác Redundancy tức thời của pool.
Tình huống Cách chọn Tác động
Mất/sửa nhầm một file, dữ liệu khác vẫn mới Selective restore Chỉ thay file đã chọn
Chưa chắc snapshot nào tốt Clone để kiểm tra Tăng dung lượng khi ghi, tạo dependency
Cả dataset cần quay về một snapshot Rollback sau phê duyệt Mất mọi thay đổi sau snapshot
Nhiều file lỗi nhưng còn dữ liệu mới hợp lệ Clone + selective merge Cần kế hoạch hợp nhất riêng
Source dataset hoặc pool không còn dùng được Restore từ replica Cần đích restore mới, cutover và kiểm tra lại

Trên TrueNAS, snapdir=hidden không đồng nghĩa snapshot không tồn tại. Đối chiếu snapshot bằng zfs list, rồi kiểm tra file tại đường dẫn .zfs/snapshot.

  1. Xác nhận snapshot chứa đúng phiên bản, không chỉ đúng tên.
  2. Copy phiên bản hiện tại của file ra vị trí an toàn nếu còn đọc được.
  3. Trích bản snapshot sang staging, kiểm tra nội dung và checksum.
  4. Sau phê duyệt, copy riêng file cần phục hồi về đường dẫn đích.
  5. Kiểm tra ownership/ACL và I/O qua protocol thực tế; xác nhận file không liên quan vẫn nguyên vẹn.

Ví dụ trên dataset thử nghiệm riêng, hai lệnh copy ghi đè file đích nếu tồn tại:

Terminal window
cp /mnt/tank/zfs-lab5/.zfs/snapshot/lab5-base-v1/database.txt /mnt/tank/zfs-lab5/database.txt
cp /mnt/tank/zfs-lab5/.zfs/snapshot/lab5-base-v1/important.txt /mnt/tank/zfs-lab5/important.txt

Không dùng ví dụ này trên dataset thật trước khi hoàn tất staging/backup và kiểm tra đúng tên.

Selective restore chỉ tác động đến file đã chọn. Những file mới hoặc thay đổi hợp lệ khác phải được giữ nguyên; đối chiếu checksum trước và sau thao tác để phát hiện ghi đè ngoài ý muốn.

Với dataset SMB có snapshot và cấu hình shadow_copy_zfs, Samba cung cấp các phiên bản cũ qua đường dẫn @GMT. Chọn snapshot theo thời điểm cần khôi phục.

Trên Linux client:

Terminal window
smbclient //nas-host/smb-lab4 -U smbuser1

Trong phiên smbclient, dùng identifier UTC thực tế của snapshot:

cd @GMT-<YYYY.MM.DD-HH.MM.SS>
get shadowcopy-test.txt /tmp/shadow-restore.txt

Đường dẫn staging phải chưa chứa dữ liệu cần giữ. Identifier @GMT dựa trên thời gian snapshot, không thay bằng tên lab4-v1.

Giữ bản sao hiện tại trước khi thay file bằng phiên bản cũ; không rollback toàn dataset chỉ để lấy lại một file. Nếu smbinfo trả Errno 25, kiểm tra snapshot phía server rồi thử truy cập bằng smbclient @GMT.

Clone tạo dataset writable từ snapshot, không sửa dataset hiện tại hoặc snapshot gốc. Dùng khi cần kiểm tra phiên bản tốt hoặc merge dữ liệu có chọn lọc.

Sau khi xác nhận tên clone mới chưa tồn tại, dung lượng và snapshot:

Terminal window
sudo zfs clone <dataset@snapshot> <pool/recovery-clone>
zfs get origin,mountpoint,readonly <pool/recovery-clone>

Lệnh tạo dataset mới, phát sinh dependency và có thể mount dataset. Không export clone ra mạng với quyền rộng; nếu cần recovery share tạm, giới hạn user được phép truy cập.

Snapshot và clone dùng chung block chưa thay đổi. Khi ghi đè dữ liệu, CoW giữ block cũ cho snapshot và cấp block mới cho phần thay đổi; vì vậy USED có thể tăng dù số file không tăng. Xem cách đọc dung lượng ZFS để phân biệt dung lượng riêng và dung lượng được tham chiếu.

Terminal window
zfs get clones <dataset@snapshot>
zfs get origin <pool/recovery-clone>

Origin snapshot còn dependent clone không thể được dọn như snapshot độc lập. Không dùng recursive/force cleanup để vượt guardrail. Chỉ dọn clone sau khi xác nhận không còn consumer, dữ liệu cần giữ đã được chuyển và cleanup đã được phê duyệt.

  1. Dừng writers và xác nhận phạm vi dataset; không dùng runbook dành cho file dataset này để suy ra quy trình rollback ZVOL đang phục vụ VM/database.
  2. Kiểm tra snapshot tốt, snapshot mới hơn, clone/hold và dữ liệu cần giữ.
  3. Lưu manifest checksum ngoài dataset.
  4. Chỉ sau khi tất cả safety gate đạt mới thực hiện rollback tới snapshot đã chọn.
  5. Kiểm tra checksum, ACL, nội dung và ứng dụng trước khi cho phép ghi trở lại.

Cú pháp thay đổi dữ liệu, không tự thêm tùy chọn phá dependency khi lệnh bị chặn:

Terminal window
sudo zfs rollback <dataset@snapshot>
sha256sum -c <baseline-outside-dataset.sha256>

Checksum phải được so với đúng phiên bản tại snapshot đã chọn. File tạo sau snapshot không thuộc điểm phục hồi và có thể bị mất; giữ bản sao riêng nếu cần hợp nhất dữ liệu mới.

Dùng khi source mất hoặc không thể sử dụng local snapshot. Khả năng phục hồi phụ thuộc dữ liệu và snapshot còn ở replica, không phụ thuộc việc source có còn truy cập được hay không.

  1. Tạm dừng task có thể ghi/cleanup hai phía, ghi lại enabled/auto/schedule trước thay đổi.
  2. Kiểm tra pool backup, snapshot history và checksum. Không ghi trực tiếp vào bản replica tốt.
  3. Tạo restore task riêng từ backup/replication-lab6 đến tên mới tank/replication-lab6-restored.
  4. Restore cả dữ liệu và snapshot history cần thiết; kiểm tra job, dataset và nội dung.
  5. Xác nhận checksum trước khi đổi quyền writable.
  6. Kiểm tra readonly, mountpoint và các property được nhận.
Terminal window
zpool status backup
zfs get readonly,mountpoint,compression,recordsize tank/replication-lab6-restored
zfs list -t snapshot -r tank/replication-lab6-restored

Thay đổi property trên restored dataset đã xác nhận:

Terminal window
sudo zfs set readonly=off tank/replication-lab6-restored

Thử ghi vào file test mới, kiểm tra ACL và checksum. Chỉ cutover khi tên production không xung đột và writers đã dừng. Nếu rename, phải cập nhật/kiểm tra share, export, mountpoint và task trỏ tới path đó; không ghi đè dataset production còn dữ liệu cần giữ.

Sau cutover, xác nhận source writable, backup readonly, cùng common snapshot và job tiếp tục incremental thay vì full-sync không cần thiết.

Phương án Cần kiểm tra Khi kiểm tra thất bại
Selective restore File đúng phiên bản, file khác không đổi Dừng ghi; dùng bản sao trước restore để đối chiếu/phục hồi
Clone Origin đúng, isolated, dữ liệu đọc được Giữ dataset hiện tại nguyên trạng; không cutover
Dataset rollback Checksum/application đạt Không có “undo” tự động; cần bản backup trước rollback
Replica restore Checksum, history, properties và client I/O đúng Chưa cutover; giữ nguyên replica, kiểm tra lại đích

Không mở lại ứng dụng ghi chỉ vì job hiển thị SUCCESS; kiểm tra dữ liệu, quyền và đường truy cập trước khi chuyển workload.