I've got what is apparently a slightly uncommon backup requirement:

I have physical access to both disks, and transfer will only ever go one way. I want to completely replicate the first disk to the second, and then update it once a month manually afterward.

I saw this thread: https://stackoverflow.com/questions/15208/whats-the-best-linux-backup-solution, here's where my needs differ.

Both disks are USB, and there is the possibility that their mount locations will change from time to time. I need to be able to specify a source directory (/media/A) and a destination (/media/B) and have A copy to B without simply starting from scratch each time, with the end result being B and A are identical. I don't require time machine-style incremental changes, don't want to tar or encrypt anything, don't need to send this over a network.

Thoughts? I'm running Ubuntu 10.04.


Rsync is a very nice utility for this... Specifically:

   rsync -Pav --delete --force-delete /media/A/ /media/B/

(note ending slashes)

   man rsync 

will give you more info

  • --force-delete is deprecated, and I've added --exclude 'lost+found', otherwise it's great Jul 19 '10 at 4:02
  • I'm using "rsync -Pav --delete --exclude 'lost+found' /source /destination" and "tree >> ~/YYYY-MM-DD_filelist" to keep records. Thanks! Sep 22 '10 at 19:14

I recommend the rsync utility for this purpose.


rsync should be adaptable to your needs. Simply give it the source and destination directories, and it does the rest.

cp -au /media/A/* /media/B

seems like it should be sufficient. Anybody with brighter ideas? Objections?


rsync would work best as the others have shown above, as it will update automatically. You could also use dd to copy the raw disk data from one disk to another ("cloning" the disk) which would be easier to implement.


I recommend unison. Homepage link

I use it for day-to-day syncs between my home computer and laptop, one-way sync will be even easier.

The config will be very simple:

root = /media/A
root = /media/B

If /media/b is empty, the first time it will be propagated with the contents of /media/A.

Later, if something changes in /media/A, unison will change /media/B to be identical to /media/A. It will also work the other way.


If they're both local and fast and you want the most accurate changes, then I would use dd to just copy everything. If you're running this interactively, you can use pv to get a nice progress bar. When you do this you must make sure the destination disk is not mounted.

To cope with the fact that the disks may mount at different points, I would access them by their ID, rather than their transient device name.

So in short:

umount /dev/disks/by-id/blah-blah pv < /dev/disks/by-id/ata-Patriot_Torqx_128GB_SSD_blah > /dev/disks/by-id/blah-blah

The good thing is that this will copy the bootloader, all partitions, etc. One drawback is that if the filesystem becomes corrupt, that corruption will propagate. But presumably you have other backups to cope with needing to go back in time.

To answer some of the others, because I can't comment yet:

The problem with Carl's "cp" is that it won't delete deleted files.

The problem with rsync -Pav is that it won't propagate hardlinks, but you could add -H to do that.

I love Unison, but it's not a good choice here because it writes everything into temporary directories before moving them into place, so it may not work on disks that are nearly full. It does a full upfront scan so it will tend to be slower. And it keeps some accounting information that you don't need for one-way syncs.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.