Conteúdo de transferência em partes do dispositivo de bloco sobre rede incorreta

1

/dev/sda é o único disco no sistema. Eu quero salvá-lo em uma imagem bruta em outro servidor. Não consigo fazer isso de uma só vez, porque a rede é desconectada com frequência.

É possível, por exemplo, com torrente?

    
por basin 07.11.2014 / 12:56

1 resposta

3

A maneira mais eficiente de fazer isso é retomar a transferência de onde parou.

#!/bin/bash

source_disk=/dev/sda
host=1.2.3.4
host_image=/foo/bar.img

bytes_transferred() {
  if ! ssh "$host" "test -e '$host_image'"; then
    echo 0
    return
  fi
  ssh "$host" "stat '%s' '$host_image'"
}
bytes_total() {
  echo $(( $(blockdev --getsz $source_disk) * 512 ))
}

while (( $(bytes_transferred) < $(bytes_total) )); do
  ( dd bs=1 skip=$(bytes_transferred) count=0 2>/dev/null && cat ) < $source_disk | ssh "$host" "cat >> '$host_image'"
done

Isso não foi testado, mas deve funcionar. Basicamente continua loop enquanto o tamanho do arquivo de destino é menor que o tamanho do disco local. Cada vez que o loop é reiniciado, ele inicia a transferência de onde parou anteriormente

    
por 07.11.2014 / 14:43