Como faço DD pela rede para um HD externo?

4

Estou tentando clonar um disco rígido no meu pi de framboesa que está na mesma rede para um disco rígido externo do computador no qual estou atualmente. No entanto, estou tendo problemas para canalizar o comando corretamente. Eu tentei:

ssh user@hostip "dd if=/dev/sda" | sudo dd of=/dev/sdc

Mas as solicitações para o sudo e a conexão ssh são reunidas.

    
por SHiLLySiT 15.11.2015 / 00:42

3 respostas

5

Usando o netcat - nenhuma carga desnecessária na sua CPU se você não estiver preocupado com a privacidade (ou seja, sua rede doméstica é realmente sua)

No seu host, corra

cat /dev/sda | nc -n ipaddr 10000

onde ipaddr é o endereço IP do seu PI

No seu PI, corra

nc -l 10000 >/dev/sdc

Todos os comandos devem ser executados como root. O Netcat do OpenBSD é assumido como sua versão nc (pode ser encontrada no LibreSSL), mas outros devem funcionar também.

    
por 15.11.2015 / 01:44
4

Algumas soluções simples sem alterar sua linha de comando:

  • Use a autenticação de chave (com ssh-agent se o arquivo de chave for protegido por senha) em vez da autenticação de senha para SSH. Geralmente é uma boa ideia de qualquer maneira.
  • Use a multiplexação de conexão do SSH para primeiro abrir uma conexão (por exemplo, ssh -o ControlMaster=yes -M -f sleep 999999 ) e, em seguida, execute a cópia em uma conexão escrava, que não requer autenticação. Consulte Obtenha indicação do comando ssh para um exemplo.
  • Execute sudo true antes de executar este comando. Por padrão, o sudo armazena em cache as informações que verificam sua senha por 15 minutos (pelo menos se você fizer isso no mesmo terminal, isso depende da configuração).

Se você realmente precisar digitar as duas senhas no comando devido a uma configuração incomumente restritiva, poderá usar um pipe nomeado para separar os comandos:

mkfifo pipe
ssh user@hostip cat /dev/sda >pipe
# and in another terminal
sudo sh -c 'cat >/dev/sdc' <pipe

Além disso, use cat em vez de dd , é mais rápido e mais confiável .

    
por 15.11.2015 / 00:54
2

Você realmente precisa de uma cópia bit-a-bit de todo o disco remoto? por exemplo. para análise forense digital?

Se não, se você só precisa de uma cópia das partições e os dados nelas, você pode economizar muito tempo e transferir a largura de banda por:

  1. copiando a tabela de partições, por exemplo com sfdisk .

Por exemplo:

ssh user@hostip sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdc

ou em duas etapas com um arquivo temporário:

ssh user@hostip sudo sfdisk -d /dev/sda > /tmp/sda.txt
sudo sfdisk /dev/sdc < /tmp/sda.txt
  1. usando partclone para clonar apenas as partes do sistema de arquivos que estão atualmente em uso, ignorando todo o espaço vazio e arquivos excluídos etc.

Por exemplo:

ssh user@hostip sudo partclone.ext4 -c -s /dev/sda1 -o - | 
    sudo partclone.ext4 -r -s - -o /dev/sdc1

partclone suporta todos os sistemas de arquivos comuns e incomuns usados no Linux (ext2 / 3/4, btrfs, xfs, etc) e no Windows (NTFS, FAT).

O

partclone é empacotado para a maioria das distros, incluindo o debian. sfdisk faz parte do pacote util-linux .

Você ainda precisa resolver o problema do ssh / sudo, mas @Gilles deu uma boa resposta para isso.

A maneira mais fácil de eliminar os prompts de senha é fazer tudo isso como root ( sudo -i para obter um shell de root), assim você não precisa dar início a todos os comandos com sudo , e (como root ) execute ssh-copy-id hostip para instalar a chave ssh do root @ localhost em ~/.ssh/authorized_keys no hostip. Então você pode correr:

ssh hostip sfdisk -d /dev/sda | sfdisk /dev/sdc
ssh hostip partclone.ext4 -c -s /dev/sda1 -o - | 
    partclone.ext4 -r -s - -o /dev/sdc1

Se você estiver executando o ssh-agent, você só precisará digitar a senha para a chave do root uma vez no máximo (ou não, se você já a usou anteriormente).

    
por 15.11.2015 / 01:12

Tags