I usually use
dvdbackup for exactly this task. I've used this tool when
k3b was able to duplicate a DVD yet the disc was unplayable. Copying it with dvdbackup has worked every time.
You can download it from the main site, but it should be in your Distro's repositories as well.
$ cd /dir/where/you/save/the/dvd
# insert DVD to be copied
$ dvdbackup -M
$ genisoimage -dvd-video -udf -o movie.iso /dir/where/you/save/the/dvd
$ eject /dev/dvd
# now insert a blank DVD
$ growisofs -Z /dev/dvd=movie.iso
NOTE: To make
dvdbackup more verbose:
$ dvdbackup -M -i /dev/sr0 -p
There is this application which I've never used before but purports to do what you need. You can download it here.
Recovers files from disks with physical damage. Allows you to copy files from disks with problems such as bad sectors, scratches or that just give errors when reading data. The program will attempt to recover every readable piece of a file and put the pieces together. Using this method most types of files can be made useable even if some parts of the file were not recoverable in the end.
The program can be used as a daily backup system using its batch mode functions. A list of transfers can be saved to a file and then run from the command line to perform the same batch of transfers on a regular basis without having to use the GUI interface. The program supports command line parameters which allow the application to be run from schedulers or scripts so it can be fully integrated into daily server tasks.
This an old KDE3 application so it took some effort to get it installed on Fedora 19. When I was able to invoke it I was a little underwhelmed. It copy files from media but it was questionable, IMO, how well it could recover files from scratched media. But it might be worth a look if you're desperate enough.
NOTE: I found that tool as well as references to
ddrescue here in this blog post titled: Recovering damaged CDs or DVDs with Linux, so you might want to scan that post for ideas too.
Unfortunately I think the best 2 options for doing this work in Linux are still
ddrescue. Basically you do the following with
$ dd if=/dev/sr0 of=image.iso bs=2048 \
conv=noerror,notrunc iflag=nonblock status=progress
The key option is
dd will write the data to a
.iso file and will continue to do so until you decide to throw in the towel on it.