Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Verzeichnis mit 1 Mio Dateien per FTP kopieren - Wie?!

Frage Linux

Mitglied: Micha-80

Micha-80 (Level 1) - Jetzt verbinden

23.12.2009 um 01:15 Uhr, 11460 Aufrufe, 11 Kommentare

Hallo liebe Community,

ich suche nun schon seit einigen Tagen nach einer Lösung für mein Problem, bin jedoch immer wieder gescheitert. Nun wende mich hilfesuchend an all die Linux Profis. Ich hoffe, Ihr könnt mir helfen.

Folgendes Problem:

Ich muss ein Webprojekt von Server A zu Server B umziehen. Server A erlaubt mir einen Zugang ausschließlich per FTP (kein SCP, kein SSH, kein rsync, alles schon angefragt). Dieses Projekt hat ein Datenvolumen von ca. 300 GB. Das Kopieren funktioniert per FTP soweit auch ganz gut, bis auf ein Verzeichnis, was sich strikt weigert, korrekt kopiert zu werden.

Wenn ich das Projekt kopiere, dann kopiert er etwa 150 GB an Daten problemlos und beendet dann den Transfer ohne Fehlermeldung. Mir fehlen dann aber noch ca. 150 GB an Daten. Bei diesen Daten handelt es sich um ca. 1.000.000 Dateien, die durch den Vorgänger allesamt in ein einziges Verzeichnis abgelegt wurden. Von diesen 150GB werden mir per FTP gerade einmal 100.000 Dateien mit ca. 15 GB kopiert. Der Rest wird schlichtweg nicht mit kopiert. Ich habe keine Ahnung warum.

Folgende Kopiermöglichkeiten habe ich bereits probiert:

curlftpfs & rsync: teilweise problembehaftet, obiges Ergebnis
FTP mit mget *: obiges Ergebnis
FTP: bin nochmal per FTP jeden anfangsbuchstaben in dem ordner durchgegangen, also mget a*, mget b*, mget c*, etc. dasselbe ergebnis wie mget *
lftp mit mirror bei 5 parallelverbindungen: sehr schnell, obiges Ergebnis
ncftp mit bgget: sehr langsam, bislang nur obiges Ergebnis

Die Dateien sind auf Server A aber definitiv vorhanden, denn ich kann das Webprojekt live sehen, dort sind alle Dateien abrufbar, während bei meiner Kopie auf Server B tausende Dateien als fehlend angezeigt werden.

Fällt Euch dazu irgendwas ein? Irgendjemand noch eine Idee, was ich noch probieren könnte? Ich habe das ganze Netz durchforstet und bislang keinen ähnlichen Fall gefunden. Vielleicht habe ich aber auch nur die falschen Suchbegriffe eingegeben. Wäre Euch wirklich dankbar, weil ich mit meinem Latein echt am Ende bin.


Vielen Dank!

Micha
Mitglied: photographix
23.12.2009 um 07:00 Uhr
Olá Micha-80

das Problem kommt mir bekannt vor. Nur das es bei uns 1,8 Millionen Dateien waren dafür aber "nur" 100GB.
Bei meinem Fall hat einfach das DirectoryListing zu lange gedauert. Allein 1,10 Stunden!! hat der Server gebraucht um mir das Listing zu schicken! Was sich nach 2 Sekunden aufgrund von Änderungen (wir haben den FTP Server noch benutzt, wieder neu eingelesen wurde... Narf) Zumindest mit Windows Boardmitteln und den üblichen FTP Clients kam ich nicht ran.

Rsync kann kein FTP sprechen außer über Curlftpfs.
Das würde ich dir auch nochmal ans Herz legen. Mach nebenbei noch ein Terminal auf indem du Curlftpfs im Debugmodus laufen lässt

01.
curlftpfs ftp://dein-ftp-user:dein-pw@dein-ftp /verzeichnis-wohin-mounten -d -o -v
während du im anderen Terminal mit Rsync über Curlftpfs ziehst.
Ich konnte dann bei mir sehen. Das genau nach 15min die Verbindung von der Gegenseite gekappt wurde auf Grund von "Nichtstun" ich las ja noch das Listing ein...

Wir haben dann mit dem Provider geredet 1u1 und dieser hat uns zwei Dinge vorgeschlagen a) er zippt uns den ganzen Berg und stellt ihn uns als FTP download zur Verfügung (Vorteil: nur eine Datei, kein Listing, Nachteil: riesengroß, dauert unendlich lange zum download) b) er hat uns für einige STunden einen ssh Zugang gegeben. Sodass wir ganz fix mit Rsync ziehen konnten. Ich empfehle dir auch mit dem Betreiber des FTP's zu reden. Ev findet IHr ja eine schnellere Lösung.

