Need gddrescue help

Hello, new to this forum and especially Linux. Am looking for some info about ddrescue. I have a 500GB SATA hard drive (OS Windows 10) that is on its last leg and have some critical data that I need to get off of it before it goes kaput. Everything else I’ve tried has failed (system restore, copying from file explorer in windows and Clonezilla) So far ddrescue seems to be working well but the drive keeps disconnecting in the middle of the rescue. From what I have read ddrescue keeps a log file so that if it crashed it can pick back up where it left off. But I don’t know where the log file goes when I generate it and I don’t know if I keep starting from scratch every time I enter the commands.

I’m using the command ddrescue -v -R -n /dev/sdc /dev/sdd ddrescue.txt (I’m using the -R because it seems to make it farther backwards than forwards 211GB rescued on -R vs 41GB Rescued on forward)
When I enter the command above after the drive has dropped (I say it has dropped because the message on the screen says that the drive is no longer there) I get a message saying ddrescue: Output File exists and is not a regular file. Followed by ddrescue: Use ‘–force’ if you really want to overwrite it.

Well, in short, no I don’t want to overwrite it, I want it to start back up from where it crashed/dropped/stopped at.
Can someone out there tell me what it is that I’m doing wrong?
When I use the --force or -f command is it really erasing/overwriting the previous rescue?
If I am overwriting it everytime, how do I tell it to pick back up from where it finished after the drive disconnects instead of overwriting?
Where does the ddrescue.txt file go?
As a test I tried plugging the target drive into a Window machine and the drive won’t load, shows up in File Explorer but gives a D: does not exist error message when I try to check it, same in Command Prompt with Admin, so I don’t even know if what it rescued is usable.

The problem with the drive is that after a while it just seems to shutdown, I can power cycle it (i.e. unplug it and plug it back in) and get another bit of time out of it but don’t want to keep just rewriting the same data

Thanks in advance for any help someone can provide!

After reading this

I would assume “ddrescue.txt” is your mapfile, and would be in the current directory.

and the use of the “-A” option tells it to “try again”

Are you running this from a LiveCD ?

Mark,

Thank you for the reply. It was late last night when I sent the request so I may not have been as clear as I need to be…hope this answers your questions so that you can maybe answer mine:

I have a USB Jump Drive made with Linux Live USB Creator that is loaded with SystemRescueCD 4.5.2
I am booting to the USB and getting to a Linux command prompt where I run the ddrescue.
I am attempting to clone a failing 500GB SATA Hard drive that has been removed from a laptop to a 1TB SATA Hard Drive.
So I have 3 USB ports in use on a computer:
1 for the Linux USB to boot up and run ddrescue,
1 that is the failing HDD (source) and
1 that is getting the rescued data (target)

I’m using instructions found online (I can’t find who to give credit to) where I run the following commands:

I do the following as I connect each drive so I know which sd is which.
dmesg|tail
cat /proc/partitions
fdisk -l (I thought it was a 1 but its a lowercase L)

After I do that I verify the serial number of the bad drive using the following command:
smartctl -a /dev/sdc
smartctl -a /dev/sdd

I’ve been through this about 4 times now and everytime the drive letters have stayed the same but I check just in case.
sdc is my source (damage 500GB HDD)
sdd is my target (new 1TB HDD)

After I verify the S/N I enter the following:

 ddrescue -v -R -n /dev/sdc /dev/sdd ddrlog.txt

Thats when I get the error message:
ddrescue: Output file exists and is not a regular file.
ddrescue: Use ‘–force’ if you really want to overwrite it, but be aware that all existing data in the output file will be lost.

Now, three times I have entered the following:
ddrescue -v -R -n /dev/sdc /dec/sdd ddrlog.txt --force

Q1: And I think that every time I’ve done that I’ve basically started from scratch again, is that true?
Q2: So where is the ddrlog.txt file located? Is it on the USB Jump Drive, the source drive or the target drive?
Q3: What is a regular file?
Q4: Running fdisk -l shows that sdc and sdd are identical except for the size (i.e. source is 500GB and target is 1TB) is ddrescue finished?
Q5: Do I need to run ddrescue forward again on another target drive or can I run it on the one I’m using now without erasing the backward pass?

Thanks again for any help you can provide.

