Tuyệt kỹ cứu dữ liệu ổ cứng Bad Sector bằng GNU ddrescue trên Linux

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Khi thông báo “Input/Output Error” xuất hiện

Nếu bạn làm kỹ thuật, sớm muộn gì bạn cũng sẽ gặp cảnh này: Cắm ổ cứng vào máy và nhận về dòng chữ Input/output error khô khốc. Lúc này, mọi nỗ lực copy thủ công bằng lệnh cp hay kéo thả chuột đều vô ích. Càng cố đọc, đầu từ càng quét mạnh vào vùng hư hại, khiến ổ cứng từ “hơi hỏng” chuyển sang “hỏng hẳn” chỉ trong vài phút.

Tôi từng mất 6 tiếng đồng hồ chỉ để cứu 20GB dữ liệu từ một server cũ vì dùng sai công cụ. Sai lầm lớn nhất là dùng lệnh dd thông thường. Máy treo liên tục, còn dữ liệu thì vẫn nằm im trong vùng lỗi. Sau lần đó, tôi nhận ra GNU ddrescue mới là công cụ sinh ra để xử lý những ca khó này.

Tại sao các lệnh copy thông thường luôn thất bại?

Hệ điều hành thường cố gắng đọc đi đọc lại vùng lỗi nhiều lần trước khi bỏ cuộc. Điều này gây ra hiện tượng nghẽn hệ thống cực kỳ khó chịu.

  • Lệnh cp: Sẽ dừng ngay khi gặp lỗi đầu tiên. Bạn chỉ lấy được vài file lẻ tẻ không đáng kể.
  • Lệnh dd: Dù có flag conv=noerror, nó vẫn đọc tuần tự. Nếu gặp vùng bad sector dài khoảng 1GB, dd có thể mất cả ngày để lết qua. Trong khi đó, đầu từ có thể chết hoàn toàn trước khi kịp chạm tới vùng dữ liệu sạch phía sau.

So sánh dd và ddrescue: Sự khác biệt nằm ở thuật toán

Bảng dưới đây tóm tắt lý do tại sao dân chuyên nghiệp luôn chọn ddrescue:

Tính năng Lệnh dd truyền thống GNU ddrescue
Chiến lược đọc Tuần tự từ đầu đến cuối Đọc vùng tốt trước, xử lý lỗi sau
Mapfile (Log) Không hỗ trợ Lưu tiến trình để chạy tiếp bất cứ lúc nào
Xử lý lỗi Ghi đè rác hoặc dừng máy Bỏ qua thông minh để bảo vệ đầu từ
Tốc độ Rất chậm khi gặp bad sector Tối ưu hóa cực tốt cho ổ cứng lỗi

Quy trình cứu dữ liệu 3 giai đoạn an toàn

Nguyên tắc cốt lõi: Đừng bao giờ thao tác trực tiếp trên ổ cứng lỗi. Bạn hãy dùng ddrescue để tạo một bản sao (image) sang ổ cứng khỏe mạnh. Sau đó, chúng ta mới trích xuất dữ liệu từ file image đó.

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

Bạn cần cài package gddrescue. Lưu ý tên package có thêm chữ ‘g’ ở đầu để tránh nhầm lẫn với một công cụ trùng tên khác.

# Ubuntu/Debian
sudo apt update && sudo apt install gddrescue

# CentOS/RHEL/AlmaLinux
sudo yum install ddrescue

Bước 2: Nhận diện ổ cứng

Kiểm tra tên thiết bị bằng lệnh lsblk. Giả sử ổ lỗi là /dev/sdb và bạn lưu file image tại /mnt/backup. Đừng mount phân vùng của ổ lỗi. Việc này giúp tránh hệ điều hành ghi thêm dữ liệu, làm tình trạng tệ hơn.

Bước 3: Thực thi cứu hộ chuyên sâu

Đây là quy trình tôi thường áp dụng để cứu được hơn 95% dữ liệu trong hầu hết các ca.

Giai đoạn 1: Quét nhanh (Scraping)

Ở lần đầu, chúng ta ra lệnh cho ddrescue chỉ lấy những vùng dữ liệu sạch nhất thật nhanh.

sudo ddrescue -f -n /dev/sdb /mnt/backup/disk_image.img /mnt/backup/recovery.log
  • -n: Không cố thử lại vùng lỗi, giúp hoàn thành sớm giai đoạn đầu.
  • recovery.log: Đây là mapfile. Nếu mất điện giữa chừng, bạn chỉ cần chạy lại lệnh, nó sẽ làm tiếp phần còn dang dở.

Giai đoạn 2: Vét vùng lỗi nhẹ (Retrying)

Khi đã có phần lớn dữ liệu an toàn, giờ là lúc quay lại đối đầu với các sector khó nhằn.

sudo ddrescue -f -d -r1 /dev/sdb /mnt/backup/disk_image.img /mnt/backup/recovery.log
  • -d: Truy cập đĩa trực tiếp (Direct Disc Access), bỏ qua cache của OS để tăng độ chính xác.
  • -r1: Thử lại mỗi vùng lỗi đúng 1 lần. Nếu dữ liệu cực quý, bạn có thể tăng lên -r3.

Giai đoạn 3: Mount và kiểm tra

Khi quá trình hoàn tất, bạn sẽ có file disk_image.img. Thử mount nó để lấy file ra:

sudo mount -o loop,ro /mnt/backup/disk_image.img /mnt/media/recovery_point

Kinh nghiệm thực tế để tránh mất dữ liệu vĩnh viễn

Trong một ca cứu hộ laptop bị rơi, ổ cứng đã bắt đầu có tiếng kêu lạ. Sai lầm của tôi lúc đó là quên dùng mapfile. Khi tiến trình đạt 70%, máy đột ngột sập nguồn do lỏng cáp. Tôi phải chạy lại từ đầu, nhưng đầu từ lúc đó đã quá nóng và hỏng hẳn. Dữ liệu vĩnh viễn không thể lấy lại.

Vì thế, luôn dùng mapfile. Nó không chỉ là bản ghi mà còn là bảo hiểm cho thời gian của bạn. Nếu ổ cứng quá nóng, hãy dùng quạt thổi trực tiếp. Nhiệt độ cao khiến các sector lỗi lan rộng rất nhanh. Đừng bao giờ cho ổ cứng vào ngăn đá tủ lạnh theo các mẹo trên mạng. Hơi nước ngưng tụ sẽ phá hủy mạch điện chỉ trong tích tắc.

Cứu dữ liệu là cuộc chiến của sự kiên nhẫn. Có những ca tôi phải treo máy 48 giờ liên tục để cứu 99.9% dữ liệu từ một ổ cứng nát. Nhưng khi thấy những thư mục ảnh gia đình của khách hiện ra nguyên vẹn, mọi nỗ lực đều xứng đáng.

Share: