Gibt es Argumente gegen die Verwendung von dd mit bs=10G?

Gibt es Argumente gegen die Verwendung von dd mit bs=10G?

Angenommen, ich habe ein Laufwerk, das an einer beliebigen Stelle einen fehlerhaften Superblock (oder Block) hat. Es ist ein riesiges Laufwerk, 1-8 TB. Es lässt sich nicht in ext3 formatieren, also schreibe ich es voller Nullen, damit ich es richtig formatieren kann. lsblk -fzeigt seinen FSTYPE als leere Zeichenfolge an.

Gibt es einen Grund, den folgenden Befehl nicht auszuführen?

sudo dd if=/dev/zero bs=10G status=progress of=/dev/bad_disk

Antwort1

Ich vermute, dass Sie das Programm nicht unterbrechen können, während es einen Block schreibt, und dass das Schreiben von 10 GB viel Zeit in Anspruch nimmt. Die Leistungsverbesserung mit der Blockgröße stagniert meiner Erfahrung nach ziemlich schnell, daher würde ich bei vernünftigeren Größen bleiben (4 MB ...).

Antwort2

Meine Antwort bezieht sich genau auf den Titel:

Gibt es Argumente gegen die Verwendung ddmit bs=10G?

Aber in deinem Fall ist es irgendwieXY-Problem. Das zugrunde liegende Problem (fehlerhafte Blöcke) sollte mit smartctlund angegangen werden badblocks, nicht mit dd.


Speichernutzung

Dies ist eine andere Antworterwähnt „Leistungsverbesserung mit Blockgröße“:

Leistungsverbesserungen mit Blockgröße erreichen relativ schnell ein Plateau

Stimmt, aber das ist nur der bsTeil der Geschichte, der „nahe Null“ ist. Im Kontext der Frage sollten wir den bsTeil „geht gegen unendlich“ erzählen.

In der realen Welt bricht das Plateau bei einigen großen tatsächlich zusammen bs. Mit bs=10Gversucht das Tool, 10 GiB Speicher zuzuweisen. Dies kann gelingen oder auch nicht (Speicher erschöpft). Selbst wenn es gelingt, gibt es immer noch Probleme:

  • Bei anderen Prozessen wird der zugewiesene Speicher möglicherweise auf die Festplatte ausgelagert.
  • Der Puffer ddkann auf die Festplatte ausgelagert werden. Das Tool verwendet ihn ständig, daher würde das Betriebssystem wahrscheinlich zuerst andere (nicht kürzlich aufgerufene) Daten auslagern. Wenn Sie jedoch 8 GiB RAM und 16 GiB Swap haben, gibt es keine Möglichkeit, bs=10GRAM unterzubringen.
  • Wenn der Speicher später benötigt wird,OOM-Killer könnte eingreifen. Ihr ddProzess ist möglicherweise der erste, der beendet wird.

Dies hängt natürlich alles davon ab, wie viel RAM und Swap-Speicher Sie haben und was andere Prozesse tun.


Hinweise

Ich persönlich bevorzuge bseine Größe, die in 0,1-1 Sekunde übertragen wird; oder kleiner, bswenn die RAM-Nutzung ein Problem sein könnte. Auf diese Weise kann ich ddfast sofort unterbrechen (das ist der Kern derbereits erwähnte Antwort). Wenn die Hardwarebeschränkungen eine Geschwindigkeit ddvon über 10 GiB/s zulassen würden und ich über 40 GiB freien RAM hätte, würde ich in Betracht ziehen bs=10G. Zu Hause komme ich kaum jemals über bs=64M.

Ein Anwendungsfall, der bs=10Gnützlich sein kann, ist, wenn Sie verarbeiten möchtengenauso viele Daten wie Sie verbrauchen count=1(oder zB 5 mal so viel: count=5).Jedochin der Praxis mit großen bskönnen Sie bekommenweniger, es sei denn, Sie verwenden iflag=fullblock(siehediese Antwort). Aus Speichergründen würde ich bssowieso auf eine kleinere Größe umrechnen.

verwandte Informationen