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


18

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

Estou imaginando provavelmente usando um CD ao vivo no novo host / destino para executar algo como isto:

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


fora do assunto. não é uma questão de programação. mas tente #ssh user@failingsys "tar cfz - /" > oldsys.tar.gz

Você quer tomar cuidado para não tar / dev / (por exemplo, / dev / random, / dev / sdX, ...). Ditto / proc /
Hennes

Respostas:


19

Use rsync. No 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 tar, porque provavelmente não funcionará quando houver arquivos quebrados.


Acabou usando o rsync, como descrito acima por etagenklo e @Hennes. A migração correu bem. Só preciso consertar o grub, mas isso não deve ser tão ruim.
CHK

8
Eu adicionaria -AHX como flags ao rsync, a fim de preservar acls, xattrs e hardlinks, resultando em uma cópia ainda mais exata do fs original.
Alexander Remesch

5
Eu adicionaria -x para ignorar itens que não estão no sistema de arquivos raiz, para que você possa pular os argumentos --exclude para vários caminhos.
Alex

4

Se os dois computadores estiverem na mesma LAN (segura), recomendo uma abordagem diferente 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 boa máquina netcat -l -p 1234e canaliza os dados recebidos tarpara extrair (preservando mtime e permissões). O host incorreto envia os dados para esta porta, também usando tare netcat. Incluí alguns --excludeparâmetros, como /proce /syssã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 dddespejo 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

onde você tinha que adotar /dev/sda1o dispositivo certo. 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 tarnão será capturado.


3

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

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

Depois disso, você terá: / dev / sda1 como / / dev / sda1 como / CLEANROOT

Este é o mesmo sistema de arquivos visível em dois locais, mas / CLEANROOT não possui montagens adicionais. Em seguida, você pode tar ou rsync / CLEANROOT sem nenhuma exclusão, em vez de copiar / com exclusões.

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

A cópia da partição é o primeiro passo para a recuperação do servidor. outro é regenerar setores de inicialização; caso contrário, o sistema não inicializa a partir do disco copiado. Útil é o modo de recuperação quando você inicializa a partir do CD de instalação / resgate ou pendrive.


1

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

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

  • despejo (despeja / 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ções que, embora netcat
    O excluir sintaxe é: 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 exemplotar --exclude='/dev' --exclude='/proc'

Sim, tenho acesso físico (e raiz) aos dois hosts. Vou tentar com o rsync. o netcat caiu pela caixa com falha por motivos desconhecidos. o sistema de arquivos de destino não deseja ser montado. falha com: #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
CHK


0

você deve considerar o uso do rsync

o comando a seguir assume duas coisas:

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

rsync / new_partition:/wherever/you/want/

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


O OP provavelmente deseja usar o -aparâmetro (e talvez o -A), pois preserva horários, propriedade, links simbólicos (e talvez ACLs) etc. e o -e sshparâmetro, pois os dados devem ser transferidos para outro computador. Entãorsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.