How to rescue copies → ddrescue /dev/sdX /path.img /path.map
How to Rescue Copies → ddrescue /dev/sdX /path.img /path.map
Table of Contents
1. [Introduction](#introduction)
2. [Prerequisites and Requirements](#prerequisites-and-requirements)
3. [Understanding ddrescue](#understanding-ddrescue)
4. [Basic Syntax and Parameters](#basic-syntax-and-parameters)
5. [Step-by-Step Recovery Process](#step-by-step-recovery-process)
6. [Practical Examples and Use Cases](#practical-examples-and-use-cases)
7. [Advanced Options and Techniques](#advanced-options-and-techniques)
8. [Common Issues and Troubleshooting](#common-issues-and-troubleshooting)
9. [Best Practices and Professional Tips](#best-practices-and-professional-tips)
10. [Recovery Strategies for Different Scenarios](#recovery-strategies-for-different-scenarios)
11. [Monitoring and Progress Tracking](#monitoring-and-progress-tracking)
12. [Post-Recovery Data Analysis](#post-recovery-data-analysis)
13. [Conclusion](#conclusion)
Introduction
Data recovery from failing or damaged storage devices is a critical skill for system administrators, IT professionals, and anyone dealing with valuable digital information. When traditional copy methods fail due to bad sectors, hardware malfunctions, or filesystem corruption, ddrescue emerges as one of the most powerful and reliable tools for data recovery operations.
This comprehensive guide will teach you how to effectively use ddrescue to create bit-for-bit copies of damaged storage devices, focusing on the fundamental command structure: `ddrescue /dev/sdX /path.img /path.map`. You'll learn not only the technical aspects of the tool but also professional recovery strategies, troubleshooting techniques, and best practices that can mean the difference between successful data recovery and permanent data loss.
Unlike simple copying tools, ddrescue is specifically designed to handle problematic storage media by implementing intelligent retry mechanisms, error mapping, and resumable operations. This makes it invaluable for recovering data from failing hard drives, corrupted USB drives, damaged optical media, and other storage devices experiencing hardware or logical failures.
Prerequisites and Requirements
System Requirements
Before beginning any data recovery operation with ddrescue, ensure your system meets the following requirements:
Hardware Requirements:
- Sufficient RAM (minimum 1GB, recommended 4GB or more for large drives)
- Available storage space at least equal to the source device capacity
- Stable power supply (UPS recommended for critical operations)
- Reliable storage destination (preferably different physical drive)
Software Requirements:
- Linux-based operating system (Ubuntu, CentOS, Debian, etc.)
- ddrescue package installed
- Root or sudo privileges
- Basic command-line knowledge
Installing ddrescue
On Ubuntu/Debian systems:
```bash
sudo apt update
sudo apt install gddrescue
```
On CentOS/RHEL/Fedora systems:
```bash
sudo yum install ddrescue
or for newer versions
sudo dnf install ddrescue
```
Verification of installation:
```bash
ddrescue --version
```
Safety Preparations
Critical Warning: ddrescue operations are irreversible and can cause permanent data loss if used incorrectly. Always verify your command parameters before execution.
1. Create a recovery environment: Use a live Linux distribution to avoid mounting the damaged filesystem
2. Identify devices correctly: Use `lsblk`, `fdisk -l`, or `dmesg` to confirm device names
3. Prepare adequate workspace: Ensure destination storage has sufficient free space
4. Document the situation: Record device details, error symptoms, and recovery goals
Understanding ddrescue
What is ddrescue?
ddrescue (GNU ddrescue) is a data recovery tool designed to copy data from one file or block device to another, with special handling for devices with errors. Unlike the standard `dd` command, ddrescue implements sophisticated algorithms to maximize data recovery from damaged media.
Key Features and Advantages
Intelligent Error Handling:
- Skips over bad sectors initially, returning later with different strategies
- Uses multiple read attempts with varying block sizes
- Implements forward and reverse reading directions
Resume Capability:
- Maintains detailed mapfiles tracking recovery progress
- Allows interruption and resumption of long recovery operations
- Enables multiple recovery passes with different parameters
Flexible Recovery Strategies:
- Supports various retry algorithms
- Configurable timeout and retry parameters
- Multiple pass strategies for maximum data recovery
How ddrescue Works
ddrescue operates in multiple phases:
1. Initial Copy Phase: Quickly copies all readable data, skipping problematic areas
2. Trimming Phase: Attempts to define the exact boundaries of bad areas
3. Scraping Phase: Uses intensive methods to recover data from bad sectors
4. Retrying Phase: Multiple attempts on previously failed areas
Basic Syntax and Parameters
Command Structure
The basic ddrescue command follows this syntax:
```bash
ddrescue [options] input output [mapfile]
```
Essential Parameters:
- `input`: Source device or file (e.g., `/dev/sdb`)
- `output`: Destination file or device (e.g., `/path/to/image.img`)
- `mapfile`: Recovery progress tracking file (e.g., `/path/to/recovery.map`)
Understanding the Mapfile
The mapfile is crucial for ddrescue operations, containing:
- Successfully copied sectors
- Known bad sectors
- Untried sectors
- Sectors pending retry
Mapfile benefits:
- Enables resumable operations
- Tracks recovery progress
- Prevents redundant operations
- Provides recovery statistics
Common Options
Essential Options:
```bash
-v, --verbose # Verbose output
-f, --force # Force overwrite of output file
-n, --no-scrape # Skip scraping phase
-d, --direct # Use direct disk access
-r, --retry-passes=n # Number of retry passes
-c, --cluster-size=n # Cluster size for operations
```
Step-by-Step Recovery Process
Step 1: System Preparation
Boot into Recovery Environment:
```bash
Boot from live Linux USB/DVD
Ensure damaged drive is not mounted
umount /dev/sdX*
```
Identify Target Device:
```bash
List all storage devices
lsblk
Detailed device information
sudo fdisk -l
Check system messages for device errors
dmesg | grep -i error
```
Step 2: Prepare Recovery Workspace
Create destination directory:
```bash
sudo mkdir -p /recovery/workspace
cd /recovery/workspace
```
Check available space:
```bash
df -h /recovery/workspace
```
Verify device identification:
```bash
Confirm source device details
sudo hdparm -I /dev/sdX | head -20
```
Step 3: Initial Recovery Attempt
Basic recovery command:
```bash
sudo ddrescue -v /dev/sdX /recovery/workspace/disk_image.img /recovery/workspace/recovery.map
```
Command breakdown:
- `-v`: Enables verbose output for monitoring progress
- `/dev/sdX`: Source device (replace X with actual device letter)
- `disk_image.img`: Output image file
- `recovery.map`: Mapfile for tracking progress
Step 4: Monitor Recovery Progress
Understanding ddrescue output:
```
rescued: 45.2 GB, errsize: 234 MB, current rate: 12.5 MB/s
ipos: 45.4 GB, errors: 156, average rate: 15.2 MB/s
opos: 45.4 GB, run time: 49m 32s, successful read: 2m 14s ago
```
Key metrics:
- `rescued`: Amount of data successfully copied
- `errsize`: Size of areas with errors
- `errors`: Number of error areas encountered
- `current rate`: Current transfer speed
Step 5: Multi-Pass Recovery Strategy
First pass - Quick copy:
```bash
sudo ddrescue -v -n /dev/sdX /recovery/workspace/disk_image.img /recovery/workspace/recovery.map
```
Second pass - Retry with smaller blocks:
```bash
sudo ddrescue -v -d -r3 -c32 /dev/sdX /recovery/workspace/disk_image.img /recovery/workspace/recovery.map
```
Final pass - Intensive scraping:
```bash
sudo ddrescue -v -d -r5 -c8 /dev/sdX /recovery/workspace/disk_image.img /recovery/workspace/recovery.map
```
Practical Examples and Use Cases
Example 1: Recovering a Failing Hard Drive
Scenario: 500GB hard drive with bad sectors and filesystem corruption
Step-by-step recovery:
```bash
1. Identify the failing drive
lsblk
Output shows /dev/sdb as the 500GB failing drive
2. Create workspace
sudo mkdir -p /recovery/hdd_500gb
cd /recovery/hdd_500gb
3. Initial fast copy (skip bad sectors)
sudo ddrescue -v -n /dev/sdb hdd_500gb_image.img recovery.map
4. Retry pass with direct I/O
sudo ddrescue -v -d -r3 /dev/sdb hdd_500gb_image.img recovery.map
5. Final scraping pass
sudo ddrescue -v -d -r5 -c8 /dev/sdb hdd_500gb_image.img recovery.map
6. Verify recovery results
ddrescue --show-status recovery.map
```
Example 2: USB Drive Recovery
Scenario: Corrupted USB flash drive with important documents
```bash
1. Identify USB device
dmesg | tail -20
Shows USB device as /dev/sdc
2. Quick recovery attempt
sudo ddrescue -v -f /dev/sdc usb_recovery.img usb_recovery.map
3. Check recovery status
ddrescue --show-status usb_recovery.map
4. Mount recovered image for file extraction
sudo mkdir /mnt/usb_recovery
sudo mount -o loop,ro usb_recovery.img /mnt/usb_recovery
```
Example 3: Optical Media Recovery
Scenario: Scratched DVD with important data
```bash
1. Insert DVD and identify device
Usually /dev/sr0 or /dev/cdrom
2. Recovery with appropriate cluster size for optical media
sudo ddrescue -v -c2048 -r2 /dev/sr0 dvd_recovery.iso dvd_recovery.map
3. Verify ISO integrity
file dvd_recovery.iso
```
Advanced Options and Techniques
Optimizing Recovery Performance
Direct I/O for better hardware control:
```bash
sudo ddrescue -v -d -c64 /dev/sdX image.img recovery.map
```
Reverse direction recovery:
```bash
sudo ddrescue -v -R /dev/sdX image.img recovery.map
```
Custom timeout settings:
```bash
sudo ddrescue -v -t30 -r3 /dev/sdX image.img recovery.map
```
Advanced Recovery Strategies
Split recovery for large drives:
```bash
Recover first half
sudo ddrescue -v -i0 -s250GB /dev/sdX part1.img part1.map
Recover second half
sudo ddrescue -v -i250GB /dev/sdX part2.img part2.map
Combine images
cat part1.img part2.img > complete.img
```
Selective area recovery:
```bash
Recover specific sectors (example: sectors 1000-2000)
sudo ddrescue -v -i1000s -s1000s /dev/sdX partial.img partial.map
```
Working with Mapfiles
Analyzing mapfile contents:
```bash
Show detailed recovery statistics
ddrescue --show-status recovery.map
Generate recovery report
ddrescue --show-status --verbose recovery.map > recovery_report.txt
```
Mapfile manipulation:
```bash
Copy mapfile for backup
cp recovery.map recovery_backup.map
Reset specific areas in mapfile
ddrescue --mark-bad-sectors=1000s,2000s recovery.map
```
Common Issues and Troubleshooting
Device Recognition Problems
Issue: Device not found or permission denied
Solutions:
```bash
Check device existence
ls -la /dev/sd*
Verify permissions
sudo chmod 666 /dev/sdX # Temporary fix
Check if device is mounted
mount | grep sdX
umount /dev/sdX* # Unmount if necessary
```
Insufficient Space Errors
Issue: Not enough space for image file
Solutions:
```bash
Check available space
df -h /destination/path
Use compression during recovery
sudo ddrescue -v /dev/sdX >(gzip > compressed_image.img.gz) recovery.map
Split image into smaller files
sudo ddrescue -v -S2GB /dev/sdX image.img recovery.map
```
Performance Issues
Issue: Extremely slow recovery speed
Troubleshooting steps:
```bash
Check system resources
top
iostat -x 1
Use larger cluster sizes
sudo ddrescue -v -c1024 /dev/sdX image.img recovery.map
Enable direct I/O
sudo ddrescue -v -d /dev/sdX image.img recovery.map
```
Hardware Compatibility Issues
Issue: Device disconnects during recovery
Solutions:
```bash
Disable USB power management
echo -1 > /sys/module/usbcore/parameters/autosuspend
Use different USB port or controller
lsusb
Try connecting to USB 2.0 port instead of USB 3.0
Check dmesg for hardware errors
dmesg | tail -50
```
Recovery Interruption Handling
Issue: Recovery process interrupted unexpectedly
Recovery procedure:
```bash
Resume from existing mapfile
sudo ddrescue -v /dev/sdX image.img recovery.map
Check mapfile integrity
ddrescue --show-status recovery.map
Verify partial image
file image.img
ls -lh image.img
```
Best Practices and Professional Tips
Pre-Recovery Assessment
Document everything:
1. Record device model, serial number, and capacity
2. Note error symptoms and when they first appeared
3. Document any previous recovery attempts
4. Take photos of physical device condition
Initial device evaluation:
```bash
Check SMART status
sudo smartctl -a /dev/sdX
Test basic connectivity
sudo hdparm -I /dev/sdX
Monitor system logs
tail -f /var/log/syslog | grep sdX
```
Recovery Environment Optimization
System configuration:
```bash
Disable swap to prevent disk thrashing
sudo swapoff -a
Increase system limits
echo 'vm.dirty_ratio = 5' >> /etc/sysctl.conf
echo 'vm.dirty_background_ratio = 2' >> /etc/sysctl.conf
Set CPU governor to performance
echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
```
Strategic Recovery Approach
Phase 1: Fast assessment
```bash
Quick pass to assess damage extent
sudo ddrescue -v -n -c1M /dev/sdX quick_assessment.img assessment.map
```
Phase 2: Bulk recovery
```bash
Recover all easily readable data
sudo ddrescue -v -c64k /dev/sdX bulk_recovery.img recovery.map
```
Phase 3: Problem area focus
```bash
Intensive recovery of bad sectors
sudo ddrescue -v -d -r5 -c512 /dev/sdX final_recovery.img recovery.map
```
Quality Assurance
Verify recovery integrity:
```bash
Calculate checksums
md5sum recovered_image.img > recovery_checksum.md5
Test filesystem integrity
fsck -n recovered_image.img
Mount and verify data accessibility
sudo mount -o loop,ro recovered_image.img /mnt/test
ls -la /mnt/test
```
Professional Documentation
Create recovery report:
```bash
Generate comprehensive status report
{
echo "Recovery Report - $(date)"
echo "Source Device: /dev/sdX"
echo "Image File: $(ls -lh image.img)"
echo ""
ddrescue --show-status recovery.map
echo ""
echo "System Information:"
uname -a
echo ""
echo "Recovery Command History:"
history | grep ddrescue
} > recovery_report_$(date +%Y%m%d).txt
```
Recovery Strategies for Different Scenarios
Mechanical Hard Drive Failure
Symptoms: Clicking sounds, slow response, bad sectors
Strategy:
```bash
1. Minimize mechanical stress with larger clusters
sudo ddrescue -v -n -c1M /dev/sdX mechanical_hdd.img mechanical.map
2. Single-direction reading to avoid head movement
sudo ddrescue -v -d -c256k -r1 /dev/sdX mechanical_hdd.img mechanical.map
3. Final attempt with smallest clusters
sudo ddrescue -v -d -c4k -r3 /dev/sdX mechanical_hdd.img mechanical.map
```
SSD/Flash Memory Corruption
Symptoms: Sudden capacity reduction, filesystem errors
Strategy:
```bash
1. Fast bulk copy (SSDs fail quickly)
sudo ddrescue -v -c1M -r1 /dev/sdX ssd_recovery.img ssd.map
2. Targeted recovery of critical areas
sudo ddrescue -v -i0 -s1G -c4k -r3 /dev/sdX ssd_recovery.img ssd.map
3. Skip extensive retries (may cause further damage)
sudo ddrescue -v -T5 -c64k -r2 /dev/sdX ssd_recovery.img ssd.map
```
Network Storage Recovery
Remote device recovery:
```bash
1. Create SSH tunnel for remote recovery
ssh -L 2222:target_host:22 user@gateway_host
2. Stream recovery over network
ssh user@target_host "sudo ddrescue -v /dev/sdX - recovery.map" > network_recovery.img
3. Resume interrupted network recovery
ssh user@target_host "sudo ddrescue -v /dev/sdX - recovery.map" >> network_recovery.img
```
Monitoring and Progress Tracking
Real-time Monitoring
Terminal-based monitoring:
```bash
Run ddrescue in background
sudo ddrescue -v /dev/sdX image.img recovery.map > recovery.log 2>&1 &
Monitor progress in real-time
tail -f recovery.log
Check status periodically
watch -n 30 'ddrescue --show-status recovery.map'
```
System resource monitoring:
```bash
Monitor I/O statistics
iostat -x 1
Watch memory usage
watch -n 5 'free -h'
Monitor disk temperature (if supported)
sudo hddtemp /dev/sdX
```
Automated Progress Reporting
Create monitoring script:
```bash
#!/bin/bash
recovery_monitor.sh
MAPFILE="$1"
LOGFILE="recovery_progress.log"
while true; do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
STATUS=$(ddrescue --show-status "$MAPFILE" 2>/dev/null | grep -E "(rescued|errors)")
echo "$TIMESTAMP - $STATUS" >> "$LOGFILE"
sleep 300 # Check every 5 minutes
done
```
Usage:
```bash
chmod +x recovery_monitor.sh
./recovery_monitor.sh recovery.map &
```
Performance Analytics
Calculate recovery statistics:
```bash
Extract recovery metrics
grep "rescued" recovery.log | tail -10
Calculate average transfer rate
awk '/current rate/ {sum+=$NF; count++} END {print "Average rate:", sum/count, "MB/s"}' recovery.log
Identify problem areas
ddrescue --show-status recovery.map | grep -A 10 "bad-sector"
```
Post-Recovery Data Analysis
Image File Verification
Basic integrity checks:
```bash
Verify image file size
ls -lh recovered_image.img
Check file type
file recovered_image.img
Calculate checksums for verification
sha256sum recovered_image.img > image_checksum.sha256
```
Filesystem Analysis
Analyze recovered filesystem:
```bash
Check filesystem type and status
sudo fsck -n recovered_image.img
Mount for read-only analysis
sudo mkdir /mnt/recovery_analysis
sudo mount -o loop,ro recovered_image.img /mnt/recovery_analysis
Analyze directory structure
find /mnt/recovery_analysis -type f | head -20
```
Data Extraction Strategies
Selective file recovery:
```bash
Use photorec for file carving
photorec recovered_image.img
Extract specific file types
foremost -i recovered_image.img -o extracted_files/
Manual file system exploration
sudo mount -o loop recovered_image.img /mnt/recovered
rsync -av /mnt/recovered/ /safe/location/recovered_data/
```
Recovery Quality Assessment
Evaluate recovery success:
```bash
Analyze mapfile statistics
ddrescue --show-status recovery.map
Calculate recovery percentage
TOTAL_SIZE=$(ddrescue --show-status recovery.map | grep "rescued" | awk '{print $2}')
ERROR_SIZE=$(ddrescue --show-status recovery.map | grep "errsize" | awk '{print $2}')
Generate recovery report
echo "Recovery completed with $((100 - ERROR_SIZE*100/TOTAL_SIZE))% success rate"
```
Data Validation
Verify critical files:
```bash
Check important file types
find /mnt/recovered -name ".doc" -exec file {} \;
find /mnt/recovered -name "*.pdf" -exec pdfinfo {} \;
find /mnt/recovered -name "*.jpg" -exec identify {} \;
Validate database files
sqlite3 /mnt/recovered/database.db ".schema"
Test archive integrity
find /mnt/recovered -name "*.zip" -exec unzip -t {} \;
```
Conclusion
Mastering ddrescue for data recovery operations requires understanding both the technical aspects of the tool and the strategic approaches to different failure scenarios. The command `ddrescue /dev/sdX /path.img /path.map` represents just the beginning of a comprehensive recovery process that can save valuable data from seemingly hopeless situations.
Key Takeaways
Technical Mastery:
- ddrescue's multi-pass approach maximizes data recovery success
- Mapfiles enable resumable operations and progress tracking
- Strategic parameter selection optimizes recovery for different device types
- Proper preparation and environment setup are crucial for success
Professional Best Practices:
- Always work on bit-for-bit copies, never directly on original media
- Document everything throughout the recovery process
- Use multiple recovery strategies adapted to specific failure modes
- Verify recovered data integrity before declaring success
Strategic Considerations:
- Time is critical - failing devices continue to degrade
- Hardware-specific approaches improve recovery success rates
- Network and remote recovery capabilities extend tool utility
- Post-recovery analysis ensures data usability and completeness
Next Steps
After mastering basic ddrescue operations, consider advancing your data recovery skills by:
1. Learning complementary tools: Combine ddrescue with tools like TestDisk, PhotoRec, and specialized filesystem recovery utilities
2. Understanding hardware: Develop knowledge of storage device internals and failure modes
3. Building recovery environments: Create specialized recovery systems and bootable environments
4. Practicing scenarios: Regular practice with different device types and failure scenarios
5. Staying current: Keep updated with new ddrescue features and recovery techniques
Remember that successful data recovery often depends on quick action, proper technique, and sometimes accepting partial recovery as the best possible outcome. ddrescue provides the foundation for professional-grade data recovery operations, but success ultimately depends on the operator's knowledge, preparation, and strategic decision-making throughout the recovery process.
The investment in learning ddrescue thoroughly pays dividends when facing real-world data recovery challenges, whether recovering family photos from a failing USB drive or restoring critical business data from damaged server storage. With the knowledge provided in this guide, you're equipped to handle a wide range of data recovery scenarios with confidence and professionalism.