Ich habe 5 Millionen Dateien, die ungefähr 1 TB Speicherplatz belegen. Ich muss diese Dateien an Dritte übertragen.
Wie geht das am besten? Ich habe versucht, die Größe mit .tar.gz zu reduzieren, aber obwohl mein Computer über 8 GB RAM verfügt, wird der Fehler "Nicht genügend Systemspeicher" angezeigt.
Ist die beste Lösung, um die Dateien per E-Mail zu versenden?
memory
tar
compression
out-of-memory
oshirowanen
quelle
quelle
.tar.gz
oder KOPIEREN der resultierenden komprimierten Datei? In jedem Fall ist etwas seltsam, da keine der beiden Operationen mehr Speicher beanspruchen sollte, nur weil die Dateien groß sind. Das heißt, beide Vorgänge sollten gestreamt werden. Bitte geben Sie genau an, welche Befehle fehlschlagen.tar
Dateien nur inkrementell archiviert werden sollten, während sie aufgelistet werden, ohne dass eine Liste im Speicher erstellt wird. Aber auch hier zeigen Sie bitte den genauen Befehl, den Sie verwenden. Befinden sich alle Dateien im selben Verzeichnis oder ist die Verzeichnisstruktur sehr tief?Antworten:
Zusätzliche Informationen in den Kommentaren zeigen, dass das OP eine GUI-Methode verwendet, um die
.tar.gz
Datei zu erstellen .GUI-Software enthält häufig viel mehr Informationen als die entsprechende Befehlszeilen-Software oder führt zusätzliche unnötige Aufgaben aus, um zusätzliche Funktionen wie eine Fortschrittsanzeige zu erhalten. Es würde mich nicht überraschen, wenn die GUI-Software versucht, eine Liste aller im Speicher befindlichen Dateinamen zu sammeln. Dies ist nicht erforderlich, um ein Archiv zu erstellen. Die dedizierten Tools
tar
undgzip
sind auf die Arbeit mit Streaming-Eingaben und -Ausgaben ausgelegt, was bedeutet, dass sie sich mit Ein- und Ausgaben befassen können, die viel größer sind als der Arbeitsspeicher.Wenn Sie das GUI-Programm meiden, können Sie dieses Archiv höchstwahrscheinlich mit einem ganz normalen, alltäglichen
tar
Aufruf wie dem folgenden generieren :Wo
foo
ist das Verzeichnis, das alle Ihre 5 Millionen Dateien enthält.In den anderen Antworten auf diese Frage finden Sie einige zusätzliche alternative
tar
Befehle, die Sie ausprobieren können, falls Sie das Ergebnis in mehrere Teile aufteilen möchten, usw.quelle
"fünf Millionen" Dateien und insgesamt 1 TB? Ihre Dateien müssen also sehr klein sein. Ich würde einfach versuchen
rsync
:Wenn Sie das nicht haben - oder Ihr Anwendungsfall es nicht zulässt
rsync
, würde ich zumindest prüfen, ob es7z
mit Ihren Daten funktioniert. Es könnte nicht sein, aber ich denke, es ist immer noch einen Versuch wert:Oder wenn Sie sich
7z
zumindest nicht wohl fühlen, wenn Sie versuchen, ein.tar.xz
Archiv zu erstellen:(Es sollte beachtet werden, dass ältere Versionen von
tar
keine.tar.xz
Archive erstellen , aber.tar.lzma
Archive, wenn derJ
Schalter verwendet wird. Auch ältere Versionen vontar
unterstützen dasJ
Flag nicht insgesamt.)Da Sie ein GUI-Programm zum Erstellen dieser Dateien verwenden, gehe ich davon aus, dass Sie sich mit einer Befehlszeilenschnittstelle etwas unwohl fühlen.
Um das Erstellen, Verwalten und Extrahieren von Archiven über die Befehlszeilenschnittstelle zu erleichtern, gibt es das kleine Hilfsprogramm
atool
. Es ist für praktisch jede gängige Distribution verfügbar, die ich gesehen habe, und funktioniert so ziemlich für jedes einzelne Archiv, auf das ich gestoßen bin, außer für die hoffnungslos dunklen.Überprüfen Sie, ob Ihre Distribution über
atool
Repos verfügt, oder bitten Sie Ihren Administrator, diese zu installieren, wenn Sie sich in einer Arbeitsplatzumgebung befinden.atool
Installiert eine Reihe von Symlinks in sich selbst, sodass das Packen und Entpacken zum Kinderspiel wird:Erstellt ein Archiv.
Erweitert das Archiv.
Listet Dateiinhalte auf.
Welche Art von Archiv erstellt wird,
atool
erkennt man an der Dateinamenerweiterung Ihres Archivs in der Kommandozeile.quelle
rsync
ist, dass, wenn (wann) die Verbindung unterbrochen wird, an der Stelle weitergearbeitet werdenrsync
kann, an der sie aufgehört hat.Sofern Sie nicht eine bessere Komprimierung als 25: 1 erzielen können, ist es unwahrscheinlich, dass Sie durch die Komprimierung vor dem Versenden per E-Mail etwas erreichen, es sei denn, Sie haben ein Hardware-Bandformat, mit dem Sie den Drittanbieter austauschen können.
Der größte gemeinsame Speicher ist Blue Ray und das bringt Ihnen ungefähr 40 GB. Sie benötigen eine 25: 1-Komprimierung Ihrer Daten, um sie darauf abzustimmen. Wenn Ihr Drittanbieter nur über eine DVD verfügt, benötigen Sie (ungefähr) 125: 1.
Wenn Sie mit diesen Komprimierungszahlen nicht übereinstimmen können, verwenden Sie einfach eine normale Disc, und senden Sie diese per Post an den Dritten. In diesem Fall ist der Versand von Daten, die kleiner als ein 1-TB-Laufwerk sind und eine Komprimierung erfordern, Wahnsinn.
Sie müssen dies nur mit der Verwendung von
ssh -C
(Standardkomprimierung) oder vorzugsweisersync
mit der Komprimierung vergleichen, um die Dateien über das Netzwerk zu kopieren. 1 TB ist nicht unmöglich, sich über das Netz zu bewegen, aber es wird eine Weile dauern.quelle
Hast du über Torrent nachgedacht? Peer-to-Peer ist möglicherweise die beste Option für eine Internetübertragung:
Sie haben nicht gesagt, welches Betriebssystem Sie verwenden, aber da Sie über die tar.gz-Komprimierung sprechen, gehe ich davon aus, dass Sie ein GNU / Linux-ähnliches Betriebssystem verwenden. Dafür schlage ich Transmission vor . Es ist eine Open-Source-Torrent-Software, die auf Mac und Linux läuft. Ich mag es, weil die Entwickler sich Mühe geben, es für jeden GUI-Client, den sie unterstützen, nativ zu machen: keine plattformübergreifende Sprache.
Sie können diese Methode mit der Komprimierung kombinieren, verlieren jedoch die Möglichkeit, Teile der Übertragung zu priorisieren.
quelle
7z wäre meine Wahl. Es ermöglicht die automatische Aufteilung von Archiven und unterstützt die Multithread-Komprimierung. Nein,
xz
trotz der Hilfemeldung. Versuche es mit:Der Ausgang ist in 100-MB-Blöcke aufgeteilt (ändern Sie ihn mit dem
-v
Schalter).Der einzige wirkliche Nachteil ist, dass 7z keine Unix-Metadaten speichert (z. B. Berechtigungen und Eigentümer). Wenn Sie das brauchen, leiten Sie stattdessen die
tar
Ausgabe in7za
(sieheman 7za
für einige Beispiele).quelle
The only real downside
aber was für ein Nachteil!split
eine .tar.gz-Datei verwenden und die Metadaten behalten können.tar
Ansatz zu verfolgen .Ja, viel Glück beim Zusammenpacken. Und das GUI-Tool wird versuchen, dies auf demselben Volume zu tun, was bedeutet, dass a) Sie weitere 1 TB freien Speicherplatz benötigen und b) der Kopfschlag, wenn Sie eine Datei lesen und an das Archiv anhängen, für das Laufwerk nicht zu fehlerfrei ist.
Ich sehe zwei Möglichkeiten:
1) Rsync von Ihrem Computer an den Drittanbieter. Der eine oder andere benötigt eine globale IP-Adresse, die sich nicht oft ändert. Der große Vorteil von rsync ist, dass bei einer Unterbrechung aus irgendeinem Grund die Unterbrechung dort fortgesetzt werden kann, wo sie aufgehört hat. Das Kopieren eines 1-TB-Tarballs wird entweder erfolgreich sein oder fehlschlagen
2) Kaufen Sie ein externes 1-TB-Laufwerk, kopieren Sie die Daten darauf und lassen Sie das Laufwerk ausliefern. Hohe Latenz, aber wirklich gute Bandbreite, wenn es ankommt. Diverse Online-Backup-Dienste stehen dazu für die Erstsicherung zur Verfügung.
quelle
Ich schlage vor, Sie verwenden etwas wie:
Dadurch werden 10 Dateien erstellt, die maximal 100 GB groß sind. Aber das würde Ihr "OOM" -Problem nicht beantworten, da tar Lese- / Schreibzugriff streamen soll, sodass der Engpass eindeutig "gzip" ist.
quelle
Wie ist es damit:
find
Suchen listet den Verzeichnisbaum auftar -T -
liest die liste von stdin-czf -
z
Erstellt ein Archiv und schreibt nach stdout, gzippt den Streamssh remotehost
Melden Sie sich bei Remotehost mit anssh
cd /target/dir/
Wechseln Sie in das Zielverzeichnistar xzf -
extrahiere den eingehenden Stream aus stdinquelle
Mit fexsend können Sie Dateien beliebiger Anzahl und Größe an beliebige Empfänger senden, siehe:
http://fex.rus.uni-stuttgart.de:8080/usecases/downunder.html
Natürlich benötigen Sie einen F * EX-Server, der jedoch kostenlos ist:
http://fex.rus.uni-stuttgart.de:8080/
quelle