ddrescue là lệnh chuyên dụng được sử dụng để lấy lại dữ liệu, dùng để sao chép dữ liệu từ ổ đĩa, phân vùng hoặc thiết bị lưu trữ đang bị lỗi sang một thiết bị khác theo cách an toàn và tối ưu nhất có thể. Trong bài viết này, mình sẽ được hướng dẫn chi tiết cách cài đặt và sử dụng ddrescue để cứu dữ liệu một cách an toàn và chuyên nghiệp.
Những điểm chính
- Định nghĩa ddrescue Linux: Hiểu rõ
ddrescuelà công cụ chuyên dùng để cứu dữ liệu từ các thiết bị lưu trữ bị lỗi, hoạt động an toàn và tối ưu hơn lệnhdd. - Các tính năng chính: Nắm được các tính năng vượt trội như tự động bỏ qua lỗi, sử dụng mapfile để tiếp tục, thuật toán quét đa tầng và khả năng hợp nhất bản sao.
- Cách cài đặt: Biết cách cài đặt
ddrescuenhanh chóng trên các bản phân phối Linux phổ biến và lưu ý về tên gói (gddrescue). - Các ví dụ sử dụng thực tế: Thành thạo quy trình cứu dữ liệu qua 2 bước: sao lưu nhanh dữ liệu tốt trước, sau đó đọc lại vùng bị lỗi.
- Hướng dẫn khôi phục dữ liệu: Học được cách mount file ảnh đĩa (
.img) đã cứu để truy cập và sao chép lại các file quan trọng. - Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các vấn đề thực tế như sự khác biệt giữa
ddvàddrescue, khi nào nên dùng các tùy chọn-n,-r,-dvà khả năng hợp nhất từ nhiều nguồn.
ddrescue Linux là gì?
Lệnh ddrescue trong Linux là công cụ chuyên dùng để khôi phục dữ liệu, cho phép sao chép dữ liệu từ ổ đĩa, phân vùng hoặc thiết bị lưu trữ đang lỗi sang một thiết bị khác một cách an toàn và tối ưu nhất có thể. Lệnh này sẽ tự động bỏ qua các vùng đọc lỗi, ưu tiên chép hết phần dữ liệu còn tốt và dùng file nhật ký để có thể tiếp tục thử đọc lại các vùng hỏng nhiều lần ở các lần chạy sau, nhờ đó giảm tối đa khả năng mất dữ liệu.

Cú pháp của lệnh ddrescue trong Linux như sau:
ddrescue [options] infile outfile [mapfile]Trong đó:
- infile: Là thiết bị nguồn bị lỗi.
- outfile: Là nơi lưu dữ liệu.
- mapfile: File ghi nhật ký tiến trình.

Các tính năng chính của ddrescue Linux
Các tính năng nổi bật của ddrescue đó là:
- Tự động bỏ qua lỗi: ddrescue sẽ tự động nhảy qua các bad sector để tránh làm treo hệ thống, đồng thời ưu tiên sao chép vùng dữ liệu tốt trước.
- Cơ chế Mapfile: Lệnh này sẽ ghi lại trạng thái của từng sector vào một file log, cho phép người dùng tạm dừng và tiếp tục quá trình cứu dữ liệu bất cứ lúc nào mà không cần chạy lại từ đầu.
- Thuật toán quét đa tầng: Lệnh sẽ sao chép nhanh dữ liệu tốt trước, sau đó quay lại đọc kỹ dữ liệu lỗi sau và thử lại nhiều lần để khôi phục dữ liệu tối đa.
- Đọc ngược hướng: ddrescue hỗ trợ tính năng đọc dữ liệu từ cuối ổ đĩa ngược về đầu, rất hữu ích trong trường hợp đầu đọc của ổ cứng gặp khó khăn ở các sector đầu tiên.
- Hợp nhất bản sao: ddrescue cho phép kết hợp dữ liệu từ nhiều lần đọc khác nhau vào một file ảnh duy nhất để lấp đầy các khoảng trống dữ liệu bị thiếu.
- Hoạt động tự động: Công cụ chạy hoàn toàn tự động trên dòng lệnh, không yêu cầu sự can thiệp hay giám sát liên tục của người dùng khi gặp lỗi đọc/ghi.

Cách cài đặt ddrescue chi tiết
Trên hầu hết các bản phân phối Linux, bạn có thể cài đặt nhanh chóng với các lệnh tương ứng như sau:
Trên Ubuntu/Debian:
sudo apt install gddrescueTrên Arch/Manjaro:
sudo pacman -S gnu-ddrescueFedora/RHEL:
sudo dnf install ddrescueLưu ý

