Ich habe 200 GB freien Speicherplatz, 16 GB RAM (von denen ~ 1 GB durch den Desktop und den Kernel belegt ist) und 6 GB Swap.
Ich habe eine 240 GB externe SSD, von der 70 GB 1 verwendet werden und der Rest frei ist, den ich auf meiner Festplatte sichern muss.
Normalerweise würde ich zuerst dd if=/dev/sdb of=Desktop/disk.img
die Festplatte komprimieren, aber das Erstellen des Images ist keine Option, da dies viel mehr Speicherplatz erfordern würde, als ich habe, obwohl der Komprimierungsschritt dazu führt, dass der freie Speicherplatz zusammengedrückt wird Das endgültige Archiv kann problemlos auf meine Festplatte passen.
dd
Schreibt standardmäßig in STDOUT und gzip
kann aus STDIN lesen. Theoretisch kann ich also schreiben dd if=/dev/sdb | gzip -9 -
, aber gzip
das Lesen von Bytes dauert erheblich länger als dd
das Produzieren.
Von man pipe
:
An das Schreibende der Pipe geschriebene Daten werden vom Kernel gepuffert, bis sie vom Leseende der Pipe gelesen werden.
Ich stelle mir eine |
wie eine echte Pipe vor - eine Anwendung schiebt Daten ein und die andere entfernt Daten so schnell wie möglich aus der Warteschlange der Pipe.
Was passiert, wenn das Programm auf der linken Seite mehr Daten schneller schreibt, als die andere Seite der Pipe darauf hoffen kann, sie zu verarbeiten? Wird es zu extremer Speicher- oder Auslagerungsauslastung führen oder wird der Kernel versuchen, ein FIFO auf der Festplatte zu erstellen, wodurch die Festplatte voll wird? Oder scheitert es einfach daran, SIGPIPE Broken pipe
wenn der Puffer zu groß ist?
Im Grunde läuft dies auf zwei Fragen hinaus:
- Was sind die Auswirkungen und Ergebnisse, wenn mehr Daten in eine Pipe verschoben werden, als gleichzeitig gelesen werden?
- Wie kann ein Datenstrom zuverlässig auf die Festplatte komprimiert werden, ohne dass der gesamte unkomprimierte Datenstrom auf der Festplatte gespeichert wird?
Hinweis 1: Ich kann nicht genau die ersten 70 verwendeten GB kopieren und erwarte, dass ich ein funktionierendes System oder Dateisystem erhalte, da die Fragmentierung und andere Dinge den vollständigen Inhalt erfordern.
lzop
anstatt gzip
; es komprimiert viel schneller mit nur einem geringfügig niedrigeren Kompressionsverhältnis. Ich finde es ideal für Disk-Images, bei denen die Komprimierungsgeschwindigkeit ein echter Engpass sein kann.