web-dev-qa-db-fra.com

Multiplexage inverse pour accélérer le transfert de fichier

J'ai envoyé une grande quantité de données d'une machine à une autre. Si j'envoie avec RSYNC (ou une autre méthode), il ira à un 320 kb/secte. Si j'apprimions deux ou trois transferts à la fois, chacun ira à 320, et si je fais quatre à la fois, ils maximums le lien.

Je dois être capable d'envoyer des données le plus rapidement possible, alors j'ai besoin d'un outil capable de faire un multiplexage inverse avec des transferts de fichiers. J'ai besoin d'une solution générale, donc en cours d'exécution sur la machine source et de les adapter à l'autre extrémité n'est pas pratique. J'ai besoin de cela pour travailler de manière automatisée.

Y a-t-il un outil qui fait cela ou dois-je faire le mien? L'expéditeur est CentOS, le destinataire est FreeBSD.

19

Il y a quelques outils qui pourraient fonctionner.

  • LFTP - prend en charge FTP, HTTP et SFTP. Prend en charge à l'aide de plusieurs connexions pour télécharger un fichier unique. En supposant que vous souhaitez transférer un fichier de RemoteServer sur LOCALSERVER, installez LFTP sur LOCALALERVER et exécutez:

    lftp -e 'pget -n 4 sftp://[email protected]/some/dir/file.ext'

    Le '-N 4' est le nombre de connexions à utiliser en parallèle.

  • Ensuite, il existe les nombreux outils "Télécharger Accelerator", mais ils ne prennent généralement en charge que HTTP ou FTP, que vous ne souhaitez peut-être pas avoir à configurer sur le serveur distant. Quelques exemples sont Axel , ARIA2 , et Prozilla

10
davr

Si vous avez quelques et gros fichiers, utilisez lftp -e 'mirror --parallel=2 --use-pget-n=10 <remote_dir> <local_dir>' <ftp_server>: vous téléchargerez 2 fichiers avec chaque fichier divisé en 10 segments avec un total de 20 connexions FTP à <ftp_server>;

Si vous avez une grande quantité de petits fichiers, utilisez lftp -e 'mirror --parallel=100 <remote_dir> <local_dir>' <ftp_server>: Vous téléchargerez 100 fichiers en parallèle sans segmentation, puis. Au total, 100 connexions seront ouvertes. Cela peut exacerber les clients disponibles sur le serveur ou vous permettre de vous faire bannir sur certains serveurs.

Vous pouvez utiliser --continue Pour reprendre le travail :) et le -R Option à télécharger au lieu de télécharger (puis changer d'argument à <local_dir> <remote_dir>).

8
Mário Melo Filho

Comment vos données sont-elles structurées? Quelques grands fichiers? Quelques grands répertoires? Vous pouvez éteindre plusieurs instances de RSYNC sur des branches spécifiques de votre arborescence de votre répertoire.

Tout dépend de la structure de vos données source. Il existe des tonnes d'outils UNIX pour trancher, des dés et des dossiers de réassemblage.

1
Geoff Fritz

Si vous pouvez configurer la connexion SSH sans mot de passe, cela ouvrira 4 connexions SCP simultanées (-N) avec chaque connexion de connexion 4 fichiers (-L):

trouver . -Type f | XARGS -L 4 -N 4/TTMP/SPP.SH User @ Host: Chemin

Fichier /tmp/scp.sh:

#!/bin/bash

#Display the help page
function showHelp()
{
    echo "Usage: $0 <destination> <file1 [file2 ... ]>"
}

#No arguments?
if [ -z "$1" ] || [ -z "$2" ]; then
    showHelp
    exit 1
fi

#Display help?
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
    showHelp
    exit 0
fi

#Programs and options
SCP='scp'
SCP_OPTS='-B'
DESTINATION="$1";shift;

#Check other parameters
if [ -z "$DESTINATION" ]; then
    showHelp
    exit 1
fi

echo "$@"

#Run scp in the background with the remaining parameters.
$SCP $SCP_OPTS $@ $DESTINATION &
1
user67730

FTP utilise plusieurs connexions pour les téléchargements. Si vous pouvez configurer un canal sécurisé pour FTP sur un VPN ou FTP sur SSH , vous devriez être en mesure de maximiser votre lien réseau. (Notez que des considérations spéciales sont nécessaires pour FTP sur SSH - voir le lien.)

[~ # ~] FTPS [~ # ~ ~] (FTP sur SSL) pourrait également faire ce dont vous avez besoin.

Vous pouvez également utiliser un client SFTP prenant en charge plusieurs connexions, mais je ne sais pas si SFTP prend en charge plusieurs connexions pour un seul fichier. Cela devrait faire ce dont vous avez besoin la plupart du temps, mais peut ne pas vous donner le débit maximum lorsque vous ne devez transférer qu'un grand fichier.

0
rob

Je connais un outil capable de transférer des fichiers dans des morceaux. L'outil est appelé package/port de RTorrent 'disponible sur les deux hôtes;) Les clients BitTorrent réservent souvent l'espace disque avant le transfert et les morceaux sont écrits directement des sockets sur le disque. De plus, vous pourrez examiner tous les états des transferts dans un joli écran NCurses.

Vous pouvez créer des scripts de bash simples pour automatiser la création de fichier "* .torrent" et SSH une commande à la machine distante afin qu'elle le télécharge. Cela a l'air un peu moche, mais je ne pense pas que vous trouverez une solution simple sans se développer :)

0
kolypto