Cơn ác mộng lúc 2 giờ sáng: Khi dữ liệu biến mất
Đó là lúc 2 giờ sáng thứ Ba, tôi đang thực hiện dọn dẹp định kỳ trên một máy chủ staging. Chỉ cần một lệnh fdisk sai chỗ và một thao tác w (ghi) vội vàng, bảng phân vùng của ổ dữ liệu 2TB đã biến mất. Con trỏ chuột vẫn nhấp nháy đều đặn, không hề hay biết rằng tôi vừa xóa sạch công sức làm việc chưa đồng bộ của cả tháng trời. Đây không phải là một bài thực hành trong phòng thí nghiệm; đó là một sai lầm nghiêm trọng trên một hệ thống gần giống môi trường thực tế (production-adjacent).
Việc quản lý hơn một chục máy chủ Linux VPS trong ba năm thường mang lại sự tự tin, nhưng sự mệt mỏi là một biến số nguy hiểm. Nếu bạn vừa thực hiện lệnh rm -rf trên nhầm điểm gắn kết (mount point) hoặc chứng kiến một phân vùng biến mất, hãy tạm rời khỏi bàn phím một lát. Dữ liệu của bạn có khả năng vẫn tồn tại trên các cung (sector) vật lý của ổ đĩa. Chúng ta chỉ cần tái cấu trúc lại “bản đồ” để tìm thấy nó.
Nguyên nhân gốc rễ: Điều gì xảy ra khi xóa dữ liệu?
Khi bạn xóa một phân vùng bằng fdisk hoặc parted, hệ điều hành không xóa các tệp của bạn ngay lập tức. Nó chỉ đơn giản là phá hủy “Mục lục”. Trên đĩa GPT hoặc MBR, bảng phân vùng sẽ cho nhân (kernel) biết chính xác nơi hệ thống tệp bắt đầu và kết thúc. Không có bảng này, kernel sẽ coi toàn bộ đĩa là không gian chưa được phân bổ.
Việc xóa tệp cũng tuân theo logic tương tự. Trong hệ thống tệp Ext4, inode (siêu dữ liệu) được đánh dấu là có sẵn, nhưng các khối dữ liệu thô vẫn nằm yên đó cho đến khi dữ liệu mới ghi đè lên chúng. Điều này khiến quy tắc khôi phục đầu tiên trở thành tuyệt đối: Ngừng ghi vào ổ đĩa ngay lập tức. Ngay cả những hành động nhỏ như nhật ký hệ thống (logs) hoặc tệp tạm thời cũng có thể ghi đè lên dữ liệu đã mất, khiến việc khôi phục trở nên bất khả thi. Trên các ổ SSD hiện đại, lệnh TRIM cũng có thể cố gắng “làm sạch” các khối này, vì vậy mỗi phút đều đáng giá.
Lựa chọn công cụ phù hợp
Hai tiện ích mã nguồn mở là tiêu chuẩn vàng cho những trường hợp khẩn cấp này:
- TestDisk: Đây là lớp phòng thủ đầu tiên của bạn. Nó chuyên về sửa chữa bảng phân vùng. Nếu thành công, ổ đĩa của bạn sẽ xuất hiện lại chính xác như trước, với đầy đủ tên tệp và cấu trúc thư mục.
- PhotoRec: Sử dụng công cụ này nếu hệ thống tệp bị hư hỏng quá nặng khiến TestDisk không thể xử lý. Nó sử dụng kỹ thuật “file carving”, quét các sector thô để tìm các tiêu đề (header) cụ thể (như
0xFFD8cho ảnh JPEG). Lưu ý rằng PhotoRec thường làm mất tên tệp, để lại cho bạn một núi dữ liệu khổng lồ cần phải phân loại thủ công.
Trong cuộc khủng hoảng lúc 2 giờ sáng đó, tôi đã đặt mục tiêu khôi phục phân vùng trước. Tôi chỉ dự định sử dụng PhotoRec như nỗ lực cuối cùng để cứu các tệp riêng lẻ.
Bước 1: Chuẩn bị môi trường
Nếu bạn mất dữ liệu trên ổ đĩa hệ điều hành chính, hãy tắt máy ngay lập tức và khởi động từ một Live USB như SystemRescue hoặc một bản cài đặt Ubuntu tiêu chuẩn. Nếu vấn đề nằm ở ổ dữ liệu phụ, hãy ngắt kết nối (unmount) nó để ngăn các tiến trình chạy nền ghi vào đó.
# Xác định tên ổ đĩa
lsblk
# Ngắt kết nối phân vùng bị ảnh hưởng nếu nó vẫn còn hiển thị một phần
sudo umount /dev/sdb1
Cài đặt bộ công cụ khôi phục. Trên Debian, Ubuntu hoặc Pop!_OS, tất cả nằm trong một gói duy nhất:
sudo apt update
sudo apt install testdisk
Bước 2: Khôi phục bảng phân vùng bằng TestDisk
Khởi chạy tiện ích với quyền root:
sudo testdisk
Giao diện sử dụng menu dạng văn bản Ncurses cổ điển. Hãy làm theo quy trình sau:
- Log: Chọn
[ Create ]để lưu lại nhật ký của phiên làm việc. - Select Disk: Chọn ổ đĩa vật lý (ví dụ:
/dev/sdb) và chọn[ Proceed ]. - Partition Table Type: TestDisk thường tự động phát hiện
[ EFI GPT ]hoặc[ Intel ]. Hãy tin vào gợi ý của nó. - Analyze: Chọn
[ Analyse ]và sau đó là[ Quick Search ].
TestDisk sẽ quét các cylinder của đĩa. Nếu tìm thấy phân vùng bị thiếu, nó sẽ làm nổi bật bằng màu xanh lá cây. Nhấn P để xem qua các tệp. Nhìn thấy cấu trúc thư mục quen thuộc là khoảnh khắc bạn có thể bắt đầu thở phào nhẹ nhõm. Nếu Quick Search không tìm thấy gì, tùy chọn [ Deeper Search ] sẽ quét mọi sector, quá trình này có thể mất từ 4 đến 8 giờ cho một ổ đĩa 2TB.
Sau khi đã xác định đúng phân vùng, hãy đặt trạng thái của nó thành P (Primary) và nhấn Enter. Chọn [ Write ] để thực hiện thay đổi lên đĩa. Sau khi khởi động lại, kernel sẽ nhận diện lại phân vùng đó.
Bước 3: Khôi phục tệp thô bằng PhotoRec
Nếu TestDisk thất bại vì siêu dữ liệu của hệ thống tệp đã bị phá hủy, PhotoRec là bước tiếp theo của bạn. Nó bỏ qua hoàn toàn bảng phân vùng và tìm kiếm “chữ ký” của hơn 480 loại tệp.
sudo photorec
- Chọn ổ đĩa và không gian chưa được phân bổ (unallocated space).
- Chọn loại hệ thống tệp (Ext2/Ext3/Ext4 là tiêu chuẩn cho Linux).
- Destination: Điều này rất quan trọng. Không bao giờ lưu các tệp đã khôi phục vào cùng một ổ đĩa bạn đang quét. Bạn sẽ ghi đè lên chính dữ liệu mà bạn đang cố gắng cứu. Hãy sử dụng ổ USB ngoài hoặc bộ nhớ mạng.
PhotoRec là một công cụ thô sơ. Nó sẽ tạo ra các thư mục có tên recup_dir.1, recup_dir.2, v.v., chứa hàng nghìn tệp với những cái tên như f123456.png.
Xử lý kết quả sau khôi phục
Sàng lọc 50.000 tệp đã bị đổi tên là một cơn ác mộng. Bạn có thể sử dụng các tập lệnh Bash cơ bản để tìm những gì bạn thực sự cần. Ví dụ, để tìm tất cả các tệp PDF đã khôi phục có kích thước lớn hơn 5MB:
find /media/recovery_drive -name "*.pdf" -size +5M
Nếu bạn đang tìm kiếm mã nguồn hoặc văn bản cụ thể trong hàng nghìn tệp đó, grep là người bạn tốt nhất:
grep -r "database_connection_string" /media/recovery_drive
Bài học cho tương lai
Khôi phục dữ liệu rất căng thẳng và hiếm khi thành công 100%. Sau sự cố của mình, tôi đã điều chỉnh quy trình làm việc để bao gồm ba biện pháp bảo vệ cụ thể:
1. Thiết lập Alias bắt buộc
Tôi đã thêm các thông báo xác nhận vào tệp .bashrc của mình. Mặc dù một số người theo chủ nghĩa thuần túy cho rằng điều này tạo ra thói quen xấu, nhưng nó cung cấp một giây quan trọng để kịp nhận ra lỗi đánh máy.
alias rm='rm -i'
alias mv='mv -i'
alias cp='cp -i'
2. Ảnh chụp nhanh (Snapshot) LVM
Sử dụng Quản lý khối logic (LVM) cho phép bạn chụp ảnh nhanh trước khi thực hiện các thao tác đĩa rủi ro. Nếu bạn làm hỏng phân vùng, bạn có thể hoàn tác về trạng thái snapshot trong vài giây mà không cần công cụ khôi phục.
3. Chiến lược sao lưu 3-2-1
Không có phần mềm nào thay thế được việc sao lưu đúng cách. Hãy giữ ba bản sao dữ liệu của bạn, trên hai loại phương tiện khác nhau, với một bản sao được lưu trữ bên ngoài (off-site). Các công cụ như Restic hoặc BorgBackup giúp việc này được tự động hóa và mã hóa cho các máy chủ Linux.
Lời kết
Khôi phục dữ liệu rất căng thẳng và hiếm khi thành công 100%. TestDisk và PhotoRec là những công cụ đáng tin cậy đã cứu vô số quản trị viên hệ thống khỏi thảm họa. Chúng đã cứu sự nghiệp của tôi đêm đó, và chúng cũng có thể cứu dữ liệu của bạn. Hãy giữ những công cụ này trong bộ kỹ năng của bạn, nhưng hãy tập trung vào việc xây dựng chiến lược sao lưu để bạn không bao giờ phải sử dụng chúng vào lúc 2 giờ sáng một lần nữa.

