Warum ist die DD-Image-Image-Datei größer als die Quellpartition / ist beim Kopieren der Partition in eine Datei nicht genügend Speicherplatz verfügbar?

1719
Michael P

Die DD-Ausgabeabbilddatei ist größer als die Quellpartition, und der DD-Speicherplatz auf der Zielpartition (auf der das Image erstellt wird) ist leer, obwohl sie größer als die Quellpartition ist.

Ich versuche, eine Partition in eine Datei auf einer anderen Partition auf derselben Festplatte zu kopieren. Die Zielpartition ist etwas größer als die Eingabepartition. Beide sind ext3Partitionen.

Ausführen von OpenSuse-Rescue LIVE-CD. Yast zeigt, dass die Eingabepartition ( sdb1) 62,5 GiB und die Ausgabepartition sdb262,85 GiB beträgt.

Thunar zeigt, dass die Eingabe sdb165,9 GB und die Ausgabe sdb266,2 GB beträgt, während die Ausgabedatei ddebenfalls 66,2 GB beträgt sdb2.

Hier ist die Konsole:

( sdb1wurde abmontiert, ddeinige Male versucht )

linux:# dd if=/dev/sdb1 of=RR.image bs=4096  dd: error writing ‘RR.image’: No space left on device 16156459+0 records in 16156458+0 records out 66176851968 bytes (66 GB) copied, 2648.89 s, 25.0 MB/s 

Weitere Infos auf Anfrage:

Und noch einmal: Ich sehe den Unterschied in der Quellpartitionsgröße sdb1und der RR.imagedaraus erstellten DD-Image-Datei . Diese Datei befindet sich am sdb2.


Hier ist noch etwas Unklares: Ich LAUFEN DD AS ROOT, damit reservierter Speicherplatz zur Verfügung steht, richtig? Das Ziel sdb2ist 62,85 GiB, während die Gesamtbytes für das Bild, wie Sie sagten, etwa 61,63 GiB beträgt. Hier ist auch die Ausgabe von dfund POSIXLY_CORRECT=1 dfBefehlen:

Das System ist jetzt System-Rettungs-CD

root@sysresccd /root % df  Filesystem 1K-blocks Used Available Use% Mounted on … /dev/sdb1 64376668 7086884 56241208 12% /media/Data1 /dev/sdb2 64742212 64742212 0 100% /media/Data2 /dev/sdb3 5236728 4785720 451008 92% /usr/local  root@sysresccd /root % POSIXLY_CORRECT=1 df /dev/sdb1  Filesystem 512B-blocks Used Available Use% Mounted on /dev/sdb1 128753336 14173768 112482416 12% /media/Data1  root@sysresccd /root % POSIXLY_CORRECT=1 df /dev/sdb2  Filesystem 512B-blocks Used Available Use% Mounted on /dev/sdb2 129484424 129484424 0 100% /media/Data2 

Die Zahlen sind genau die gleichen wie in einfach, dfwenn wir sie durch 2 teilen. 1024b / 512b = 2 ist der Divisor.

  1. sdb1ist kleiner als sdb2. Die Verwendung von 100 Prozent ist sdb2jetzt auf die DD-Abbilddatei zurückzuführen, mit der die Partition gefüllt wurde. Es muss jetzt die einzige Datei sein.

  2. Die Image-Datei selbst ist 66.176.851.968 Bytes als DD (zur Laufzeit) und Thunar-Berichte. Geteilt durch 1024 Bytes erhalten wir 64625832 K-Blöcke richtig? Es ist also immer noch kleiner als dfberichtet um sdb2mehr als 116380K und es ist GRÖSSER ALS DIE sdb1(DIE QUELLE), aber es maximiert die Partition sdb2.

Die Frage ist: Was gibt es für diesen Raum sdb2?


Am wichtigsten und interessantesten ist jedoch:

Warum ist die Zieldatei größer als die Quellpartition, aus ddder sie erstellt wurde? Was bedeutet für mich: Ich kann es nicht zurückschreiben.

sdb1(64376668K) < RR.image(64625832K)

Und

sdb1(64376668 1K-Blöcke) < RR.image(64625832 1K-Blöcke) < sdb2(64742212 1K-Blöcke)

