792 votes

Comment suivez-vous les progrès de dd ?

dd est une merveille. Il vous permet de dupliquer un disque dur sur un autre, de remettre complètement à zéro un disque dur, etc. Mais une fois que vous lancez un dd commande, il n'y a rien pour vous informer de sa progression. Il reste juste à côté du curseur jusqu'à ce que la commande se termine. Alors comment suivre la progression de dd ?

8voto

zevero Points 189

Le plus simple est :

 dd if=... of=... bs=4M status=progress oflag=dsync

oflag=dsync gardera votre écriture en synchronisation, ainsi les informations de status=progress est plus précis. Cependant, il peut être un peu plus lent.

8voto

Raj J Points 677

Option d'utilisation status=progress pour obtenir la progression du transfert.

En outre, conv=fsync affichera les erreurs d'E/S.

Exemple :

sudo dd if=mydistrib.iso of=/dev/sdb status=progress conv=fsync

7voto

Kostyantyn Points 556

Celui-ci force dd à fournir des statistiques toutes les 2 secondes, ce qui est le cas par défaut pour watch :

watch killall -USR1 dd

Pour passer de toutes les 2 secondes à toutes les 5 secondes, ajoutez l'option -n 5 comme ceci :

watch -n 5 killall -USR1 dd

4voto

zilch Points 36

J'aime beaucoup ddrescue, il fonctionne comme dd mais donne une sortie et n'échoue pas en cas d'erreur, au contraire il a un algorithme très avancé et essaie vraiment de faire une copie réussie... Il y a aussi beaucoup d'interfaces graphiques pour cela

Projet : https://www.gnu.org/software/ddrescue

Wikipedia : https://en.wikipedia.org/wiki/Ddrescue

enter image description here

3voto

midenok Points 692

J'ai créé un wrapper bash sur dd qui utilisera pv pour montrer le progrès. Mettez-le dans votre .bashrc et utiliser dd comme d'habitude :

# dd if=/dev/vvg0/root of=/dev/vvg1/root bs=4M
    2GB 0:00:17 [ 120MB/s] [===========================================================>] 100%            
0+16384 records in
0+16384 records out
2147483648 bytes (2.1 GB) copied, 18.3353 s, 117 MB/s

Source :

dd()
{
    local dd=$(which dd); [ "$dd" ] || {
        echo "'dd' is not installed!" >&2
        return 1
    }

    local pv=$(which pv); [ "$pv" ] || {
        echo "'pv' is not installed!" >&2
        "$dd" "$@"
        return $?
    }

    local arg arg2 infile
    local -a args
    for arg in "$@"
    do
        arg2=${arg#if=}
        if [ "$arg2" != "$arg" ]
        then
            infile=$arg2
        else
            args[${#args[@]}]=$arg
        fi
    done

    "$pv" -tpreb "$infile" | "$dd" "${args[@]}"
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X