Wenn das nicht geht bleibe bei Curlftpfs und debugge die übertragung - so weisst du warum der Download nicht geht und kannst dann dort ansetzen.
Bitte warten ..
Mitglied: StefanKittel
23.12.2009 um 08:09 Uhr
Zitat von photographix:er zippt uns den ganzen Berg und stellt ihn uns als FTP download zur Verfügung (Vorteil: nur eine Datei, kein Listing, Nachteil: riesengroß, dauert unendlich lange zum download)
Die ZIP Datei müßte doch deutlich kleiner als die Summe der einzelnden Dateien sein.

Viele Provider bieten die Möglichkeit, auch 1und1, über das WebFrontEnd Verzeichnisse und Dateien zu packen und entpacken.
Dies sollte die einfachste Möglichkeit sein.

Alternative:
Liste mit den Dateinamen erstellen und eine Batchdatei mit get/mget erstellen. Dann kann man "einfach" immer dort weitermachen wo er aufgehört hat ohne das Listing neu einzulesen.

Stefan
Bitte warten ..
Mitglied: DrAlcome
23.12.2009 um 09:31 Uhr
Zitat von StefanKittel:
> Zitat von photographix:er zippt uns den ganzen Berg und stellt ihn uns als FTP download zur Verfügung (Vorteil: nur
eine Datei, kein Listing, Nachteil: riesengroß, dauert unendlich lange zum download)
Die ZIP Datei müßte doch deutlich kleiner als die Summe der einzelnden Dateien sein.
Kommt ja auf die Dateien an, die dort im Verzeichnis liegen. Wenn die größtenteils schon in einem komprimierten Dateiformat vorliegen (JPG oder so), wird die ZIP-Datei nicht viel kleiner werden. Der Vorteil wäre in dem Fall nur der eingesparte Overhead und Verzeichnisindex.
Bitte warten ..
Mitglied: Micha-80
23.12.2009 um 10:56 Uhr
Hey Männer,

vielen Dank für Eure Vorschläge. Werde den Versuch mir curlftpfs noch einmal starten mit dem Debug Modus wie von Photographix vorgeschlagen.

Es handelt sich übrigens wirklich um jpg Bilder, sodass eine Kompression keine Platzersparnis bringen würde. Dem Nachteil mit der Riesendatei könnte man ja mit Splitting des Archives entgegenwirken. Ich hatte auch schon daran gedacht, den Gedanken dann allerdings verworfen, weil auf dem Zielserver zu wenig Speicherplatz zur Verfügung steht, um ein solch großes Archiv anzulegen.

Wenn alles andere nicht klappt, werde ich wohl selbst mal mit dem Hoster des Projektvorgängers reden müssen. Habe schon mehrfach den Vorgänger gebeten, seinen Hoster zur Freigabe von SCP, rsync, ssh zu bewegen (es ist ein managed server), schon allein, weil ich FTP Transfers für viel zu unsicher halte. Bislang ist der Hoster jedoch auf nichts dergleichen eingegangen.

Viele Grüße und schon einmal Danke für Eure zahlreichen Hilfestellungen

Micha
Bitte warten ..
Mitglied: manuel-r
23.12.2009 um 11:02 Uhr
Ich würde mir ein Listing der Verzeichnisse und Dateien besorgen (als Textdatei). Mit dieser Datei dann per Batch wget oder ftp füttern und jede Datei einzeln vom Server holen. Dann noch mitschreiben, welche Datei wann geholt wurde und ob der Vorgang erfolgreich war. Das dauert zwar eine Weile, aber da der Server jede Datei einzeln ausliefert sollte das funktionieren. Mit Hilfe der Logdatei am Ende quer prüfen, ob alle Dateien heruntergeladen wurden und mit Hilfe eines neuen Verzeichnislistings ob sich Dateien während/nach dem Download geändert haben.

Manuel
Bitte warten ..
Mitglied: dog
23.12.2009 um 15:04 Uhr
Wenn die Dateien in einem Webserver-lesbaren Verzeichnis liegen würde ich auch so vorgehen:

