La forma más rápida de copiar carpetas que contienen muchos archivos a través de SSH


13

¿Cuál es la mejor manera de duplicar archivos en el servidor a través de ssh?

En mi caso: estoy hablando de duplicar la tienda magento. (15000 archivos ~ 50MB)

cp -a source destination

Está tomando horas ... (en mi caso el servidor es 2.4 Xeon, 2GB RAM)

Respuestas:


18

Una palabra: rsync.

Tenga en cuenta que si está en un enlace lento, o el servidor está bajo una gran carga, la herramienta utilizada para copiar no será el cuello de botella, y cualquier forma de copia será lenta de todos modos.

Esto debería darle el uso básico para copiar entre su computadora local y el servidor remoto: http://oreilly.com/pub/h/38

Para copiar desde una computadora local a un servidor remoto (por supuesto, debe reemplazar las rutas, el nombre de usuario y la dirección de host):

rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
  • -a archivo
  • -v verboso
  • -z comprimir
  • -e ssh "usar un túnel SSH"

Para copiar en la otra dirección, cambie las rutas (primero es desde , segundo es hacia ):

rsync -avz -e ssh remoteuser@remotehost.somewhere.example.com:/path/on/server /path/on/local/computer

Pero rsync es útil incluso para copiar cosas en el mismo servidor:

rsync -av /path-to/copy/from /path_to/copy/to

2
Tenga en cuenta que @Piskvor dejó la -zopción fuera para la copia local, ya que agrega una sobrecarga innecesaria. En mi humilde opinión, solo debe usar -zcuando use rsync en un enlace de red lento. Si copia grandes cantidades de datos sobre 100Base-T, puede estar bien sin eso -z. Con una conexión de red rápida, el uso de la compresión puede vincular su CPU y privar a otros procesos.
tomlogic

@tomlogic: Buen punto: en otras palabras, no lo use -zpara copiar o copiar LAN dentro de una máquina; prueba con y sin -zcopia a través de Internet (uno u otro puede ser más rápido, dependiendo de muchas cosas).
Piskvor salió del edificio el

1
También dejaría de lado la compresión si sabe que sus archivos ya están comprimidos, como sincronizar un árbol de carpetas lleno de archivos JPEG, ya que no hay nada que ganar.
salto de línea el

Nota: -e sshahora es el predeterminado para los hosts remotos, por lo que no es necesario pasar la opción explícitamente.
Piskvor salió del edificio el

3

Otra palabra: scp

scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server

Para ofertas únicas, scp es útil. Si se trata de muchos archivos, entonces rsync es una buena idea. Si se cae una conexión, rsync puede continuar donde se quedó.

Sabía que rsync tenía compresión ( -z), y acabo de enterarme de que scp también ( -C).


Bueno, IIRC están utilizando los algoritmos de compresión de SSH, al menos para operaciones de red.
Piskvor salió del edificio el

0

En su configuración, rsync es probablemente suficiente ... pero, por ejemplo, si hay muchos archivos pequeños, puede ser más rápido manipular los archivos primero que transferirlos luego a través de rsync. Esto se debe a que la transferencia del propietario, las marcas de tiempo y los permisos es a veces más pesada que el archivo en sí mismo si el archivo es pequeño. Tar combinará toda esa información en un archivo y rsync copiará bloques más grandes.

O incluso mejor, si no se necesita seguridad, use tar y nc:

En el destino, prepara un demonio receptor, descomprime y descomprime:

nc -l -p 12345 | pigz -d | tar xvf - 

En la fuente, alquila todo, comprime en paralelo y envíalo al destino:

tar cvf - ./ | pigz | nc host 12345
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.