(Ich hoffe, dass die Dinge richtig berechnet wurden ...)

Jetzt habe ich die Blöcke überprüft, die für ROOT gespeichert sind. Ich habe diesen Befehl zum Ausführen gefunden:

root@sysresccd /root % dumpe2fs -h /dev/sdb1 2> /dev/null | awk -F ':' '{ if($1 == "Reserved block count") { rescnt=$2 } } { if($1 == "Block count") { blkcnt=$2 } } END { print "Reserved blocks: "(rescnt/blkcnt)*100"%" }'  Reserved blocks: 1.6%  root@sysresccd /root % dumpe2fs -h /dev/sdb2 2> /dev/null | awk -F ':' '{ if($1 == "Reserved block count") { rescnt=$2 } } { if($1 == "Block count") { blkcnt=$2 } } END { print "Reserved blocks: "(rescnt/blkcnt)*100"%" }'  Reserved blocks: 1.59999% 

Daher ist der für ROOT reservierte Prozentsatz in beiden Partitionen derselbe, falls dies wichtig ist.


Hier ist die Ausgabe für gdisk:

root@sysresccd /root % gdisk -l /dev/sdb  GPT fdisk (gdisk) version 1.0.1  Partition table scan: MBR: MBR only BSD: not present APM: not present GPT: not present   *************************************************************** Found invalid GPT and valid MBR; converting MBR to GPT format in memory.  ***************************************************************  Disk /dev/sdb: 312581808 sectors, 149.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): DCF8AFC4-11CA-46C5-AB7A-4818336EBCA3 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 312581774 Partitions will be aligned on 2048-sector boundaries Total free space is 7789 sectors (3.8 MiB)  Number Start (sector) End (sector) Size Code Name 1 2048 131074047 62.5 GiB 8300 Linux filesystem 2 131074048 262889471 62.9 GiB 8300 Linux filesystem 3 302086144 312580095 5.0 GiB 0700 Microsoft basic data 5 262891520 293771263 14.7 GiB 8300 Linux filesystem 6 293773312 302086143 4.0 GiB 8200 Linux swap 

Wie groß ist dann die tatsächliche Größe sdb1?

Ist sdb2(N2) nicht größer als sdb1(N1)? Warum wächst die Bilddatei größer als sdb2(N2)? Wenn ich den für root reservierten Platz ausschalte sdb2, passt er dann dort?

