Konsolentipps | David Wolski | 3-2024 | 28. März 2024

Besseres dd: Immer mit Fortschritt

Mit Nachfrage und mit Fortschrittsanzeige: Die selbst gestrickte Funktion „mydd“ macht die Übertragung von Imagedateien mit dem Tool dd auf Laufwerke gesprächiger.

Wer mit ISO-Dateien für USB-Sticks und IMG-Dateien für Speicherkarten hantiert, wird in der Kommandozeile oft dd nutzen, um die Imagedateien zu schreiben. dd ist nicht gesprächig und gibt erst nach Abschluss der Schreiboperation Auskunft. Bereits seit einigen Jahren hat dd aber Optionen zur Anzeige des Fortschritts erhalten. 

Wie weit eine Schreibaktion fortgeschritten ist, verrät dd mit den angehängten Parametern „status=progress“ und „oflag=
dsync“. Letzterer ist wichtig, um nicht nur den Fortschritt zu zeigen, wie schnell dd in den Cache schreibt, sondern tatsächlich die Daten auf das ausgewählte Laufwerk bringt. Die Optionen sind nicht leicht zu merken und schnell mal vergessen. Abhilfe schafft eine kleine Bash-Funktion, die dd immer mit diesen Optionen startet. Ein Alias ist dafür nicht geeignet, denn Quelle und Ziel sollen als Variablen übernommen werden. Um eine knappe, nützliche Funktion festzulegen, öffnet man die Konfigurationsdatei „~/bashrc“ im Home-Verzeichnis mit einem beliebigen Editor und hängt ganz unten die wenigen Zeilen aus dem Kasten „Listing: Funktion mydd“ an. Der Name der Funktion ist frei wählbar, sollte aber nicht einfach „dd“ lauten, um eine Kollision mit dem Namen des Programms zu vermeiden. Nach dem Speichern der Datei ist die Funktion mit einem Schließen und erneuten Öffnen des Terminalfensters einsatzbereit: Die Eingabe von

mydd if=/home/user/datei.iso of=/dev/sdd

startet nun die Funktion, die dd mit den gewünschten Parametern ausführt. 

Als weitere Hilfestellung zeigt die Funktion noch eine kurze Zusammenfassung der Aktion („datei.iso wird nach /dev/sdd geschrieben“) und fragt dann nach dem sudo-Passwort. Die sudo-Abfrage dient zugleich als cleverer Bestätigungsdialog: Soll die Aktion nicht durchgeführt werden, so bricht an dieser Stelle die Tastenkombination Strg-C alles ab. Die Passwortbestätigung erfolgt deshalb zur Sicherheit auch dann, wenn sudo bereits kurz vorher schon aufgerufen wurde.

Listing: Bash-Funktion mydd

mydd () {
if ! [[ $# -eq 0 ]] ; then
echo "${1##*=} wird nach ${2##*=} geschrieben"
sudo -k dd $1 $2 bs=4M status=progress oflag=dsync "${@:3}"
fi
}