cómo copiar todo el sistema de archivos raíz de Linux en el nuevo disco duro con ssh y tar

18

Necesito transferir un sistema de archivos raíz de Linux completo de un disco duro defectuoso a otra computadora con una partición abierta y disponible. Estoy bastante seguro de que esto implica tary ssh, pero no puedo recordar exactamente cómo hacerlo.

Probablemente estoy imaginando un CD en vivo en el host nuevo / objetivo para ejecutar algo como esto:

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

CHK
fuente
sin relación. No es una pregunta de programación. pero intentessh user@failingsys "tar cfz - /" > oldsys.tar.gz
Desea tener cuidado de no tar / dev / (por ejemplo, / dev / random, / dev / sdX, ...). Ídem / proc /
Hennes

Respuestas:

19

Use rsync. Desde el nuevo host, puede usar

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

No intentaría involucrar algo como tar porque probablemente no funcionará cuando haya archivos rotos.

etagenklo
fuente
Terminé usando rsync, como se describe anteriormente por etagenklo y @Hennes. La migración fue bien. Solo necesito arreglar grub, pero eso no debería ser tan malo.
CHK
8
También agregaría -AHX como indicadores a rsync para preservar acls, xattrs y enlaces duros, lo que da como resultado una copia aún más exacta del fs original.
Alexander Remesch
55
Agregaría -x para ignorar los elementos que no están en el sistema de archivos raíz, luego puede omitir los argumentos --excluir para varias rutas.
Alex
4

Si ambas computadoras están en la misma LAN (segura), recomiendo usar un enfoque diferente netcat. Esto suele ser mucho más rápido ya que no cifra los datos.

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 un puerto de escucha 1234 en la buena máquina netcat -l -p 1234y canaliza los datos entrantes tarpara extraer (preservando mtime y permisos). El host incorrecto envía los datos a este puerto, también usando tary netcat. I incluido algunos --excludeparámetros, como /procy /sysson sistemas de archivos virtuales y por lo tanto inútil en el nuevo host. (especialmente el archivo que representa su RAM en ( /proc/kcore) agregará una cantidad innecesaria de datos).

Sin embargo, debería (también) considerar hacer un ddvolcado de las particiones de la unidad que falla:

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

donde tuvo que adoptar /dev/sda1el dispositivo correcto. Haga eso también con otras particiones en la unidad que falla.

Con ese volcado, está seguro de que no se perdió ningún metadato importante (como las ACL) que tarno capturará.

mpy
fuente
3

¿Por qué se combina con el directorio excluyente? ¿No es mejor idea montar el mismo dispositivo en otro directorio? Los núcleos modernos lo permiten de esta manera. por ejemplo, has montado

/ dev / sda1 como / then do: mkdir / CLEANROOT mount / dev / sda1 / CLEANROOT

después de esto tienes: / dev / sda1 como / / dev / sda1 como / CLEANROOT

Este es el mismo sistema de archivos visible con dos lugares, pero / CLEANROOT no tiene montajes aditivos. Luego puede tar o rsync / CLEANROOT sin exclusiones en lugar de copiar / con exclusiones.

Por supuesto, debe copiar otras particiones de datos cuando tenga algunas.

Copiar la partición es el primer paso para la recuperación del servidor. otro es regenerar sectores de arranque, de lo contrario el sistema no arrancará desde el disco copiado. Es útil el modo de rescate cuando arranca desde el CD de instalación / rescate o pendrive.

Znik
fuente
1

¿Tiene acceso físico al host que falla?

Si lo hace, arranque desde un CD en vivo. Luego use:

  • dump (volcado / restaura sistemas de archivos completos, incluidos sus permisos).
  • Tar con / dev excluido. Esto se puede combinar con la salida a std_out y tuberías que aunque netcat
    El excluyen sintaxis es: tar --exclude='/dev'.
  • o rsync con las mismas exclusiones. P.ej
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • o use dd así:
    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

Si no puede iniciar desde un CD en vivo, algunas de las soluciones anteriores seguirán siendo las mismas, pero:

  1. Algunos archivos pueden estar en uso / bloqueados.
  2. Asegúrese de excluir no solo / dev / sino también / proc /.
    P.ejtar --exclude='/dev' --exclude='/proc'
Hennes
fuente
Sí, tengo acceso físico (y raíz) a ambos hosts. Voy a probar con rsync. el netcat se estrelló por la caja defectuosa por razones desconocidas. el sistema de archivos de destino no quiere ser montado. falla con: #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
CHK
0

deberías considerar usar rsync

El siguiente comando supone 2 cosas:

  1. estás en el sistema con un disco duro defectuoso
  2. La nueva partición tiene una instalación mínima de Linux con ssh habilitado.

rsync / new_partition:/wherever/you/want/

Nota: el final / es importante, de lo contrario sus archivos terminarán en un nivel de directorio superior

MelBurslan
fuente
El OP probablemente quiera usar el -aparámetro (y quizás el -A), ya que conserva los tiempos, la propiedad, los enlaces simbólicos (y quizás los ACL), etc. y el -e sshparámetro, ya que los datos deben transferirse a otra computadora. Entoncesrsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy