Anzeige:
Ergebnis 1 bis 1 von 1

Thema: Skript: SCP mit Bandbreitenbeschränkung und Fortsetzung bei Abbruch

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444

    Skript: SCP mit Bandbreitenbeschränkung und Fortsetzung bei Abbruch

    Ich hatte hier gerade ein Problem:

    Ich habe einen Server auf den ich nur mit scp Dateien draufkopieren kann, ausserdem hab ich nur sehr geringe Uploadgeschwindigkeit(ADSL halt) und muss mir den Anschluss noch mit zig anderen Benutzern teilen. Root-Zugriff hab' ich auch nicht.

    Deswegen hab' ich mir ein Script geschrieben das eine grosse Datei in kleine Fragmente zerlegt(split), die Fragmente auf Existenz und Integrität überprüft(md5sum) und nur die noch nicht kopierten Fragmente überträgt.

    Was es für andere Tools gibt die das besser können, wenn die denn einsetzbar sind:
    - rsync (ssh, rsync, an beiden Seiten wird rsync benötigt)
    - wget (ftp, http, aber nur download)
    - wput (ftp upload)

    Voraussetzungen:
    - Passwortloser Zugriff auf den Ziel-SSH Rechner ist eingerichtet(authorized_keys2)
    - Diese Programme sind vorhanden: split, md5sum

    Anmerkung:
    - Das Progrämmchen ist stark optimierungsbedürftig schon allein wegen der vielen ssh Zugriffe die da stattfinden, mir reichts aber im Moment...

    Code:
    #!/bin/bash
    
    SPEED="5"		# Speed in KB/s
    BLOCKSIZE="100000"	# Block Size in Bytes
    
    TMPDIR="/tmp/splitcopy-tmp-$RANDOM"
    
    if [ $# -lt 3 ]
    then	
    	echo "Usage: $(basename $0) <FILE> <SSH-Target(user@host/ssh-alias)> <Destination directory>"	
    	exit 1
    fi
    
    FILE=$1
    SSHTARGET=$2
    DESTDIR=$3
    
    mkdir -p $TMPDIR
    cp $1 $TMPDIR
    cd $TMPDIR
    
    md5sum $FILE >$FILE.md5sum
    split --bytes=$BLOCKSIZE --suffix-length=4 $FILE ${FILE}__
    
    for partfile in ${FILE}__*
    do 
    	md5sum $partfile >$partfile.md5sum
    done
    
    ssh $SSHTARGET mkdir -p $DESTDIR
    
    for partfile in ${FILE}__????
    do
    
    	MD5SUMME_OK=0
    	
    
    	echo "Verarbeite Teildatei $partfile ..."
    	
    	while [ $MD5SUMME_OK == 0 ]
    	do
    
    		DATEI_VORHANDEN=0
    
    		MSG=$(ssh $SSHTARGET "( if [ -f $DESTDIR/$partfile ]; then echo \"$partfile existiert\"; else echo \"$partfile nicht vorhanden\" ;fi )")
    		echo $MSG| grep -q "existiert" && DATEI_VORHANDEN=1
    
    		while [ $DATEI_VORHANDEN == 0 ]
    		do
    			echo "  uebertrage Datei"
    			scp -l $SPEED $partfile $SSHTARGET:$DESTDIR
    			
    			MSG=$(ssh $SSHTARGET "( if [ -f $DESTDIR/$partfile ]; then echo \"$partfile existiert\"; else echo \"$partfile nicht vorhanden\" ;fi )")
    			echo $MSG| grep -q "existiert" && DATEI_VORHANDEN=1
    		done
    
    		echo "  Datei am Zielort gefunden"
    
    		echo "  Pruefe Dateiintegritaet..."
    	        ssh $SSHTARGET cd $DESTDIR \; md5sum $partfile>actual.md5sum
    
    		if md5sum --check actual.md5sum  >/dev/null 2>&1
    		then 
    			echo "    MD5 Summe OK"
    		     	MD5SUMME_OK=1
    		else 
    			echo "    MD5 Summe falsch, Fragment wird geloescht"
    			ssh $SSHTARGET cd $DESTDIR \; rm $partfile
    		fi
    	done
    done
    
    echo "Setze Fragmente zusammen..."
    ssh $SSHTARGET cd $DESTDIR \; cat ${FILE}__???? \>${FILE}
    
    echo "Pruefe Gesamt-MD5-Summe..."
    ssh $SSHTARGET cd $DESTDIR \; md5sum $FILE >whole.md5sum
    
    md5sum --check whole.md5sum
    
    rm -rf $TMPDIR
    ssh $SSHTARGET cd $DESTDIR \; rm ${FILE}__????
    Geändert von fork (04-05-2005 um 13:28 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •