42 votes

Y a-t-il une méthode pour obtenir un pourcentage sur un DD en linux?

Voici ce qui se passe.

J'ai commencé une sauvegarde d'un disque sur mon serveur via une clé USB Linux live. J'ai commencé à copier le premier disque avec la commande dd de base ; simplement sudo dd if=/dev/sda of=/dev/sdc1 et puis je me suis souvenu que cela laissait juste la console vide jusqu'à ce que cela se termine.

J'avais besoin d'exécuter une sauvegarde différente sur le même disque de toute façon, alors j'ai également commencé celui-là avec sudo dd if=/dev/sdb of=/dev/sdc3 status=progress et ensuite j'ai obtenu une ligne de texte qui indique le taux de transfert actuel ainsi que le progrès en octets.

J'espérais une méthode qui montre un pourcentage de la sauvegarde au lieu de faire le calcul du nombre d'octets sauvegardés sur 1,8 To. Y a-t-il un moyen plus facile de le faire que status=progress ?

69voto

Hastur Points 17791

Voir les réponses de cette question [1]

pv

Par exemple, vous pouvez utiliser pv avant de commencer

sudo apt-get install pv    # si vous ne l'avez pas
pv < /dev/sda > /dev/sc3   # il est dit que c'est plus rapide
pv /dev/sda > /dev/sc3     # il semble avoir la même vitesse que le précédent
#ou 
sudo dd if=/dev/sda | pv -s 1844G | dd of=/dev/sdc3  # Peut-être plus lent

Sortie [2]:

440MB 0:00:38 [11.6MB/s] [======>                             ] 21% ETA 0:02:19

Remarques :
Surtout pour les fichiers volumineux, vous voudrez peut-être consulter man dd et définir les options nécessaires pour accélérer tout sur votre matériel, par exemple bs=100M pour définir le tampon, oflag=sync pour compter les octets écrits efficacement, peut-être direct...
L'option -s prend uniquement des paramètres entiers donc 1.8T-->1844G.
Comme vous pouvez le remarquer à partir des premières lignes, vous n'avez pas du tout besoin de dd.


kill -USR1 pid

Si vous avez déjà lancé la commande dd, une fois que vous avez identifié son PID (Ctrl-Z + bg et vous le lisez, ou pgrep ^dd...), vous pouvez envoyer un signal USR1 (ou SIGUSR1, ou SIGINFO voir ci-dessous) et lire la sortie.
Si le PID du programme est 1234 avec

kill -USR1 1234

dd répondra sur le terminal de son STDERR avec quelque chose de similaire à

4+1 enregistrements in
4+0 enregistrements out
41943040 octets (42 Mo) copiés, 2,90588 s, 14,4 Mo/s

Avertissement : Sous OpenBSD, vous pourriez devoir vérifier à l'avance le comportement de kill[3] : utilisez plutôt
kill -SIGINFO 1234.
Il existe la sigaction nommée SIGINFO. Le SIGUSR1, dans ce cas, devrait terminer le programme (dd)...
Sous Ubuntu, utilisez -SIGUSR1 (10).

39voto

Crunchy Points 26

Mon outil de prédilection pour ce genre de choses est progress :

Cet outil peut être décrit comme une commande C minuscule, sale, fonctionnant uniquement sous Linux et OSX, qui recherche les commandes de base coreutils (cp, mv, dd, tar, gzip/gunzip, cat, etc.) actuellement en cours d'exécution sur votre système et affiche le pourcentage des données copiées. Il peut également montrer le temps estimé et le débit de données, et fournit un mode "top" (surveillance).

progress en action" capture d'écran >

Il scanne simplement /proc pour trouver des commandes intéressantes, puis regarde les répertoires fd et fdinfo pour trouver les fichiers ouverts et les positions des curseurs, et rapporte le statut pour le plus gros fichier.

Il est très léger et compatible avec pratiquement n'importe quelle commande.

Je le trouve particulièrement utile car :

  • par rapport à pv en tuyau ou dcfldd, je n'ai pas à me rappeler d'exécuter une commande différente lorsque je lance l'opération, je peux surveiller les choses après coup ;
  • par rapport à kill -USR1, il fonctionne avec pratiquement n'importe quelle commande, je n'ai pas à vérifier constamment le manuel pour m'assurer que je ne tue pas accidentellement la copie ; de plus, c'est agréable que, lorsqu'il est invoqué sans paramètres, il affiche la progression pour n'importe quelle commande de "transfert de données" courante en cours d'exécution, donc je n'ai même pas à rechercher le PID ;
  • par rapport à pv -d, encore une fois je n'ai pas besoin de rechercher le PID.

27voto

Exécutez dd, puis, dans un shell séparé, invoquez la commande suivante :

pv -d $(pidof dd) # root may be required

Cela permettra à pv d'obtenir des statistiques sur tous les descripteurs de fichiers ouverts du processus dd. Il vous montrera à la fois où se situent les tampons de lecture et d'écriture.

10voto

twelve17 Points 158

Il existe une alternative à dd : dcfldd.

dcfldd est une version améliorée de GNU dd avec des fonctionnalités utiles pour la criminalistique et la sécurité.

Sortie de statut - dcfldd peut informer l'utilisateur de son avancement en termes de quantité de données transférées et de la durée restante de l'opération.

dcfldd if=/dev/zero of=out bs=2G count=1 # fichier de test
dcfldd if=out of=out2 sizeprobe=if
[80% de 2047Mo] 52736 blocs (1648Mo) écrits. 00:00:01 restant.

http://dcfldd.sourceforge.net/
https://linux.die.net/man/1/dcfldd

6voto

Sirex Points 10734

En pourcentage, vous devriez faire un peu de mathématiques, mais vous pouvez obtenir la progression d'un dd sous forme lisible par l'homme, même après avoir déjà démarré, en faisant kill -USR1 $(pidof dd)

Le processus dd actuel s'affichera de manière similaire :

11117279 octets (11 Mo, 11 Mio) copiés, 13.715 s, 811 ko/s

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