Ich habe derzeit Probleme beim dd
Aufrufen mit einer Datei mit geringer Dichte als Eingabe ( if
) und einer Datei als Ausgabe ( of
) mit conv=sparse
. dd
Anscheinend wird nur ein Kern der CPU ( Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
4 Kerne + 4 Intel Hyperthreads) verwendet (100% von 1 Kern), daher habe ich mich gefragt, ob eine Parallelisierung möglich ist dd
. Ich war
- Ein Blick in
info dd
undman dd
und es scheint eine eingebaute Funktion in der Version von Corutils 8.23 zu geben - Überprüfung
sgp_dd
aus demsg3-utils
Paket (ohne zu verstehen, ob es meinen Anforderungen entspricht), aber es scheint nicht in der Lage zu sein, spärliche Dateien zu verarbeiten dcfldd
scheint keine Parallelisierungsfähigkeiten zu haben
so viel ich weiss
- Eine erweiterte Version / Verzweigung mit interner Behandlung von Programmteilen in mehreren Threads (vermeiden Sie Kontextänderungen, die die E / A-Leistung beeinträchtigen) wird bevorzugt
- Eine Lösung mit
parallel
lokal ausgeführtem GNU wird gegenüber einer Lösung bevorzugt - ein benutzerdefiniertes (möglicherweise nicht getestetes) Code-Sniplet
Wie kann vermieden werden, dass die CPU der Engpass eines E / A-intensiven Vorgangs ist? Ich möchte den Befehl unter Ubuntu 14.04 unter Linux 3.13 ausführen und damit spärliche Datei-Disk-Images auf jedem Dateisystem verarbeiten, das spärliche Dateien unterstützt (zumindest sollte die Lösung nicht an ein bestimmtes Dateisystem gebunden sein).
Hintergrund: Ich versuche, eine Kopie einer 11-TB-Sparse-Datei (mit ca. 2 TB Daten) auf einem zfs zu erstellen (zfsonlinux 0.6.4 instabile Version, möglicherweise fehlerhaft und die Ursache für den CPU-Engpass (eventuell langsame Lochsuche)). Das sollte nichts an der Frage ändern, wie man dd parallelisiert (auf sehr generische Weise).
quelle
dd
Die CPU wird aufgrund der geringen Blockgröße standardmäßig belastet. mach es größer, wiebs=1M
.Antworten:
In Bash getestet:
Sie müssen wahrscheinlich 1000 einstellen.
quelle
Ein benutzerdefiniertes, nicht getestetes Code-Sniplet wird angezeigt:
Dadurch sollte die Datei logisch in vier 3-TB-Blöcke aufgeteilt und parallel verarbeitet werden. (
skip=
überspringt Eingabeblöcke;seek=
sucht über Ausgabeblöcke.) Der vierte Befehl liest natürlich bis zum Ende der alten Datei, sodass dercount=
Parameter nicht unbedingt erforderlich ist.quelle
conv=notrunc
conv=notrunc
impliziert istseek=
.