como copiar todo o sistema de arquivos raiz do linux para o novo disco rígido com ssh e tar

15

Eu preciso transferir todo um sistema de arquivos raiz do linux de um disco rígido com falha para outro computador com uma partição aberta e disponível. Eu tenho certeza que isso envolve tar e ssh , mas não me lembro exatamente como fazer isso.

Imagino que provavelmente usei um live cd no host novo / de destino para executar alguma coisa assim:

ssh user@failingharddrivehost "some tar command | piped into something else"

    
por CHK 11.05.2013 / 06:41

6 respostas

13

Use o rsync. A partir do novo host, você pode usar

rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/

Eu não tentaria envolver algo como o tar porque provavelmente não funcionaria quando houvesse arquivos quebrados.

    
por 11.05.2013 / 18:48
4

Se os dois computadores estiverem na mesma LAN (segura), recomendo uma abordagem diferente usando netcat . Isso geralmente é muito mais rápido, pois não criptografa os dados.

root@good_host$ cd good_partition; netcat -l -p 1234 | tar xvpmf -
root@bad_host$ tar -cv -f- --exclude=/proc --exclude=/sys / | netcat good_host.ip 1234

que abre uma porta de escuta 1234 na máquina boa netcat -l -p 1234 e canaliza os dados de entrada para tar para extrair (preservando mtime e permissões). O host ruim envia os dados para essa porta, também usando tar e netcat . Eu incluí alguns parâmetros --exclude , pois /proc e /sys são sistemas de arquivos virtuais e, portanto, inúteis no novo host. (especialmente o arquivo que representa sua RAM em ( /proc/kcore ) adicionará uma quantidade desnecessária de dados).

No entanto, você deve (também) considerar fazer um dd dump das partições da unidade com falha:

user@good_host$ cd good_partition; netcat -l -p 1234 > dump_of_bad_partition_1.dd
root@bad_host$ dd if=/dev/sda1 | netcat good_host.ip 1234

em que você teve que adotar /dev/sda1 no dispositivo correto. Faça isso com outras partições na unidade com falha também.

Com esse despejo, você tem certeza de que não perdeu nenhum metadado importante (como ACLs) que tar não capturará.

    
por 11.05.2013 / 10:01
2

Por que você combina com o diretório excluindo? Não é melhor montar o mesmo dispositivo em outro diretório? kernels modernos permitem este caminho. por exemplo, você montou

/ dev / sda1 como / então faça: mkdir / CLEANROOT mount / dev / sda1 / CLEANROOT

depois disso você tem: / dev / sda1 como / / dev / sda1 como / CLEANROOT

Este é o mesmo sistema de arquivos visível em dois lugares, mas o / CLEANROOT não tem montagens aditivas. Então você pode tar ou rsync / CLEANROOT sem nenhuma exclusão ao invés de copiar / com exclusões.

É claro que você deve copiar outras partições de dados quando tiver alguma.

Copiar partições é o primeiro passo para a recuperação do servidor. outra é setores de inicialização regenerados, caso contrário, o sistema não inicializará a partir do disco copiado. Útil é o modo de recuperação quando você inicializa a partir do CD de instalação / resgate ou pendrive.

    
por 29.04.2014 / 13:44
1

Você tem acesso físico ao host com falha?

Se você fizer isso, inicialize a partir de um live CD. Então use:

  • despejo (descarrega / restaura sistemas de arquivos inteiros, incluindo suas permissões).
  • Tar com / dev excluído. Você pode combinar isso com a saída para std_out e tubulação que, embora netcat
    A sintaxe de exclusão é: tar --exclude='/dev' .
  • ou rsync com as mesmas exclusões. Por exemplo, rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • ou use dd assim: nc -l 4242 | gunzip | cat > my_full_disk_backup_of_PC_named_foo dd if=/dev/sda of=- bs=1M | gzip | nc -p 4242 name_of_the_destination

Se você não conseguir inicializar a partir de um CD ao vivo, algumas das soluções acima permanecerão as mesmas, mas:

  1. Alguns arquivos podem estar em uso / bloqueados.
  2. Certifique-se de excluir não apenas / dev / mas também / proc /.
    Por exemplo. %código%
por 11.05.2013 / 12:13
1

Aqui está uma descrição de como copiar arquivos usando tar e ssh . Basicamente, você executaria um dos itens a seguir, dependendo se você deseja copiar local - > remoto ou remoto - > local:

tar cf - files... | ssh remotehost -c 'cd /destination && tar xvf -'

ssh remotehost -c 'cd /destination && tar cf - files' | tar xvf -
    
por 11.05.2013 / 13:45
0

você deve considerar o uso do rsync

o seguinte comando assume duas coisas:

  1. você está no sistema com disco rígido com falha
  2. a nova partição tem uma instalação mínima do linux com o ssh ativado.

rsync / new_partition:/wherever/you/want/

Nota: o trailing / é importante, caso contrário, seus arquivos terminarão em um nível de diretório acima

    
por 11.05.2013 / 09:04