Warum dauert das Kopieren derselben Datenmenge länger, wenn sie auf mehrere separate Dateien verteilt ist?

12

Ich habe festgestellt, dass das Kopieren von Daten im Wert von 24 MB von einem Ordner in einen anderen etwa 30 Sekunden dauerte, da (ich nehme an, dies ist der Grund) mehr als 1.000 separate Dateien vorhanden waren. Das Kopieren von 24 MB sollte nicht so lange dauern. Warum unterscheidet sich die Anzahl der Dateien?

Ich verwende Windows 7 auf einem MacBook (4 GB RAM, Intel (R) Core (TM) 2 Duo-CPU P7450 bei 2,13 GHz, 32-Bit-Betriebssystem).

BEARBEITEN: NTFS ist das auf dem Laufwerk verwendete Dateisystem

Trindaz
quelle

Antworten:

5

Die Festplatte hat keine genaue Übertragungsrate, sie hängt von der ordnungsgemäßen Wartung ab, dh sie ist weder fragmentiert noch weist sie schlechte Sektoren usw. auf.

Wenn es sich bei der Festplatte um SATA 2 handelt und es sich um dieselbe Partition handelt, ist dies nur die Geschwindigkeit der Datenübertragung.

Wenn sich zwei Partitionen auf derselben Festplatte befinden, ist diese Datenübertragung zwischen Bus und Motherboard nicht erforderlich, dh sie wird in den Puffer geladen. (hängt dann von der Größe des Festplattenpuffers ab.)

Für jede kopierte Datei muss das System jedoch seinen Index in der MFT (Master File Table) der Festplatte behalten. Dies verlangsamt den Kopiervorgang, wenn Sie viele Dateien kopieren. Wenn Sie über ein Antivirenprogramm verfügen, wird jede kopierte Datei gescannt. Wenn Sie die Indizierung von Microsoft-Suchdateien (oder einen anderen Dateiindizierungsdienst) aktiviert haben, ist das Ergebnis schlechter.

Ich denke, es muss viele andere Gründe geben, warum das Kopieren vieler Dateien langsamer ist, aber diese sollten die Hauptgründe sein.

Realcool
quelle
Durch Deaktivieren des Antivirenprogramms wurde der Extrakt 10x schneller. Danach wurden die Dateien nach Viren durchsucht.
fat_mike
30

Warum unterscheidet sich die Anzahl der Dateien?

Anscheinend konzentrieren Sie sich ausschließlich auf den Aspekt "Daten kopieren" von "Datei kopieren". Eine Datei ist mehr als nur die Daten. Es ist eine Entität in einem Dateisystem . Eine Datei hat einen Namen sowie Attribute und Berechtigungen. Alle diese zusätzlichen Informationen über die Datei müssen zusammen mit den Daten dupliziert werden, wenn die "Datei kopiert" wird. Es gibt eine erhebliche Menge an Festplatten-E / A, um diesen Dateisystem-Overhead auszuführen.

Das Verfahren zum Kopieren einer (1) Datei in ein generisches Dateisystem lautet wie folgt:

  • Suchen Sie die Quelldatei im Dateisystem. (ein)
  • Lesen Sie den Verzeichniseintrag für die Quelldatei von der Festplatte.
  • Überprüfen Sie die Leseberechtigungen.
  • Suchen Sie die Zieldatei im Dateisystem. (b)
  • Überprüfen Sie die Schreibberechtigungen im Zielverzeichnis.
  • Erweitern Sie das Verzeichnis bei Bedarf, um die neue Datei aufzunehmen. (c)
  • Aktualisieren Sie das Verzeichnis auf der Festplatte. (c1)
  • Suchen Sie nach freien Blöcken, weisen Sie sie zu und aktualisieren Sie die Tabelle erneut. (d)
  • Lesen Sie die Dateidaten und kopieren Sie sie in die Zieldatei (dh kopieren Sie die "Datei").
  • Aktualisieren Sie den Verzeichniseintrag für die neue Datei mit (Größe und Zeit). (e)
  • Aktualisieren Sie die Zugriffszeit des Quellverzeichniseintrags. (f)

(a) Zumindest bedeutet dies, das aktuelle Verzeichnis zu durchsuchen. Oder der Pfad beginnt im Stammverzeichnis des Dateisystems und es müssen mehrere Verzeichnisebenen durchlaufen werden.

(b) Zumindest bedeutet dies, das aktuelle Verzeichnis zu durchsuchen. Oder der Pfad beginnt im Stammverzeichnis des Dateisystems und es müssen mehrere Verzeichnisebenen durchlaufen werden. Wenn die Zieldatei bereits vorhanden ist, legen Sie fest, wie die Kopie fortgesetzt oder abgebrochen werden soll. Wenn die Zieldatei nicht vorhanden ist, muss ein neuer Verzeichniseintrag erstellt werden. Dazu muss möglicherweise das Verzeichnis erweitert werden (dh der Aufwand für die Zuweisung von Dateiblöcken (auch als Cluster bezeichnet) ).

(c) Wenn das Verzeichnis erweitert werden muss, weisen Sie einen neuen Block zu, indem Sie einen freien Block suchen, ändern Sie die Zuordnungstabelle mit der neuen Zuordnung und schreiben Sie die Blöcke dann auf die Festplatte. Da die meisten Dateisysteme mehrere Kopien der Zuordnungstabelle verwalten, bedeutet dies mehrere Schreibvorgänge auf die Festplatte.
(c1) Wenn das Zielverzeichnis gefunden wurde, lesen Sie den Verzeichnisblock von der Festplatte, ändern Sie ihn mit dem neuen Verzeichniseintrag für die kopierte Datei und schreiben Sie den Block auf die Festplatte.

(d) Um die Datei zu kopieren, ordnen Sie Blöcke zu, indem Sie freie Blöcke suchen, ändern Sie die Zuordnungstabelle mit den neuen Zuordnungen und schreiben Sie die Blöcke dann auf die Festplatte. Da die meisten Dateisysteme mehrere Kopien der Zuordnungstabelle verwalten, bedeutet dies mehrere Schreibvorgänge auf die Festplatte. Um die Datenintegrität zu erhalten, versuchen Sie das Dateisystem nicht zu coalesce (Verzögerung und merge) Plattenschreiboperationen für Verzeichnisse und Zuordnungstabellen ein , sondern führt die Schreibvorgänge sofort die neuen Dateien erstellt und zugeordneten Block.

(e) Wenn die Datenkopie vollständig ist, aktualisieren Sie den neuen Verzeichniseintrag für die kopierte Datei mit der richtigen Dateilänge und den richtigen Zeitstempeln und schreiben Sie den Verzeichnisblock auf die Festplatte.

(f) Aktualisieren Sie den Quellverzeichniseintrag mit einem neuen "Zugriff" -Zeitstempel und schreiben Sie den Verzeichnisblock auf die Festplatte.

Anstelle von nur einer Datei stellt sich Ihre Frage, ob das Ausführen all dieser Dinge für tausend Dateien die Zeit verlängert, die zum Kopieren des Datenteils der Dateien erforderlich ist. Wenn Sie nur eine Datei mit 24 MB kopieren, können Sie etwas mit Ihrer Kopierzeit von tausend Dateien vergleichen.

Beim Sichern eines Dateisystems wird das Kopieren der einzelnen Dateien in ein anderes Dateisystem auf einer Festplatte oder Partition selten verwendet, da dies, wie Sie festgestellt haben, ein eher langsamer Prozess ist. Eine schnellere Methode besteht darin, eine einzelne Archivdatei zu erstellen und zu schreiben , die die Quellverzeichniseinträge und den Dateiinhalt in einem speziellen Dateiformat enthält. Sicherungsprogramme und der * nix-Befehl 'tar' können eine solche Archivdatei ausgeben. (Beachten Sie, dass 'tar' nur Archivdateien verarbeitet und keine Komprimierung wie Archivierungs- und Komprimierungsdienstprogramme verwendet.) Die schnellste Sicherungsmethode besteht darin, auf ein Blockgerät (anstatt auf ein Dateisystem auf einem Gerät) zu schreiben, sodass das Quelldateisystem so ist ignoriert (als mehr Daten behandelt) und eine blockweise Bildkopie des Quellgeräts kann durchgeführt werden.

Sägespäne
quelle
-1

Hier ist eine konzeptionelle Analogie:

(Bitte denken Sie daran, liebes Internet, dass Analogien fehlerhaft sind. Sie können gerne darauf hinweisen, wie in Kommentaren.)

