dd-Schreiben auf USB-Flash-Laufwerk verursacht massive Lesevorgänge

dd-Schreiben auf USB-Flash-Laufwerk verursacht massive Lesevorgänge

Ich stelle gerade einen USB-Stick mit einem DD-Image wieder her, das ich zuvor erstellt habe. Allerdings fällt eine sehr schlechte Schreibgeschwindigkeit von ca. 7 MB/s auf, obwohl der Stick normalerweise viel schneller ist.

Nachdem ich mich ein wenig umgesehen hatte, bemerkte ich, dass viele Daten vom USB-Laufwerk gelesen werden, was die schlechte Schreibleistung erklärt. Außer dd greift zu diesem Zeitpunkt nichts auf das Gerät zu.

Bearbeitete atopZeile:

sdd: busy 101% | read 18020 | write 613 | MBr/s 7.04 | MBw/s 7.1

Beim direkten Schreiben in mein MD-Array mit dd ist mir ein ähnliches Verhalten aufgefallen. Beim Schreiben in ein gemountetes Dateisystem mit dd passiert dies jedoch nicht.

Meine Frage ist daher, warum beim direkten Schreiben auf das Blockgerät vom USB-Stick gelesen wird und ob dies verhindert werden kann, um die Schreibleistung zu verbessern?

Antwort1

Es ist also nicht 100 % klar, was passieren könnte, aber ich vermute, dass Sie kleine Blöcke (512 Byte) auf den USB-Stick schreiben und dann DD-Prüfungen durchführen, um sicherzustellen, dass das Byte richtig geschrieben wurde – was zu SEHR VIEL Lese- und Schreibvorgängen und Lese- und Schreibvorgängen führt.

Die Einstellung der Blockgröße auf die „richtige“ Größe ist nicht trivial, aber es gibt eine Handvoll Faustregeln, wie man das macht. Generell habe ich festgestellt, dass eine Blockgröße von 64 kB in den meisten Fällen ein guter Kompromiss ist – aber Ihre Dateisysteme können Änderungen daran erforderlich machen, wenn Sie etwas Exotisches ausführen (wie zfszum Beispiel ).

Versuchen Sie etwas wie Folgendes: lbzcat image-dd.bz2 | dd of=/deb/sdX bs=64k

Eine ausführlichere Diskussion finden Sie unterdieser Beitrag.

Antwort2

Bei mir ddwird standardmäßig der Seitencache verwendet. Ich denke, das ist bei Systemen mit Seitencache normal. Der Seitencache erfordert jedoch zum Lesen das Speichergerät, was zu einer langsamen Schreibgeschwindigkeit führen kann.

Für mich gibt es 3 Möglichkeiten, dies zu umgehen und die volle Geschwindigkeit zu erreichen:

  1. Stellen Sie dddie Blockgröße auf 4096 oder ein Vielfaches ein. (kein Lesen)
  2. Stellen Sie dddie Blockgröße auf eine ausreichend große Zahl ein. Bei mir war das etwa 1 Million und mehr. Bei etwa 1 Million erreichte ich die volle Geschwindigkeit. (sehr wenige Lesevorgänge)
  3. Verwenden Sie den Seitencache nicht, indem Sie ddden Parameter angeben oflags=direct. Stellen Sie dddie Blockgröße auf ein ausreichend großes Vielfaches von 512 ein. Bei mir war das ungefähr bs=120kund darüber. (keine Lesevorgänge)

Zu beachten ist auf meinem SystemBlock Größefür alle Speichergeräte undSeitengrößesind 4096 Bytes. Gefunden mit:

blockdev --getbsz /dev/sd?
getconf PAGESIZE

AuchSektorgrößebeträgt 512 Bytes. fdiskUnd vielleicht partedkann ich Ihnen die Sektorgröße nennen.

verwandte Informationen