Q1) I’m guessing that’s impossible to say without looking at the log file

Q2) As you haven’t specified a path to where the logfile should be created, it’ll be in whatever directory was the “current directory” when you ran the command.

if you’re working from the commandline, what does:

ls

(list) return ?

Q3) just what it says, a regular file … what it’s telling you is /dev/sdd already exists and is a partition not a file, so are you sure you want to overwrite it.

Q4) if fdisk -l shows the partitions to be identical, I’d say yes it’s finished … have you tried mounting the 1TB HDD and seeing if you can access anything on it ?

Q5) I don’t understand the question (?)

Is the LiveUSB persistent ? ← if not, the log file will be lost every boot because it’s only being held in memory and not written to the jumpdrive.

Where did you get the LiveUSB image … is it a particular distro ?

and if you run:
ls
is ddrlog.txt listed in the output ?

Mark,

Thanks again for the response. As you can probably tell, I’m very new to this Linux environment. But I really appreciate your assistance.

Response for your Q1 & Q2 Answers:
Ordinarily I like to put things where I can find them again, but because I didn’t understand what I was doing at the time I just followed the instructions. In the future is there a command to put at the end of the ddrescue command where I can tell the ddrlog.txt file to be put in a particular place, like the USB Boot Drive I made? Does root@sysresccd /root % meaning anything? Is it possible that that is where the ddrlog.txt is located?

I can’t try the Code [Select] ls you requested because ddrescue is running and I don’t want to stop it. I’ll try it when its finished.

Response for your Q3 Answer:
I was expecting something like a regular file is .txt or something like that, :). If /dev/sdd already exists how do I get ddrescue to resume instead of overwrite?

Response for your Q4 Answer:
When I plug the drive back into a Windows machine it doesn’t recognize the drive and asks if I want to repair it, when I click yes the drive disconnects. So I figured it wasn’t finished yet and started over again. Is there are test that I can do to the drive on the Linux side to check the target drive out when it’s finished?

Response to your Q5 Answer:
What I meant is that I’m expecting when I clone the drive is for ddrescue to clone everything including places where there is nothing, so the rescued space should be close to the size of the drive. In the backward pass ddrescue was able to rescue 211GB, in the forward pass it was able to rescue 41GB, 211 + 41 = 252GB, there is still another 250GB that it didn’t touch, does that make sense? Is the 250GB spot that it didn’t touch where all the data that I need to recover is located at? I can’t see what has been copied so I don’t know what it has rescued. Before all this happened there was 129GB of free space remaining on the damaged drive, so I would like to hopefully rescue 371GB.

So my Q5 question was if it made half way with a backward pass, should also I try to make it half way with a forward pass on another target drive and somehow try to merge the two target drives later?

Response to your NEW Question:
I downloaded Linux Live USB Creator 2.9.4, I then downloaded systemrescuecd-x86-4.5.2.iso from a menu inside the LiLi Programan and then installed it on the jump drive.
I don’t know how to tell you whether or not it is persistent. When the latest ddrescue run is finished, I’ll try your list command.

My New Questions:
Q6: How do I get the ddrescue to resume instead of overwrite? When ddrescue crashes it gives me the following error: ddrescue: Input file disappeared: No such file or directory. When that happens and I try to resume I keep having to use --force to make it run again. I haven’t rebooted the machine so ddrescue should be able to use the ddrlog.txt file to pick up where it left off right?

Q7: How do I check/test the target drive to see if it worked?

Thanks for your help and patience.

Try not to work on the failing drive as re-reading will hammer the disk and could permanently damage it.
First create a direct copy to another drive
You can use either dd or ddrescue

ddrescue -d -f /dev/sdc /dev/sdd /media/<usb drive>/rescue.logfile

where /media// is third (usb) drive just for the log file, that way it will be persistant and ddrescue will be able to resume where it left off.
Once you got the failing drive copied then put it away for safe keeping.
Next step is to run fsck on /dev/sdd partition to recover/save data

fsck /dev/sdd1

or

fsck /dev/sdd2

if you have more partitions
Once fsck run, mount /dev/sdd1 somewhere and see if you can access the data:

mount /dev/sdd1 /mnt/data1

create /mnt/data1 first

mkdir /mnt/data1