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


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 como isso:

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


13


origem


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, ...). Idem / proc / - Hennes


Respostas:


Use o rsync. 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.


12



Acabou usando o rsync, conforme descrito acima por etagenklo e @Hennes. A migração correu bem. Só precisa consertar o grub, mas isso não deveria ser tão ruim. - CHK
Eu adicionaria -AHX como sinalizadores para rsync também, a fim de preservar acls, xattrs e hardlinks, resultando em uma cópia ainda mais exata dos fs originais. - Alexander Remesch
Eu adicionaria -x para ignorar itens que não estão no sistema de arquivos raiz, então você pode ignorar os argumentos --exclude para vários caminhos. - Alex


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 boa máquina netcat -l -p 1234 e canaliza os dados recebidos para tar extrair (preservando mtime e permissões). O host ruim envia os dados para essa porta, também usando tar e netcat. Eu incluí alguns --exclude parâmetros, como /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) irá adicionar uma quantidade desnecessária de dados).

No entanto, você deve (também) considerar fazer uma dd despejo 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ê teve que adotar /dev/sda1 para o 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 tar não vai capturar.


4





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

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

  • despejar  (despejo / restaura sistemas de arquivos inteiros, incluindo suas permissões).
  • Alcatrão 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 o mesmo exclui. Por exemplo.
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • ou usar dd como isso:
    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 live CD, 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. tar --exclude='/dev' --exclude='/proc'

1



Sim, tenho acesso físico (e raiz) a ambos os hosts. Indo tentar com o rsync. o netcat travou pela caixa defeituosa por razões desconhecidas. 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


Aqui está uma descrição de como copiar arquivos usando tar e ssh. Basicamente, você executaria um dos seguintes, 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 -

1





você deve considerar o uso do rsync

o comando seguinte pressupõe 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 vão acabar em um nível de diretório acima


0



O OP provavelmente quer usar o -a parâmetro (e talvez o -A), uma vez que preserva tempos, propriedade, links simbólicos (e talvez ACLs) etc. -e ssh parâmetro, como os dados devem ser transferidos para outro computador. assim rsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint - mpy


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 quaisquer exclusões em vez de copiar / com exclusões.

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

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.


0