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.