TrueNAS — Khôi phục dữ liệu
DOC PATH runbooks/truenas/data-recovery
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.
Điều kiện và lựa chọn recovery
Mục có tiêu đề “Điều kiện và lựa chọn recovery”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.
Điều kiện
Mục có tiêu đề “Điều kiện”- 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.
zpool status tankzfs 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, Clone và Rollback
Mục có tiêu đề “Snapshot, Clone và Rollback”Snapshot
Mục có tiêu đề “Snapshot”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
Mục có tiêu đề “Rollback”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ác động và lựa chọn
Mục có tiêu đề “Tác động và lựa chọn”| 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 |
Khôi phục từng file
Mục có tiêu đề “Khôi phục từng file”Đường dẫn snapshot
Mục có tiêu đề “Đường dẫn snapshot”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.
- Xác nhận snapshot chứa đúng phiên bản, không chỉ đúng tên.
- Copy phiên bản hiện tại của file ra vị trí an toàn nếu còn đọc được.
- Trích bản snapshot sang staging, kiểm tra nội dung và checksum.
- Sau phê duyệt, copy riêng file cần phục hồi về đường dẫn đích.
- 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:
cp /mnt/tank/zfs-lab5/.zfs/snapshot/lab5-base-v1/database.txt /mnt/tank/zfs-lab5/database.txtcp /mnt/tank/zfs-lab5/.zfs/snapshot/lab5-base-v1/important.txt /mnt/tank/zfs-lab5/important.txtKhô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.
SMB Previous Versions
Mục có tiêu đề “SMB Previous Versions”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:
smbclient //nas-host/smb-lab4 -U smbuser1Trong 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 để kiểm tra
Mục có tiêu đề “Clone để kiểm tra”Tạo clone kiểm tra
Mục có tiêu đề “Tạo clone kiểm tra”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:
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.
Kiểm tra phụ thuộc
Mục có tiêu đề “Kiểm tra phụ thuộc”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.
Rollback dataset
Mục có tiêu đề “Rollback dataset”- 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.
- Kiểm tra snapshot tốt, snapshot mới hơn, clone/hold và dữ liệu cần giữ.
- Lưu manifest checksum ngoài dataset.
- Chỉ sau khi tất cả safety gate đạt mới thực hiện rollback tới snapshot đã chọn.
- 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:
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.
Khôi phục từ replica
Mục có tiêu đề “Khôi phục từ replica”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.
- Tạm dừng task có thể ghi/cleanup hai phía, ghi lại enabled/auto/schedule trước thay đổi.
- Kiểm tra pool backup, snapshot history và checksum. Không ghi trực tiếp vào bản replica tốt.
- Tạo restore task riêng từ
backup/replication-lab6đến tên mớitank/replication-lab6-restored. - Restore cả dữ liệu và snapshot history cần thiết; kiểm tra job, dataset và nội dung.
- Xác nhận checksum trước khi đổi quyền writable.
- Kiểm tra readonly, mountpoint và các property được nhận.
zpool status backupzfs get readonly,mountpoint,compression,recordsize tank/replication-lab6-restoredzfs list -t snapshot -r tank/replication-lab6-restoredThay đổi property trên restored dataset đã xác nhận:
sudo zfs set readonly=off tank/replication-lab6-restoredThử 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.
Xác minh và hoàn tác
Mục có tiêu đề “Xác minh và hoàn tác”Kiểm tra và phương án hoàn tác
Mục có tiêu đề “Kiểm tra và phương án hoàn tác”| 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.