Datentransfer von kleinen Files langsam?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Schließe mich der Antwort von bikerfan73 an.

Darum sollte man vor dem Übertragen am besten die Daten zippen. Man kann auch das Zip-Archiv direkt auf dem Zielverzeichnis erstellen, das geht dann auch schneller als tausende einzelne Files einzeln zu transferieren.

Mark Berger  08.02.2023, 08:22

Stimmt aber das ist ja keine Option für viele Fälle - sowas wäre maximal ein Workaround für ein Backup...

1
ZaoDaDong  08.02.2023, 08:23
@Mark Berger

Das ist immer eine Option, solange man genug Platz auf der Platte hat. Am Zielort kann das Archiv ja dann direkt entpackt und gelöscht werden.

1
Mark Berger  08.02.2023, 08:48
@ZaoDaDong

Das macht nur keinen Sinn da dieser Prozess dann noch viel langsamer ist.

Du packst ja die Daten erst in ein Archiv und entpackst diese dann. Du musst also den ganzen Overhead erst wieder machen damit die Dateien im Dateisystem eingebunden sind.

Jetzt hast du aber schon zeit verschwendet um das Archiv zu erstellen und dann kommt noch dazu, dass du jetzt Daten auf die Platte schreibst von der Gelesen wird, was nochmal langsamer ist als von einer zu lesen und auf eine andere zu schreiben!

0
ZaoDaDong  08.02.2023, 08:50
@Mark Berger

Ab einer gewissen Anzahl von Dateien ist das unter Windows immer noch schneller als die Dateien einzeln direkt zu kopieren. Und ein Zip-Programm hat man so gut wie immer zur Hand und es ist leicht zu bedienen. Daher ist das für den Fall in der Fragestellung eine nach meiner Ansicht gute Lösung.

0
Mark Berger  08.02.2023, 08:52
@ZaoDaDong

Sehe ich für ein Backup schon ein aber nicht wenn ich das nachher entpacke denn der Dateisystemoverhead ändert sich ja nicht dadurch.

0
AlephSam 
Fragesteller
 08.02.2023, 08:24

Top, das Zippen direkt auf das Ziellaufwerk geht wirklich schneller, Danke! CPU Last ist halt entsprechen hoch, logisch.

1
ZaoDaDong  08.02.2023, 08:28
@AlephSam

Noch als Zusatz-Tip: Wenn du 7-zip verwendest, dann reicht es als Kompressionsmethode einfach "speichern" auszuwählen. Dann wird gar nicht komprimiert. Das beschleunigt den Prozess in der Regel, außer vielleicht wenn du Daten überträgst, die sehr sehr hohes Kompressionspotential haben (Textdateien, Exceltabellen usw.)

1

Naja beim Anlegen einer Datei passiert recht viel:

  1. Prüfen wo der nächste freie Speicherblock mit ausreichender Größe ist
  2. Eintrag im Dateisystem für die Datei erstellen
  3. Datei selber schreiben
  4. Eintrag im Dateisystem fertigstellen (zB Fixup-Bytes in NTFS)
  5. Eintrag im Ordner-Eintrag für die Datei erstellen

Du siehst also, dass einige Schritte nötig sind um eine Datei zu erstellen und in einem Ordner einzufügen.

Diesen Overhead hat man bei jeder Datei - bei kleinen Dateien ist der Overhead im Vergleich zur Kopierzeit aber prozentuell gesehen viel größer und darum ist das Kopieren vieler kleiner Dateien viel langsamer.

Dazu kommen eventuell noch weitere Schritte wenn Dateisystemerweiterungen angelegt ein eingehängt werden müssen, etc.

Woher ich das weiß:Berufserfahrung
AlephSam 
Fragesteller
 08.02.2023, 08:28

Gibt es Möglichkeiten das zu optimieren, zB. mit Linux oder Programmen etc.?

0
Mark Berger  08.02.2023, 08:44
@AlephSam

Nur bis zu einem bestimmten Grad. Die Ausgaben müssen ja erledigt werden.

Eine Festplatte bzw. SSD kennt weder Dateinamen noch Ordner. Alles was diese Geräte verstehen sind Adressen von Speicherblöcken.

