This article is work in progress, i have started the ddrescue and waiting for it to finish before i go on with this post.
One thing you should notice that this is the GNU DDRESCUE, from the package gddrescue, not the old script dd_rescue that is a wrapper around the dd program.
It has been some time since i found out that dd_rescue has been replaced by the newer rewritten ddrescue from the gddrescue package, to be more specific, since i posted this back in march 2011.
So, now i have yet another disk that is busted, with 3 partitions, but not like that one, this one simply has so many bad sectors, it’s a 2TB western digital caviar black that is causing me trouble
So i couldn’t find a 2TB caviar black, so to be on the safe side, i got a 3TB western digital green, partitioned it and formatted it like i describe here.
So, now that i have a hard drive that needs rescuing, lets revise what we need to do
1- Install the new ddrescue tool gddrescue
apt-get install gddrescue
2- Run ddrescue, make sure to use a file to resume in case we get interrupted (sometimes saves days of rescue can be lost and need to be done again, if they have not been damaged with disk deterioration that is)
ddrescue /dev/sdb /hds/3tb/2tb.img /root/resumelog.log
If you lose power, or get interrupted, or need to restart your computer, ddrescue will resume ONLY if you use the same exact line above once again, it will then use the log file to append to the existing output file.
Now, we have an image, we can now mount that image and take a look, so we mount the image on a loop
You could have partitions on the original disk, in my case i had 3 EXT2 partitions, the data i need is on the third partition
So i enter parted (debian package), and did the following
Using /hds/3tb/2tb.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit
Unit? [compact]? B
(parted) print
Model: (file)
Disk /hds/3tb/2tb.img: 2000398934016B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 400077619199B 400077586944B primary ext2
2 400077619200B 700144058879B 300066439680B primary ext2
3 700144058880B 2000396321279B 1300252262400B primary ext2
So now i know that the partition i want (third) starts at 700144058880, that’s all i need to know to mount this as a loop device
I am mounting loop device simply because i want to run fsck (disk check) on the partition before actually mounting that partition.
First, what is the next free / available loop device number ?
losetup -f
this should produce output such as
/dev/loop1
So now we know that we need to mount this on loop1 since it is the next available (not in use) loop device.
losetup /dev/loop1 /hds/3tb/2tb.img -o 700144058880
So, now loop 1 has my partition, you should omit the -y if you want to manually agree to every repair fsck wants to make
fsck.ext2 -y /dev/loop1
Great, now we should have a clean file system to mount
Even though we can mount the attached loop directly, i will demonstrate how to mount the loop and how to mount the image on a loop directly. i am doing this so that this tutorial would have the complete command referance of what tools and command parameters you might need.
First methode, the detach / release the loop device then mount it again in one go, this is done as follows
(-d means detach)
losetup -d /dev/loop1
Then, we attach with the foolowing command, notice how we used the starting ofset exactly like we did when attaching to a loop device.
Your mount command here
The other way is simply to mount our already attached loop device as follows
mount -t ext2 /dev/loop1 /hds/img
Now, we can mount this partition
mount -o loop,offset=700144058880 harddrive.img /hds/img
Or if you like, you can mount it read only
mount -o ro,loop,offset=700144058880 harddrive.img /hds/img
mount | grep /hds/3tb/2tb.img
/hds/3tb/2tb.img on /hds/img type ext2 (ro,loop=/dev/loop1,offset=700144058880)