GNU/Linux >> LINUX-Kenntnisse >  >> Linux

dd auf der gesamten Festplatte, aber keinen leeren Teil

Lösung 1:

Damals stieß ich auf ein ähnliches Problem mit eingebetteten Linux-Distributionen – entfernen Sie den ganzen Müll, bevor Sie das Image komprimieren.

00 . Warte, bis es stirbt. Löschen Sie asdf.txt.

Sie haben gerade Nullen in den gesamten freien Speicherplatz auf dem Gerät geschrieben.

Nehmen Sie nun ein Disk-Image und führen Sie es über gzip aus. Voila, spärliches Bild.

Skaliert wahrscheinlich nicht sehr gut und könnte Probleme verursachen, wenn Sie tatsächlich auf die Festplatte schreiben müssen, aber hey.

Sie könnten einen rsync-Schnappschuss der Festplatte auf ein anderes Volume machen, dieses nullen und dann dieses Festplatten-Image nehmen.

Hinweis:Könnte für SSD gefährlich sein, der Benutzer sollte diesen Vorgang vor dem Bestätigen in Betracht ziehen.

Lösung 2:

Angenommen, Sie möchten 18 speichern bis 21 und Sie sind root:

  1. 33

  2. Verwenden Sie 40 oder nur:
    50
    unbenutzte Blöcke mit Null füllen; warten Sie, bis es das Dateisystem vollständig gefüllt hat, dann:
    67

  3. Nehmen Sie das Bild mit dd auf und verwenden Sie conv=sparse, um im laufenden Betrieb Nullen zu stanzen:
    75

Wenn Sie die Komprimierung verwenden möchten, müssen Sie die Nullen nicht mit dd stanzen, da Nullblöcke stark komprimierbar sind:

dd if=/dev/sdxn | gz -c | dd of=/tgtfs/image.raw

PS:Sie sollten beachten, dass es keine gute Idee ist, dies (das Dateisystem mit Nullen zu füllen) regelmäßig auf einem Flash-Speicher-basierten Speichermedium (d. h. Ihr Quelldateisystem ist eine SSD) zu tun, da dies zu umfangreichen Schreibvorgängen führt auf Ihre SSD und verringern deren Lebensdauer. (aber es ist in Ordnung für gelegentliche Datenübertragungen)

Lösung 3:

Verwenden Sie dd mit der count-Option.

In Ihrem Fall haben Sie fdisk verwendet, also werde ich diesen Ansatz verfolgen. Ihr "sudo fdisk -l "erzeugt:

    Disk /dev/sda: 64.0 GB, 64023257088 bytes
    255 heads, 63 sectors/track, 7783 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x0000e4b5

    Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1          27      209920   83  Linux
    Partition 1 does not end on cylinder boundary.
    /dev/sda2              27         525     4000768    5  Extended
    Partition 2 does not end on cylinder boundary.
    /dev/sda5              27         353     2621440   83  Linux
    /dev/sda6             353         405      416768   83  Linux
    /dev/sda7             405         490      675840   83  Linux
    /dev/sda8             490         525      282624   83  Linux

Die beiden Dinge, die Sie beachten sollten, sind 1) die Einheitsgröße und 2) die Spalte "Ende". In Ihrem Fall haben Sie Zylinder, die 8225280 Bytes entsprechen. In der Spalte "Ende" endet sda8 bei 525 (das sind 525[Einheiten]*16065*512 =~4,3 GB)

dd kann viele Dinge tun, z. B. nach einem Offset starten oder nach einer bestimmten Anzahl von Blöcken stoppen. Letzteres machen wir mit der count-Option in dd. Der Befehl würde wie folgt aussehen:

    sudo dd if=/dev/sda of=/your_directory/image_name.iso bs=8225280 count=526

Wobei -bs die Blockgröße ist (es ist am einfachsten, die Einheit zu verwenden, die fdisk verwendet, aber jede Einheit reicht aus, solange die count-Option in diesen Einheiten deklariert ist), und count ist die Anzahl der Einheiten, die wir kopieren möchten (beachten Sie dass wir den Zähler um 1 erhöhen, um den letzten Block zu erfassen).

Lösung 4:

Während 80 den freien Festplattenplatz und verwenden Sie 94 /106 ist möglich, auf riesigen Festplatten mit leerem Speicherplatz, der in Hunderten von GB läuft, 119 ing ist schmerzhaft langsam - ganz zu schweigen davon, dass, wie in anderen Antworten angegeben, 126 ing einer SDD bis EOF.

Folgendes habe ich getan, als ich auf diese Situation gestoßen bin:

  • Auf einer Lubuntu-Live-CD wurde 139 verwendet um die Festplatte auf die kleinstmögliche Größe zu 'schrumpfen', wobei der Rest des Speicherplatzes nicht zugeordnet bleibt

  • Gebraucht
    146 um das schnell komprimierte Image zu erstellen (selbstverständlich möchten Sie die Komprimierung vielleicht überspringen, wenn Sie über ausreichend Speicherplatz zum Speichern von Rohdaten verfügen (oder anderweitig dazu neigen, die CPU-Belastung zu reduzieren)

  • Gebraucht
    157 um die Daten zurück auf eine andere Festplatte zu kopieren
  • Verwendet 162 erneut, um die Partition zu 'erweitern'

Ich habe es nicht für mehrere Partitionen ausprobiert, aber ich glaube, dass der obige Prozess angepasst werden kann, um „Partitionen“ zu kopieren, wenn zuerst die Partitionstabelle auf der Zielfestplatte erstellt wird und nur die in der Partition enthaltenen Daten über 170 - Offsets lesen/schreiben (189 /198 Option von 202 ) entsprechend erforderlich.

Lösung 5:

Du kannst nicht. 211 ist ein Tool auf sehr niedriger Ebene und hat keine Möglichkeit, zwischen Dateien und leerem Speicherplatz zu unterscheiden.

Auf der anderen Seite wird der leere Speicherplatz sehr, sehr gut komprimiert. Wenn Sie sich also nur Sorgen um den Speicherplatz machen, nicht zum Beispiel um die Schreibzeit, dann leiten Sie ihn einfach durch gzip.


Linux
  1. Linux-Systemadministratoren wollen wissen:Wo ist mein Speicherplatz geblieben?

  2. Befehl nicht in Zsh, aber in Bash gefunden?

  3. Ubuntu-Festplatte nicht vom Bios erkannt, aber in der Datenträgerverwaltung sichtbar?

  4. Das Bash-Skript gibt „Command Not Found“ in leeren Zeilen aus

  5. Linux wie kopieren, aber nicht überschreiben?

Core-Dump, aber Core-Datei befindet sich nicht im aktuellen Verzeichnis?

Installation vornehmen, aber nicht in die Standardverzeichnisse?

Verwenden Sie RPATH, aber nicht RUNPATH?

Tomcat läuft, aber Port 8080 antwortet nicht

`ssh <host>` ist eine Login-Shell, aber `ssh <host> <command>` nicht?

Machen Sie das Kopieren von Datenträgern/Datenträgern langsamer