Как создать удаленный диск с помощью SSH на локальной машине и сохранить на локальный диск

85

Как я могу создать резервную копию удаленного диска с помощью SSH на моем локальном компьютере и сохранить его на локальном диске?


Я пробовал следующее:

ssh hostname@my.ip.address "sudo dd if=/dev/sdX " | \
  dd of=/home/username/Documents/filename.image`

Однако я получаю следующую ошибку:

нет tty присутствует и не задана программа askpass

Qu0rk
источник

Ответы:

114

Если вы намереваетесь сделать резервную копию жесткого диска A удаленного компьютера через SSH в один файл на жестком диске вашего локального компьютера, вы можете выполнить одно из следующих действий.

Примеры

запустить с удаленного компьютера

$ dd if=/dev/sda | gzip -1 - | ssh user@local dd of=image.gz

запустить с локального компьютера

$ 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

Методы мониторинга?

  1. Войдите через sshдругой терминал и ls -lфайл, чтобы увидеть его размер.
  2. Вы можете использовать pvдля отслеживания хода выполнения большой операции dd, например, для удаленного примера выше, вы можете сделать:

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. Отправьте сигнал "SIGUSR1", ddи он напечатает статистику. Что-то вроде:

    $ pkill -USR1 dd
    

Рекомендации

Методы, упомянутые выше для мониторинга, были первоначально оставлены через комментарии @Ryan & @bladt и меня. Я переместил их в ответ, чтобы сделать их более очевидными.

SLM
источник
Я пробовал это для аналогичной проблемы (резервное копирование ONEжесткого диска удаленного компьютера в TWOхранилище удаленного компьютера ), например: <br /> [root @ ONE] # dd if = / dev / sda1 | ssh root @ TWO dd of=/root/Public/ONE/sda1.img<br /> 409600 + 0 записей в 409600 + 0 записей из 209715200 байт (210 МБ) скопировано, 0,894929 с, 234 МБ / с Псевдо-терминал не будет выделен, так как stdin не является корневым терминалом @ пароль TWO Проблема в том, что /root/Public/ONE/sda1.imgфайл был создан ONE, а не включен, TWOкак ожидалось. Как я могу это исправить?
Urhixidur
1
Может кто-нибудь привести пример использования pvс локальной машины? Спасибо.
TCB13
Лучше использовать lbzip2 или Pigz Inst из gzip
Шимон Дудкин
зачем мне нужен "| dd of = image.gz" в конце? (не только "> image.gz"), потому что dd берет 100% одного процессора
Шимон Дудкин
6
Что касается мониторинга: более новые версии dd также имеют status=progressопцию. Таким образом, вам больше не нужно запускаться pkill -USR1 ddиз другого терминала.
До Шефера
12

Полученная вами ошибка связана с удаленным использованием sudo (вам будет предложено ввести пароль, но у вас нет tty для его ввода). С другой стороны, как обычный пользователь вы не можете использовать его просто так, ddкак это предлагается в другом ответе (у вас нет необходимых прав доступа к устройству). Вы можете решить эту проблему, предоставив себе права на выполнение ddот имени sudo без пароля. Вы можете сделать это, отредактировав файл sudoers (на пульте!):

sudo visudo

добавьте следующую строку:

userfoo ALL=(ALL) NOPASSWD: /bin/dd if=/dev/sdX

Теперь вы можете выдать:

ssh userfoo@host "sudo /bin/dd if=/dev/sdX" | dd of=test.dd

и это должно работать. Вы можете сделать более общую запись в sudoers, что позволит вам работать ddс любым параметром, но разумнее ограничить количество бесплатных разрешений до необходимого.

elfantin
источник
Или вы можете просто запустить 'sudo ls' на соответствующем конце (и ввести пароль) непосредственно перед выполнением команды "sudo dd ..."
MikeW
В новых версиях dd добавление status = progress позволяет даже отслеживать ход копирования.
Sensslen
7

Я только что использовал модифицированную версию на виртуальной коробке Linux Mint для клонирования физического жесткого диска на устаревшем сервере RedHat.

Я запустил следующее как root на виртуальной коробке:

ssh root@192.168.1.5 "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5 - это физическая коробка Red Hat Enterprise Linux 2.1.
  • / dev / sdb - это новый виртуальный диск, который после завершения клонирования станет основой виртуальной версии старого умирающего физического блока.
Фред Нерк
источник