2008-09-16 16 views
37

¿Cuál es la mejor manera de copiar un directorio (con subdirectorios y archivos) de un servidor Linux remoto a otro servidor Linux remoto? Me he conectado a ambos usando un cliente SSH (como Putty). Tengo acceso de root a ambos.Servidor Linux remoto para copia remota del directorio del servidor Linux. ¿Cómo?

+0

Si tiene acceso al ftp del servidor remoto, también podemos usar ** wget ** para descargar como '$ wget -r --level = 9 --no-parent --reject" index.html * "ftp: // : @/ruta/a' [Referencia1] (http://kspace.in/blog/2010/02/22/copy-files-using-wget/) [Referencia2 ] (http://stackoverflow.com/a/273776/3049065) –

Respuesta

2

uso rsync para que pueda continuar si la conexión se rompe. Y si algo cambia, ¡también puedes copiarlos mucho más rápido!

Rsync funciona con SSH para que su operación de copia sea segura.

3
scp -r <directory> <username>@<targethost>:<targetdir> 
1

Bueno, la respuesta rápida sería a echar un vistazo a la página de manual 'scp', o tal vez rsync - dependiendo exactamente de lo que necesita para copiar. Si tuvieran que, incluso se podría hacer tar-sobre-ssh:

tar cvf - | ssh server tar xf - 
+0

Si la ruta es diferente en el extremo remoto, entonces: (cd $ path; tar xf -) –

5

Conectarse a una máquina

$ scp -r/ruta/a/arriba de usuario @ servidor/directorio:/ruta/a/copiar

0

Como usuario no root idealmente:

scp -r src $ host: $ ruta

Si ALR Ya disponible parte del contenido en $ host considera usar rsync con ssh como un túnel.

/Allan

54

Hay dos maneras que suelo hacer esto, tanto el uso de ssh:

scp -r sourcedir/ [email protected]:/dest/dir/ 

o, el método más robusto y más rápido (en términos de velocidad de transferencia):

rsync -auv -e ssh --progress sourcedir/ [email protected]:/dest/dir/ 

Lea las páginas man para cada comando si desea obtener más información sobre cómo funcionan.

+1

agregue '-L' para seguir los enlaces simbólicos y cópialos como directorios regulares. Este enlace tiene muchos ejemplos útiles: http://www.tecmint.com/rsync-local-remote-file-synchronization-commands/ – Adrian

1

Creo que se puede tratar con:

rsync -azvu -e ssh [email protected]:/directory/ [email protected]:/directory2/ 

(y supongo que usted está en host0 y que desea copiar desde host1 a host2 directamente)

Si lo anterior no funciona, usted podría intentar:

ssh [email protected] "/usr/bin/rsync -azvu -e ssh /directory/ [email protected]:/directory2/" 

en el presente, que funcionaría, si ya ha configurado sin contraseña de inicio de sesión SSH desde host1 a host2

2

He utilizado rdiffbackup http://www.nongnu.org/rdiff-backup/index.html porque hace todo lo que necesita sin ninguna opción de lujo. Está basado en el algoritmo rsync. Si solo necesita copiar una vez, puede eliminar el directorio rdiff-backup-data en el host de destino.

rdiff-backup [email protected]::/source-dir [email protected]::/dest-dir 

del doc:

rdiff-copia de seguridad también conserva subdirectorios, enlaces duros, archivos dev, permisos, la propiedad de UID/GID, tiempos de modificación, extendida atributos, ACL y fuentes de recursos.

que es una ventaja para las propuestas SCP -p como la opción -p no conserva todos los derechos (por ejemplo, en los directorios se establecen mal)

instalar en ubuntu:

sudo apt-get install rdiff-backup 
0

Si usted es serio acerca de querer una copia exacta, probablemente también quiera usar el modificador -p para scp, si lo está usando. He encontrado que la SCP lee desde dispositivos, y he tenido problemas con cpio, así que personalmente siempre usar alquitrán, así:

cd /origin; find . -xdev -depth -not -path ./lost+found -print0 \ 
| tar --create --atime-preserve=system --null --files-from=- --format=posix \ 
--no-recursion --sparse | ssh targethost 'cd /target; tar --extract \ 
--overwrite --preserve-permissions --sparse' 

guardo este encantamiento alrededor en un archivo con varios otros medios para copiar archivos. Este es para copiar sobre SSH; los otros son para copiar a un archivo comprimido, para copiar dentro de la misma computadora y para copiar sobre un socket TCP no cifrado cuando SSH es demasiado lento.

0

scp como se mencionó anteriormente es generalmente una mejor manera, pero no se olvide de los dos puntos en el directorio remoto especificaciones de lo contrario obtendrá una copia del directorio de origen en la máquina local.

0

Me gusta pasar tar a través de ssh.

tar cf - [directorio] | ssh [nombre de usuario] @ [nombre de host] tar xf - -C [destino en el cuadro remoto]

Este método le ofrece muchas opciones. Como debe tener root ssh deshabilitado, copiar archivos para varias cuentas de usuario es difícil ya que está iniciando sesión en el servidor remoto como un usuario normal. Para evitar esto, puede crear un archivo tar en el cuadro remoto que aún se mantenga y que preserve la propiedad.

tar cf - [directorio] | ssh [username] @ [hostname] "cat> output.alquitrán"

para conexiones lentas se pueden agregar compresión, z para gzip o bzip2 para j

alquitrán CJF - [directorio] |. ssh [nombre de usuario] @ [nombre de host] "cat> output.tar.bz2"

alquitrán czf - [directorio] | ssh [nombre de usuario] @ [nombre de host] "cat> output.tar.gz"

alquitrán czf - [directorio] | ssh [nombre de usuario] @ [nombre de host] tar xzf - -C [destino en el cuadro remoto]

0

scp hará el trabajo, pero hay una arruga: la conexión a la segunda r emote destination usará la configuración en el primer destino remoto, por lo que si usa .ssh/config en el entorno local y espera que las claves rsa y dsa funcionen, debe reenviar su agente al primer host remoto.

22

Me modificar una respuesta sugerido anteriormente:

rsync -avlzp /path/to/sfolder [email protected]:/path/to/remote/dfolder 

de la siguiente manera:

-a (de archivo) implica -rlptgoD lo por lo que la L y P anterior son superfluas. También me gusta incluir -H, que copia enlaces duros. No es parte de -a por defecto porque es caro. Así que ahora tenemos esto:

rsync -aHvz /path/to/sfolder [email protected]:/path/to/remote/dfolder 

También debe tener cuidado con las barras al final. Es posible que desee

rsync -aHvz /path/to/sfolder/ [email protected]:/path/to/remote/dfolder 

si el deseo es que el contenido de la fuente "sfolder" a aparecer en el "dfolder" destino. Sin la barra al final, se crearía un subdirectorio "sfolder" en el destino "dfolder".

+1

Esta respuesta merece más votos positivos y debería ser la aceptada. Lo único que se debe agregar es '--progress' si te gusta. – sjas

Cuestiones relacionadas