Im Moment mounte ich ArchiveMount
ein 123.000 kB-Archiv, das mehr als 3 Millionen Dateien enthält. Bisher hat es mehr als 5 Stunden montiert und ist immer noch nicht fertig.
Gibt es eine bessere Möglichkeit, eine .tar.gz
Datei einzuhängen ? Ich versuche, in einen Ordner zu mounten, und unkomprimiert dauert es ein paar Gigs. Ich brauche nicht einmal einen Schreibmodus, nur ein Nur-Lesen ist ausreichend.
Antworten:
Sie können auch ein komprimiertes Squashfs-Bild erstellen
Dazu müssen Sie Ihr tar.gz-Archiv extrahieren.
Der Vorteil ist auch, dass das Bild eine bessere Fehlertoleranz aufweist als gz.
quelle
Ich habe einen schnelleren alternativen Ratarmount geschrieben , der "für mich funktioniert", weil mich dieses Problem immer wieder nervt.
Du kannst es so benutzen:
Wenn Sie fertig sind, können Sie es wie jedes FUSE-Mount aushängen:
Warum ist es schneller als Archivierung?
Es kommt darauf an, was Sie messen.
Hier finden Sie eine Benchmark des Speicherbedarfs und der erforderlichen Zeit für die erste Bereitstellung sowie der Zugriffszeiten für einen einfachen
cat <file-in-tar>
Befehl und einen einfachenfind
Befehl.Ordner mit jeweils 1k Dateien wurden erstellt und die Anzahl der Ordner variiert.
Das untere linke Diagramm zeigt Fehlerbalken, die die minimale und maximale gemessene Zeit
cat <file>
für 10 zufällig ausgewählte Dateien angeben .Zeit für Dateisuche
Der Killervergleich ist die Zeit, die benötigt wird, um
cat <file>
fertig zu werden. Aus irgendeinem Grund skaliert dies linear mit der Größe der TAR-Datei (ca. Bytes pro Datei x Anzahl der Dateien) für die Archivierung, während die Zeit in ratarmount konstant ist. Dadurch sieht es so aus, als würde ArchiveMount das Suchen überhaupt nicht unterstützen.Bei komprimierten TAR-Dateien fällt dies besonders auf.
cat <file>
dauert mehr als doppelt so lange wie das Mounten der gesamten .tar.bz2-Datei! Zum Beispiel benötigt die TAR mit 10k leeren (!) Dateien 2,9 Sekunden, um sie mit archivemount zu laden. Abhängig von der Datei, auf die zugegriffen wird,cat
dauert der Zugriff mit zwischen 3 ms und 5 Sekunden. Die dafür benötigte Zeit scheint von der Position der Datei innerhalb der TAR abzuhängen. Die Suche nach Dateien am Ende der TAR dauert länger. Dies zeigt an, dass der "Suchlauf" emuliert ist und alle Inhalte in der TAR vor dem Lesen der Datei gelesen werden.Das Abrufen des Dateiinhalts kann mehr als doppelt so lange dauern wie das Mounten der gesamten TAR. Zumindest sollte es in der gleichen Zeit wie die Montage beendet sein. Eine Erklärung wäre, dass die Datei mehr als einmal emuliert gesucht wird, vielleicht sogar dreimal.
Anscheinend benötigt Ratarmount immer die gleiche Zeit, um eine Datei abzurufen, da sie die echte Suche unterstützt. Bei bzip2-komprimierten TARs wird sogar nach dem bzip2-Block gesucht, dessen Adressen ebenfalls in der Indexdatei gespeichert sind. Theoretisch ist der einzige Teil, der mit der Anzahl der Dateien skaliert werden sollte, die Suche im Index und der Teil, der mit O (log (n)) skaliert werden sollte, da er nach Dateipfad und Name sortiert ist.
Speicherbedarf
Wenn Sie mehr als 20.000 Dateien in der TAR haben, ist der Speicherbedarf von ratarmount im Allgemeinen geringer, da der Index beim Erstellen auf die Festplatte geschrieben wird und daher auf meinem System einen konstanten Speicherbedarf von ca. 30 MB aufweist.
Eine kleine Ausnahme ist das gzip-Decoder-Backend, das aus irgendeinem Grund mehr Speicher benötigt, wenn der gzip größer wird. Dieser Speicheraufwand ist möglicherweise der Index, der für die Suche innerhalb der TAR erforderlich ist. Weitere Untersuchungen sind jedoch erforderlich, da ich dieses Backend nicht geschrieben habe.
Im Gegensatz dazu speichert archivemount den gesamten Index, z. B. 4 GB für 2 Millionen Dateien, vollständig im Speicher, solange die TAR bereitgestellt ist.
Montagezeit
Mein Lieblingsfeature ist ratarmount, um den TAR bei jedem weiteren Versuch ohne merkliche Verzögerung zu mounten. Dies liegt daran, dass der Index, der die Dateinamen den Metadaten und der Position innerhalb der TAR zuordnet, in eine Indexdatei geschrieben wird, die neben der TAR-Datei erstellt wird.
Die benötigte Zeit für das Mounten verhält sich im Archiv etwas seltsam. Ab ca. 20.000 Dateien beginnt die Skalierung quadratisch statt linear in Bezug auf die Anzahl der Dateien. Dies bedeutet, dass ab ungefähr 4 Millionen Dateien Ratarmount viel schneller als Archivmount ist, obwohl es für kleinere TAR-Dateien bis zu 10-mal langsamer ist! Andererseits ist es für kleinere Dateien unwichtig, ob es 1s oder 0.1s dauert, um den Teer zu mounten (das erste Mal).
Die Ladezeiten für bz2-komprimierte Dateien sind zu allen Zeiten am besten vergleichbar. Dies ist sehr wahrscheinlich, weil es an die Geschwindigkeit des bz2-Decoders gebunden ist. Ratarmount ist hier etwa 2x langsamer. Ich hoffe, ratarmount in naher Zukunft zum klaren Sieger zu machen, indem ich den bz2-Decoder parallelisiere, was sogar für mein 8-jähriges System eine vierfache Beschleunigung bringen könnte.
Es ist Zeit, Metadaten abzurufen
Wenn Sie einfach alle Dateien mit
find
innerhalb der TAR auflisten (find scheint auch stat für jede Datei aufzurufen !?), ist ratarmount für alle getesteten Fälle 10x langsamer als archivemount. Ich hoffe, dies in Zukunft verbessern zu können. Derzeit sieht es jedoch nach einem Designproblem aus, da Python und SQLite anstelle eines reinen C-Programms verwendet werden.quelle
Das Problem hierbei ist, dass das Format TAR (Tape ARchive) für den sequentiellen Zugriff und nicht für den wahlfreien Zugriff ausgelegt ist. Und gzip ist eine gute Ergänzung zu tar, da es ein auf Streams basierendes Komprimierungsformat ist, auch nicht für den wahlfreien Zugriff.
Ein High-Level-Tool, das nicht direkt mit den komprimierten Blöcken interagiert, muss also jedes Mal, wenn es etwas lesen muss, die gesamte Datei analysieren, um die Liste der Dateien zu erhalten. Dann wird der Cache möglicherweise ungültig und es wird erneut gelesen und dann für jede Datei, die Sie kopieren, kann es sein, dass sie erneut durchgelesen wird. Sie können ein Tool erstellen, das die Position jeder Datei und die zu dekomprimierenden Blöcke festhält, aber anscheinend haben sich nur wenige damit beschäftigt.
Wenn Sie möchten, dass dies schneller geht
tar tzf file.tar.gz > filelist
, öffnen Sie diese Dateiliste in vim , gedit oder was auch immer, entfernen Sie die nicht benötigten Zeilen von Dateien, speichern Sie sie und extrahieren Sie sie dann mittar xzf file.tar.gz -T filelist -C extracted/
.Um zufälligen Zugriff auf eine komprimierte Datei zu erhalten, sollten Sie zip mit den Erweiterungen posix, rar oder, wie von dru8274 vorgeschlagen, squashfs oder sogar ZFS mit aktivierter Komprimierung oder btrfs verwenden, wenn btrfs zum Zeitpunkt des Lesens komprimiert wurde.
quelle
Dies deckt nicht alle Anwendungsfälle ab, da die Verwendung auf einen Texteditor beschränkt ist. Wenn Sie sich jedoch nur für den Lesezugriff interessieren, kann dies in bestimmten Situationen hilfreich sein.
vim
Wenn Sie auf einem Tarball ausgeführt werden, wird die Inhaltshierarchie des Archivs angezeigt (ähnlich wie beim Ausführen in einem Verzeichnis eine Dateihierarchie angezeigt wird). Durch Auswahl einer der Dateien in der Liste wird die ausgewählte Datei in einem schreibgeschützten Puffer geöffnet.Auch dies bietet nicht unbedingt Zugriff auf Bilder oder andere Medien. Wenn Sie jedoch nur den Inhalt anzeigen oder auf textbasierte Dateien zugreifen möchten, ist dies hilfreich.
Hinweis : Dies funktioniert nicht bei allen Archivformaten.
quelle
Mein Ansatz. Wenn Sie auf einem externen USB-Laufwerk oder einem externen / sekundären Festplattenlaufwerk über genügend freien Speicherplatz verfügen, sollten Sie nur Ihre .tar.gz-Datei extrahieren. Sie denken, Sie möchten wahrscheinlich keine 3 Millionen Dateien auf Ihrer Hauptsystemfestplatte haben, da dies zu einer Verlangsamung führen könnte. Ich würde empfehlen, dass die externe Festplatte in diesem Fall ein Dateisystem hat, das eine große Anzahl von Dateien problemlos verarbeitet: Denken Sie an ReiserFS, ext4 (mit der Option dir_index), XFS, vielleicht BtrFS. Es kann 1-2 Stunden dauern, bis der Extrakt fertig ist, aber Sie können in der Zwischenzeit auch einfach zum Mittagessen gehen oder über Nacht laufen lassen. Wenn Sie zurückkommen, sollte der Zugriff auf die extrahierten Dateien performant sein.
quelle