Das Dateisystem ist quasi unser Mittelsmann der uns als User Ordner und Dateinamen sowie diverse andere Dinge gibt. Intern muss das Dateisystem aber wissen welche Datei auf welchem Speicherblock liegt.

Willst du also zB die Datei C:\Users\Du\Desktop\Referat.docx lesen, muss das Dateisystem erst mal nachsehen auf welchen Speicheradressen diese Datei liegt. Dazu schaut es im Dateisystemkatalog nach der auch wieder aus einigen Teilen besteht um bekommt dann zB LBA 1587656 - 1587984.

Eigentlich ist es noch etwas Komplexer da Dateisysteme mit Clustern von Adressen Arbeiten und daher auch noch die Cluster- zur LBA-Adresse ausgelöst werden muss wenn man Daten von der HDD/SSD anfordert.

Du siehst also das Lesen und Anlegen einer Datei hat so viele kleine Zwischenschritte die sein müssen.

Man kann natürlich versuchen das in Gruppen zu machen oder aus anderer Weise optimieren aber so dramatisch schneller wird es nicht da jedes Programm diesen Overhead auf die ein- oder andere Weise zu bewältigen hat.

Sprich du hast versch. Schritte die gemacht werden müssen natürlich gilt das was ich gerade über das Lesen der Datei sagte auch für das Lesen des Ordner-Eintrags am Ziel-Dateisystem oder das Lesen des Dateisystemkatalogs selber, etc.

Wenn wir also den ganzen Prozess vom Lesen bis zum schreiben der Datei so detailliert betrachten dann sind es nicht 4 zusätzliche Schritte sondern eher 20.

Was willst du denn genau erreichen? Soll das ein Backup sein? Wie oft musst du die Daten kopieren?

1
AlephSam 
Fragesteller
 08.02.2023, 08:47
@Mark Berger

Ging mir nur um das Verständnis, so oft mache ich das nicht und Backup läuft im Hintergrund. Danke!

0
Mark Berger  08.02.2023, 08:51
@AlephSam

Bei einem Backup wäre eventuell WSL + rsync eine Option.

Du willst ja nicht immer alles kopieren sondern nur was neuer ist dem Backup hinzufügen.

Alternativ dazu kannst du die Daten wie ZaoDaDong sagte zippen. Das spart dir dann auch Speicherplatz. Außerdem hast du so den Dateisystemoverhead nur beim Lesen der Daten aber nicht beim Anlegen da du alles in eine Datei schreibst.

Dadurch ist das schneller!

1

Ist ja eigentlich normal. Das "Problem" stellt sich mir tagtäglich bei der Arbeit.

MarkBerger hat ja schon geschrieben, dass eine kopieren nicht einfach nur ein kopieren ist. Bei einem Kopiervorgang wird jede einzelne Datei angefasst und neu geschrieben plus entsprechende Einträge.

Stell Dir die Netzverbindung als Autobahn vor, auf der Du 130 fahren kannst. Kopierst Du eine Datei mit 130 GB, dann entspricht das 130km. Du fährst los und kommst nach ca. 1 Stunden an.

Jetzt stell Dir vor, Du musst die 130km nicht am Stück fahren, sondern 130 Stücke a 1km. Du fährst also also los, fährst einen km, bremst wieder ab, fährst wieder los usw. usf. und das 130 Mal.

Es ist die gleiche Autobahn mit der gleichen Höchstgeschwindigkeit, aber Du wirst die Strecke nie in einer Stunde schaffen.

Einfachster Umgehungsweg: Das Kleinzeug vorm kopieren zippen.

Woher ich das weiß:eigene Erfahrung

Windows ist der Flaschenhals. Windows aktualisiert das Inhaltsverzeichnis der Platte nach dem Kopieren für jede einzelne Datei. Bei einer großen Datei fällt der Vorgang nicht ins Gewicht. Bei vielen kleinen schon. Es gibt Programme, die hier anders vorgehen und dadurch schneller kopieren.

AlephSam 
Fragesteller
 08.02.2023, 04:49

Danke, kannst du ein Programm empfehlen?

0
bikerfan73  08.02.2023, 04:58
@AlephSam

Habe länger keins gebraucht. Ich hatte mal ein Freeware Tool benutzt, das gut funktionierte. Ultracopy glaube ich hieß es.

1