Các ví dụ sử dụng lệnh ddrescue thực tế
Giả sử bạn có một chiếc USB chứa dữ liệu quan trọng nhưng bị lỗi và không thể copy file, khi đó bạn hãy thực hiện khôi phục lại dữ liệu với 2 bước sau:
Bước 1: Sao lưu nhanh dữ liệu tốt
Trước hết, bạn hãy chạy ddrescue để sao lưu toàn bộ vùng không bị lỗi sang một file .img:
sudo ddrescue -f -n /dev/sda13 /mnt/usb.img /mnt/usb.logGiải thích câu lệnh:
- -f: Cho phép ghi đè file image.
- -n: Chỉ đọc vùng sạch, bỏ qua lỗi.
- /dev/sdb: Thiết bị nguồn (USB).
- /mnt/backup/usb.img: File ảnh đích để lưu dữ liệu.
- /mnt/backup/usb.log: File ghi nhật ký (mapfile) quá trình cứu dữ liệu.

Lưu ý: File .log có vai trò quan trọng, giúp bạn tiếp tục khôi phục sau này mà không cần làm lại từ đầu.
Bước 2: Đọc lại vùng bị lỗi
Sau khi đã lưu xong phần dữ liệu tốt, bạn thực hiện lệnh sau để đọc các sector đã bị bỏ qua ở bước trước.
sudo ddrescue -d -r3 /dev/sdb /mnt/usb.img /mnt/usb.logGiải thích câu lệnh:
- -d: Đọc thiết bị trực tiếp và bỏ qua cache
- -r3: thử lại 3 lần các sector lỗi

Lưu ý: Bạn sử dụng lại chính xác file usb.log ở bước 1. Ddrescue sẽ đọc file này, biết được chỗ nào chưa đọc được và chỉ tập trung xử lý đúng những chỗ đó, không đọc lại từ đầu.
Hướng dẫn khôi phục dữ liệu từ file Image
Sau khi lấy lại dữ liệu, bạn sẽ có một file usb.img. Đây là bản sao hoàn chỉnh nhất của chiếc USB lỗi. Để lấy dữ liệu ra, bạn không cần giải nén mà hãy mount như một ổ đĩa ảo:
Bước 1: Bạn tạo thư mục để mount:
sudo mkdir /mnt/imageBước 2: Tiếp theo, bạn mount file ảnh đĩa:
sudo mount -o loop,ro /mnt/backup/usb.img /mnt/imageTham số ro có nghĩa là Read-Only, giúp bảo vệ file image không bị ghi đè nhầm.
Câu hỏi thường gặp
Khác biệt chính giữa dd và ddrescue là gì?
– dd thường được dùng để sao chép block dữ liệu và sẽ dừng hoặc chậm lại rất nhiều khi gặp sector lỗi. Trong khi đó, ddrescue được thiết kế riêng cho việc lấy lại dữ liệu, lệnh sẽ tự động bỏ qua bad sector, ghi log chi tiết vào mapfile và đọc lại nhiều lần vùng lỗi ở các lần chạy sau. Ngoài ra, ddrescue ưu tiên sao chép nhanh toàn bộ vùng còn tốt trước, giúp bạn lấy được nhiều dữ liệu nhất có thể trước khi ổ đĩa bị lỗi hoàn toàn
Khi nào nên dùng tham số -n, -r và -d?
-n phù hợp cho pass đầu tiên, khi bạn chỉ muốn sao chép thật nhanh toàn bộ vùng đọc tốt và bỏ qua vùng lỗi để giảm áp lực lên ổ đĩa đang sắp chết.
-r dùng cho các pass sau, cho phép thử lại vùng lỗi một số lần có giới hạn (ví dụ -r3) để tìm thêm dữ liệu mà không phải đọc lại thiết bị quá mức.
-d bật chế độ đọc trực tiếp từ thiết bị, bỏ qua cache kernel; phù hợp khi thiết bị có hành vi bất thường, nhưng nên dùng cẩn trọng vì có thể khiến lỗi I/O lộ rõ hơn.
Có thể kết hợp nhiều nguồn khác nhau để khôi phục một image hoàn chỉnh không?
Câu trả lời là có, ddrescue hỗ trợ tự động hợp nhất backup. Nếu bạn có nhiều bản đĩa/đĩa quang/bản clone cùng nội dung nhưng hỏng ở các vị trí khác nhau, bạn có thể chạy ddrescue tuần tự trên từng bản với cùng một file output và cùng mapfile. Khi đó, mỗi lần chạy mới chỉ đọc những block còn thiếu hoặc hỏng trong image đích, nhờ vậy tăng cơ hội thu được một bản image hoàn chỉnh dù không có nguồn nào còn nguyên 100%.
GNU ddrescue là công cụ dòng lệnh chuyên dụng cho việc cứu dữ liệu, cho phép bạn sao chép tối đa phần dữ liệu còn đọc được từ ổ đĩa, phân vùng hoặc USB đang gặp lỗi sang một thiết bị khác một cách an toàn và có kiểm soát. Nhờ cơ chế mapfile, thuật toán quét nhiều pha và khả năng tự động bỏ qua rồi thử đọc lại các bad sector, ddrescue giúp bạn tạo ra một bản image an toàn để thao tác, qua đó gia tăng đáng kể khả năng khôi phục dữ liệu trong khi vẫn giảm thiểu rủi ro làm thiết bị gốc hư hỏng nặng thêm.




