If your intent is to backup a remote computer’s HDD A via SSH to a single file that’s on your local computer’s HDD, you could do one of the following.
run from remote computer
$ dd if=/dev/sda | gzip -1 - | ssh user@local dd of=image.gz
run from local computer
$ ssh user@remote "dd if=/dev/sda | gzip -1 -" | dd of=image.gz
$ ssh skinner "dd if=/dev/sda5 | gzip -1 -" | dd of=image.gz 208782+0 records in 208782+0 records out 106896384 bytes (107 MB) copied, 22.7608 seconds, 4.7 MB/s 116749+1 records in 116749+1 records out 59775805 bytes (60 MB) copied, 23.9154 s, 2.5 MB/s $ ll | grep image.gz -rw-rw-r--. 1 saml saml 59775805 May 31 01:03 image.gz
Methods for monitoring?
- Login via
sshin another terminal and
ls -lthe file to see what it’s size is.
You can use
pvto monitor the progress of a large dd operation, for instance, for the remote example above, you can do:
$ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
Send a “SIGUSR1” signal to
ddand it will print stats. Something like:
$ pkill -USR1 dd
The methods mentioned above for monitoring were originally left via comments by @Ryan & @bladt and myself. I’ve moved them into the answer to make them more obvious.
The error you receive is due to the use of sudo remotely (you’d be asked for the password but you don’t have a tty to enter it). On the other hand, as a normal user you can’t normally use simply
dd as suggested in other answer (you don’t have the required permissions to the device).
You can solve the problem by giving yourself rights to execute
dd as sudo without a password. You can do this by editing the sudoers file (on the remote!):
add the following line:
userfoo ALL=(ALL) NOPASSWD: /bin/dd if=/dev/sdX
Now you can issue:
ssh userfoo@host "sudo /bin/dd if=/dev/sdX" | dd of=test.dd
and it should work.
You could make a more generic entry in sudoers, allowing you to run
dd with any parameter, but it is wiser to keep this free permissions to the minimum you need.
I’ve just used a modified version on a virtual Linux Mint box to clone a physical hard drive on an aging RedHat server.
I ran the following as root on the virtual box:
ssh firstname.lastname@example.org "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
- 192.168.1.5 is the physical Red Hat Enterprise Linux 2.1 box.
- /dev/sdb is a new virtual disk, which when finished cloning will be the basis of a virtual version of the old dying physical box.