Annahmen:

  • Der Agent der Informationsübertragung == eines Kindes, nennen wir ihn Sam, bewegt Eier aus einem Korb in einen anderen Korb.
  • Das Medium der Informationsübertragung == Luft, denke ich. Nicht wirklich wichtig hier.
  • Die Eier stammen von verschiedenen Arten, darunter ... Dinosaurier ... und mythische Unterwasser-Meerestiere und Drachen. (Die Eier können sehr groß sein)
  • Ei-Volumen in Dateigröße == . Denken Sie an Robbins Ei gegen Draggons Ei.

Analogie:

Also muss Sam Eier von einem Korb in den anderen bewegen, weil er auf einer Farm arbeitet und wer ihm Aufgaben gibt, ist gemein. Auf dieser Farm gibt es verschiedene eierlegende Tiere, darunter Drachen und mythische Meerestiere. Sam findet das aus mehreren Gründen großartig. (nicht wirklich wichtig, aber das ist meine Analogie)
Sam chillt am Fluss mit seinen 2 Körben, einer der Körbe ist der mit Eiern darin. Die Eier im Korb sind unterschiedlich groß

  • Ein Robbinei nimmt wie 100 bytesPlatz im Korb ein

zu

  • Kraken-Eier, rund bemessen 2.7Gb.

Sam muss anfangen, Eier zu bewegen, also fängt er einfach an, Eier zu greifen und sie zu bewegen. Nehmen wir an, er beschließt, zuerst ein Drachenei zu bewegen. Jetzt ist das Ei extrem massiv und dicht, so dass er eine Weile braucht, um das Ding in den anderen Korb zu ziehen.
Sam holt das Drachenei in den anderen Korb und ist sauer. Das war schwer, weil das Ding so viel Platz einnahm; Das Bewegen dauerte viel zu lange für nur ein einziges Ei.

Sam ist ein Idiot.

Sam geht zurück zu seinem ersten Korb, um sich ein weiteres Ei zu schnappen. Er merkt, dass er wirklich nur einen großen hatte. Es sind jedoch noch 100.000.000.000 Robbineier übrig.

Wie Sie sehen können, ist Sams Nachmittag ruiniert. Seine natürliche Neigung wäre, dass das Dino-Ei viel schlimmer sein sollte, damit er sich bewegen muss. Das ist sinnvoll, wenn wir über Eier und Körbe sprechen, aber Computer handeln mit Zahlen wie 100.000.000.000.

Zusamenfassend:

Die Antwort darauf, warum das Verschieben mehrerer kleiner Dateien im Vergleich zu einigen großen Dateien so viel länger dauert, hängt mit den Kosten zusammen, die mit dem Verschieben dieser Dateien verbunden sind. Je mehr kleine Dateien Sie haben, desto öfter muss diese Aktion ausgeführt werden. Eine andere Sichtweise wäre, über die Informationsdichte zu sprechen.

Rob Truxal
quelle
-2

Lesen Sie FAT, positionieren Sie die Köpfe neu, öffnen Sie die Datei beim Ändern der Datei - alles erfordert Zeit

Fauler Dachs
quelle
Es ist ein NTFS-Laufwerk
Trindaz
In NTFS werden alle Datendaten - Dateiname, Erstellungsdatum, Zugriffsberechtigungen und Inhalt - als Metadaten in der Stammdateitabelle gespeichert. Die Master File Table (MFT) enthält Metadaten zu jeder Datei, jedem Verzeichnis und jeder Metadatei auf einem NTFS-Volume. Es enthält Dateinamen, Speicherorte, Größe und Berechtigungen. Ein Verzeichniseintrag besteht aus einem Dateinamen und einer "Datei-ID", der Datensatznummer, die die Datei in der Stammdateitabelle darstellt. Die Datei-ID enthält auch eine Wiederverwendungsanzahl, um veraltete Referenzen zu erkennen.
Lazy Badger
Beruht Ihre Antwort auf die Frage auf der Tatsache, dass so viel zusätzliche Arbeit erforderlich ist, um Datensätze für den Dateinamen, den Speicherort, die Größe, die Berechtigungen usw. zu erstellen? Hier kommt die ganze zusätzliche Arbeit her.
Trindaz
Neues erstellen und vorhanden lesen
Lazy Badger