Ein kleines PHP script ala
01.
$dir = glob('*'); 
02.
foreach($dir as $file
03.
	echo 'http://example.com/'.$file."\n";
Und die Datei kann man direkt in wget füttern.

Grüße

Max
Bitte warten ..
Mitglied: Micha-80
23.12.2009 um 19:25 Uhr
Also Curlftpfs hat erneut nicht geklappt. Allerdings bin ich nun an ein DirectoryListing des Quellverzeichnisses gekommen. Ich habe diese Liste bereits bereinigt, sodass nur noch absolute Pfade je Zeile stehen. Nun stehe ich irgendwie auf dem Schlauch: wie lasse ich diese Liste mit 1 Mio Zeilen per FTP am besten abarbeiten? Hat jemand da irgendeinen Code-Schnipsel oder Link für mich? Finde dazu spontan kein Script im Netz.

Vielen Dank

Micha
Bitte warten ..
Mitglied: dog
23.12.2009 um 20:52 Uhr
01.
$man wget
01.
 
02.
       -i file 
03.
       --input-file=file 
04.
           Read URLs from file.  If - is specified as file, URLs are read from 
05.
           the standard input.  (Use ./- to read from a file literally named 
06.
           -.) 
07.
 
08.
           If this function is used, no URLs need be present on the command 
09.
           line.  If there are URLs both on the command line and in an input 
10.
           file, those on the command lines will be the first ones to be 
11.
           retrieved.  The file need not be an HTML document (but no harm if 
12.
           it is)---it is enough if the URLs are just listed sequentially.
Bitte warten ..
Mitglied: Micha-80
23.12.2009 um 21:18 Uhr
hey, wow, manchmal liegt die lösung so nah, dass man gar nicht drauf kommt. Werde es direkt mal so probieren! Vielen Dank!!
Bitte warten ..
Mitglied: Micha-80
24.12.2009 um 12:40 Uhr
Ok, so scheint es zu klappen, auch wenn es nicht der schnellste Weg ist

Falls jemand einmal ein ähnliches Problem hat, folgendes hat bei mir geklappt:

1.) Directory Listing besorgen oder aber z.B. per FlashFXP (hat bei mir funktioniert) eine Warteschlange erstellen. Das dauert zwar etwas, ging jedoch bei mir nur so. Diese Warteschlange kann man als Datei lokal auf seinem Rechner speichern.

2.) Warteschlangendatei entweder per Shell oder lokal per Notepad++ bereinigen, sodass am Ende nur noch pro Zeile ein einziger Pfad zu einer Datei steht. Darauf achten, dass in der FlashFXP Warteschlange jede Datei zweimal aufgeführt ist, einmal mit Quellpfad, einmal mit Zielpfad. Am besten lässt sich das mit Suchen&Ersetzen per regulärer Ausdrücke bereinigen.

3.) Die bereinigte Dateiliste als Textdatei speichern, zippen, auf den Zielserver kopieren, dort entzippen (das zippen dient nur zum schnelleren übertragen).

4.) Je nachdem, wieviele Wget Verbindungen man parallel nutzen möchte/kann/darf, kann man die Textdatei per Kommandozeile splitten, sodass jeder Wget Befehl einen Teil der Liste abarbeitet. Der Befehl dafür lautet:

split -l 400000 warteschlange.txt
Wobei 400000 die Anzahl an Zeilen ist, die ich pro Datei haben wollte. Die Splits heißen dann xaa, xab, xac, usw.

5.) Nun kann man mehrere Wgets parallel mit eigenen Dateilisten arbeiten lassen (vorher darauf achten, dass man sich im Zielverzeichnis befindet. Ich habe dann folgenden Befehl benutzt:

wget -b -nc --no-verbose -i /Pfad/zur/Datei/xaa --base=ftp://quellserver.com/Pfad/zum/Quellverzeichnis/ 
wget -b -nc --no-verbose -i /Pfad/zur/Datei/xab --base=ftp://quellserver.com/Pfad/zum/Quellverzeichnis/ 
wget -b -nc --no-verbose -i /Pfad/zur/Datei/xac --base=ftp://quellserver.com/Pfad/zum/Quellverzeichnis/
Das ganze wird dann im Hintergrund ausgeführt. Man kann, wenn man möchte, die Logdateien mit tail -f verfolgen. Die --base Option habe ich bei mir mit hineingekommen, da ich den /Pfad/zum/Quellverzeichnis/ aus meinen Warteschlangendateien auch noch bereinigt hatte.


Viele Grüße

Micha
Bitte warten ..
Mitglied: 16568
28.12.2009 um 18:02 Uhr
Manchmal hilft auch der gute alte Midnight Commander...


Lonesome Walker
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...