1
Wenn meine Antwort Sie nicht überzeugt, geben Sie bitte die genauen Zahlen zum Vergleich an. ZB um zu sagen, wie groß Ihre * Partitionen sind: `sudo gdisk -l / dev / sdb`; Um herauszufinden, wie viel Speicherplatz Ihr * Dateisystem * bieten kann: `POSIXLY_CORRECT = 1 df / mountpoint / Dabei ist / sdb2 / / mounted /`. Bitte [bearbeiten] Sie die Frage und fügen Sie die Ausgaben dieser Befehle ein (nachdem Sie [die Konten zusammenführen] (ggf. https://superuser.com/help/merging-accounts). Ich habe Ihre (?) Vorgeschlagenen Änderungen gesehen und denke, Sie vergleichen immer noch falsche Zahlen. `64376668KiB` für` sdb1` ist irrelevant; Die * Partition * ist größer als das. Kamil Maciorowski vor 7 Jahren 0
Bitte. Vollständige `dd`-Ausgabe entspricht der * Partitionsgröße *,` df` funktioniert auf * Dateisystemen *. `64376668KiB` ist der auf dem * Dateisystem * innerhalb von` sdb1` verfügbare Speicherplatz, die Partition ist * größer *. Nochmals: Was ist die Ausgabe von `gdisk -l / dev / sdb`? Sie können die Partitionsgröße daraus ablesen, darauf kommt es an. Kamil Maciorowski vor 7 Jahren 0

2 Antworten auf die Frage

2
Kamil Maciorowski

Jedes Dateisystem benötigt Platz für Metadaten. Zusätzlich reserviertext Familie etwas Platz für rootBenutzer und ist standardmäßig 5%.

Beispiel

In meinem Kubuntu habe ich eine (spärliche) Datei von 1GiB erstellt:

truncate -s 1G myfile 

und ext3Dateisystem darin gemacht. Der Befehl war klar

mkfs.ext3 myfile 

Dies zugewiesen sofort ca. 49MiB (~ 5% in diesem Fall) myfile. Ich konnte das sehen, weil die Datei spärlich war und anfangs eine 0B-Nutzung auf meiner realen Festplatte meldete, dann wuchs sie. Ich gehe davon aus, dass hier Metadaten leben.

Ich habe das Dateisystem gemountet; df -h976 MB des gesamten Speicherplatzes angegeben, aber nur 925 MB verfügbar. Dies bedeutet, dass weitere ~ 5% für mich nicht verfügbar waren.

Dann füllte ich diesen Platz (nach cddem Mountpoint) mit

dd if=/dev/urandom of=placeholder 

Als normaler Benutzer konnte ich nur 925MiB nehmen. Die gemeldete "Plattennutzung" betrug dann 100%. rootWenn ich dasselbe mache wie ich, könnte ich 976MiB in die Datei schreiben. Wenn die Datei 925MiB betrug, blieb die Nutzung bei 100%.

Fazit

Der Vergleich der Größen Ihrer Partitionen ist in diesem Fall falsch. Vergleichen Sie also die Größe Ihrer Dateisysteme. Sie sollten den verfügbaren Speicherplatz auf dem Ziel geprüft Dateisystem (zB mit df) und vergleichen Sie es mit der Größe der Quellpartition .


BEARBEITEN:

Um es klar zu machen: Ihre 66176851968 Bytes sind etwa 61,63 GiB. Dies ist nicht größer als die Quellpartition, die 62,5 GiB beträgt. Die Quelle Partition wurde nicht vollständig gelesen werden, wenn das Ziel - Dateisystem voll zu tun.

Wenn Sie nicht mit der GB / GiB-Unterscheidung vertraut sind, lesen Sie man 7 units.


BEARBEITEN 2

Jetzt haben wir alle tatsächlichen Zahlen. Bleiben wir bei der Einheit von 512B, es ist eine übliche Sektorgröße.

  • Ihre sdb1 Partition belegt 131074048-2048=131072000Einheiten auf der Festplatte. Nennen wir das mal P1. Dies ist von der gdiskAusgabe.
  • Ihre sdb2 Partition belegt 262889472-131074048=131815424Einheiten auf der Festplatte. Lass es sein P2. Dies ist auch von der gdiskAusgabe.
  • Ihr Dateisystem im Innern sdb1kann Dateien speichern bis zu 128753336Einheiten insgesamt. Rufen wir diese Nummer an F1. Dies ist von der dfAusgabe.
  • Ihr Dateisystem im Inneren sdb2kann speichern 129484424Einheiten. Lass es sein F2. Dies ist auch von der dfAusgabe.

Der Unterschied zwischen P1und F1sowie der Unterschied zwischen P2und F2kann erklärt werden, wenn Sie wissen, dass Metadaten vorhanden sein müssen. Dies wurde bereits in dieser Antwort erwähnt.

Ihr ddversucht, das Ganze zu kopieren sdb1 Partition, dh P1von Daten in eine Datei, die den Raum durch die vorgesehene nimmt Dateisystem im Inneren sdb2, also F2der zur Verfügung stehenden Raum.

P1> F2- das ist die endgültige Antwort. Ihre Bilddatei wurde nicht größer als sie sollte. Es sieht so aus, als hätten Sie erwartet, dass es so groß ist F1. Tatsächlich hätte das gesamte Bild eine Größe von P1Einheiten.

P2und F1sind in diesem Zusammenhang irrelevant.

Ich habe gerade den zweiten EDIT gefunden. Früher habe ich meine eigene Untersuchung anhand Ihrer früheren Beiträge durchgeführt, die ich als Antwort auf mich selbst gepostet habe. Das tut mir leid. Und vielen Dank! Hoffe ich habe meine Antwort richtig geschrieben. Michael P vor 7 Jahren 0
Ich hoffe, ich habe die Dinge richtig verstanden, können Sie mich korrigieren, wenn nicht? Michael P vor 7 Jahren 0
0
Michael P

Nach dieser langen Diskussion wurde mir klar, was Sie meinen.

Endlich sind wir zur Sache gekommen. Nun, meine Frage war zunächst unklar, bevor ich sie editierte. Wirklich danke dir!

Ich habe diesen Befehl gefunden, um die genaue Größe der Partitionen in Bytes zu ermitteln:

root @ sysresccd / root% parted / dev / sdb-Einheit B p

Modell: ATA WDC WD1600AAJS-0 (scsi)

Platte / dev / sdb: 160041885696B

Sektorgröße (logisch / physikalisch): 512B / 512B

Partitionstabelle: Msdos

Disk Flags:

Nummer Anfang Ende Größe Typ Dateisystem Flags

1 1048576B 67109912575B 67108864000B primärer ext3-Start

2 67109912576B 134599409663B 67489497088B Primärext3

4 134600457216B 154668105727B 20067648512B erweitert

5 134600458240B 150410887167B 15810428928B logische ext4

6 150411935744B 154668105727B 4256169984B logischer Linux-Swap (v1)

3 154668105728B 160041009151B 5372903424B primärfett32 lba

Grundsätzlich muss ich die tatsächliche Größe von sdb1 (N1) in dieser Liste mit dem verfügbaren Speicherplatz auf sdb2 (N2) in dieser Liste vergleichen.

Dafür verwenden wir den Befehl POSIXLY_CORRECT = 1 df für das Zieldateisystem (sdb2), das in diesem Fall 129484424 512b-Blöcke war.

Wenn wir 67108864000B von sdb1 durch 512b = 131072000 512b-Blöcke teilen. Oder wir können 129484424 * 512 = 66296025088 Bytes multiplizieren.

Also 66296025088 Bytes (verfügbarer Speicherplatz auf SDB2) <67108864000 Byte (RAW-Größe von SDB1). Es ist offensichtlich, dass das Image der Partition "sdb1" nicht in den verfügbaren Speicherplatz von "sdb2" passt. Auf sdb2 ist ein Platz für ROOT reserviert, der ebenfalls berücksichtigt werden sollte.

Und bei meiner Frage nach der Image-Datei, die größer als die Partition ist, habe ich die Größe des SDB1-Dateisystems grundsätzlich mit dem DD-Image verglichen, anstatt mit der Rohpartitionsgröße, die vollständig von DD gelesen werden soll. Richtig? Ich kann sogar annähern, wie viel Speicherplatz ich für die Operation benötige: 66.176.851.968 Bytes war die Größe des unvollständigen DD-Bildes, daher vergleiche ich es mit der Größe der Roh-SDB1-Partiton 66.176.851.968 = 66176851968 B <67108864000 B = kleiner um 932012032 Bytes = 888 MiB

Aber was ist auf leeren Partitionen drin? Metadaten und Speicherplatz für root reserviert? So viel Platz ??? !!!!! Vielen Dank!!

Gut das alles zu wissen !!

Formelle Anmerkung: Diese Seite ist kein Forum, ihre Fragen und Antworten. In einer Antwort sollte niemand außer dem Fragesteller direkt angesprochen werden. Du antwortest auf dich selbst (und das ist in Ordnung), nicht ich; Die Antwort sollte dies widerspiegeln. Kommentare sind für (vernünftige) Diskussionen. Kamil Maciorowski vor 7 Jahren 0
Ich verstehe jetzt danke! Vielen Dank für die Hilfe und die Geduld! Michael P vor 7 Jahren 0
"Also 66296025088 Bytes (verfügbarer Speicherplatz auf" sdb2 ") <67108864000 Bytes (Rohgröße von" sdb1 "). Offensichtlich kann das Partitions-Image" sdb1 "nicht in den verfügbaren Speicherplatz auf" sdb2 "passen." Bestätigt, scheinen diese Zahlen für mich richtig zu sein. Dies ist das Hauptproblem hier und ich bin froh, dass wir das endlich geschafft haben. Kamil Maciorowski vor 7 Jahren 0
Ich bin auch froh! Michael P vor 7 Jahren 0