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 atop
Zeile:
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 zfs
zum 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 dd
wird 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:
- Stellen Sie
dd
die Blockgröße auf 4096 oder ein Vielfaches ein. (kein Lesen) - Stellen Sie
dd
die 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) - Verwenden Sie den Seitencache nicht, indem Sie
dd
den Parameter angebenoflags=direct
. Stellen Siedd
die Blockgröße auf ein ausreichend großes Vielfaches von 512 ein. Bei mir war das ungefährbs=120k
und 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.
fdisk
Und vielleicht parted
kann ich Ihnen die Sektorgröße nennen.