Ich habe hier ein kleines Dilemma ...
Ich musste Dateien im Wert von etwa 70 GB von einem meiner Server auf den anderen verschieben, daher entschied ich, dass das Teern und Senden des Archivs der schnellste Weg ist.
Der empfangende Server verfügt jedoch nur noch über 5 GB Speicherplatz nach dem Empfang des Tar-Archivs.
Gibt es eine Möglichkeit, den Teer "an Ort und Stelle" zu extrahieren? Ich muss das Archiv nicht behalten, nachdem es extrahiert wurde, also habe ich mich gefragt, ob dies möglich ist.
Bearbeiten: Es sollte beachtet werden, dass das Archiv bereits gesendet wurde, und ich möchte vermeiden, dass es erneut über eine andere Methode gesendet wird.
Wenn der andere Computer ssh hat, würde ich Ihnen rsync als eine andere Alternative empfehlen, die keine tar-Datei verwendet:
Und sei vorsichtig mit der Führung
/
Update bearbeiten
Nun, ich sehe, dass dies jetzt eine großartige Lösung ist, wenn Sie es nicht löschen und mit rsync neu beginnen können. Ich würde wahrscheinlich einen selektiven Auszug versuchen und aus dem Teer löschen.
selektiver Extrakt:
selektives Löschen:
Es scheint jedoch, dass Sie viel Zeit damit verbringen werden, ein Skript dafür zu programmieren ...
quelle
Grundsätzlich benötigen Sie die Möglichkeit, die Datei in Teer zu leiten und die Vorderseite zu "hacken", während Sie gehen.
In StackOverflow hat jemand gefragt, wie eine Datei vorne abgeschnitten werden soll , aber es scheint, dass dies nicht möglich ist. Sie könnten den Anfang der Datei immer noch auf besondere Weise mit Nullen füllen, damit die Datei zu einer spärlichen Datei wird , aber ich weiß nicht, wie das geht. Wir können jedoch das Ende der Datei abschneiden. Aber tar muss das Archiv vorwärts und nicht rückwärts lesen.
Lösung 1
Eine Indirektionsebene löst jedes Problem. Kehren Sie die Datei zuerst an Ort und Stelle um, lesen Sie sie dann rückwärts (was dazu führt, dass die Originaldatei vorwärts gelesen wird) und schneiden Sie das Ende der umgekehrten Datei ab, während Sie fortfahren.
Sie müssen ein Programm (c, Python, was auch immer) schreiben, um den Anfang und das Ende der Datei Stück für Stück auszutauschen und diese Stücke dann an tar weiterzuleiten, während Sie die Datei Stück für Stück abschneiden. Dies ist die Basis für Lösung 2, die möglicherweise einfacher zu implementieren ist.
Lösung 2
Eine andere Methode besteht darin , die Datei an Ort und Stelle in kleine Blöcke aufzuteilen und diese Blöcke beim Extrahieren zu löschen. Der folgende Code hat eine Blockgröße von einem Megabyte und kann je nach Ihren Anforderungen angepasst werden. Größer ist schneller, benötigt jedoch beim Teilen und beim Extrahieren mehr Zwischenraum.
Teilen Sie die Datei archive.tar:
Pipe diese Dateien in tar (beachten Sie, dass wir die Variable chunkprefix im zweiten Terminal benötigen):
Da wir eine Named Pipe (
mkfifo fifo
) verwenden, müssen Sie nicht alle Chunks gleichzeitig leiten. Dies kann nützlich sein, wenn Sie sehr wenig Platz haben. Sie können die folgenden Schritte ausführen:while [ -e … ]; do cat "$chunk…; done
Schleife beendet ist (zweites Terminal):tar
Befehl NICHT, entfernen Sie NICHT das FIFO (erstes Terminal), aber Sie können essync
für alle Fälle ausführen .while [ -e … ]; do cat "$chunk…; done
Zeilen erneut ausführen .Natürlich ist das alles Haute Voltige . Sie sollten zuerst überprüfen, ob in einem Dummy-Archiv alles in Ordnung ist. Wenn Sie einen Fehler machen, verabschieden Sie sich von den Daten .
Sie werden nie erfahren, ob das erste Terminal (
tar
) den Inhalt des FIFO tatsächlich verarbeitet hat. Wenn Sie es vorziehen, können Sie dies stattdessen ausführen, aber Sie haben nicht die Möglichkeit, Chunks nahtlos mit einer anderen Festplatte auszutauschen:Haftungsausschluss
Beachten Sie, dass Shell, Tail und Truncate 64-Bit-Ganzzahlen korrekt verarbeiten müssen, damit dies funktioniert. Dazu benötigen Sie weder einen 64-Bit-Computer noch ein Betriebssystem. Meins tut es, aber wenn Sie das obige Skript auf einem System ohne diese Anforderungen ausführen, verlieren Sie alle Daten in archive.tar .
Und in jedem Fall geht etwas anderes schief, Sie verlieren trotzdem alle Daten in archive.tar. Stellen Sie also sicher, dass Sie eine Sicherungskopie Ihrer Daten haben.
quelle
Wenn Sie Objektdateien verschieben möchten, entfernen Sie diese. Dies spart viel Platz.
quelle