web-dev-qa-db-fra.com

Existe-t-il une méthode pour obtenir un pourcentage sur un DD sous Linux?

Alors, voici ce qui se passe.

J'ai commencé une sauvegarde d'un lecteur sur mon serveur via une clé USB Linux Live. J'ai commencé à copier le premier disque avec la commande dd Vanilla; juste Sudo dd if=/dev/sda of=/dev/sdc1 et puis je me suis rappelé que cela ne laisse que la console vierge jusqu'à ce qu'elle se termine.

De toute façon, je devais exécuter une sauvegarde différente sur le même lecteur. J'ai donc lancé celle-ci également avec Sudo dd if=/dev/sdb of=/dev/sdc3 status=progress, puis une ligne de texte indiquant le taux de transfert actuel ainsi que la progression en octets.

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

43
user865814

Voir les réponses à cette question [ 1 ]

pv

Par exemple, vous pouvez utiliser pv avant de commencer

Sudo apt-get install pv    # if you do not have it
pv < /dev/sda > /dev/sc3   # it is reported to be faster
pv /dev/sda > /dev/sc3     # it seems to have the same speed of the previous one
#or 
Sudo dd if=/dev/sda | pv -s 1844G | dd of=/dev/sdc3  # Maybe slower 

Sortie [ 2 ]:

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

Notes:
Pour les fichiers volumineux en particulier, vous voudrez peut-être consulter man dd et définir les options nécessaires pour accélérer toutes les opérations sur votre matériel, par exemple. bs=100M pour définir le tampon, oflag=sync pour compter les octets effectifs écrits, peut-être direct...
L'option -s accepte uniquement les paramètres entiers, donc 1.8T-->1844G.
Comme vous pouvez le constater dès les premières lignes, vous n'avez absolument pas besoin de dd.


kill -USR1 pid

Si vous avez déjà lancé la commande dd, une fois que vous avez individualisé 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 le résultat.
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 records in
4+0 records out
41943040 bytes (42 MB) copied, 2.90588 s, 14.4 MB/s

Avertissement: Sous OpenBSD, vous devrez peut-être vérifier à l'avance le comportement de kill[]: utiliser à la place
kill -SIGINFO 1234.
Il existe la sigaction nommée SIGINFO. LeSIGUSR1, dans ce cas, devrait terminer le programme (dd) ...
Sous Ubuntu, utilisez -SIGUSR1 (10).

69
Hastur

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

Cet outil peut être décrit comme une commande C Tiny , Sale, Linux-et-OSX-Only recherchant les commandes de base de coreutils (cp, mv, jj, tar, gzip/gunzip, cat, etc.) en cours d'exécution sur votre système et affiche le pourcentage des données copiées. Il peut également afficher heure estimée et débit , et fournit un mode "top-like" (surveillance).

 "<code>progress</code> in action" screenshot

Il scanne simplement /proc pour trouver des commandes intéressantes, puis examine les répertoires fd et fdinfo pour trouver les fichiers ouverts, rechercher des positions et signaler l'état du fichier le plus volumineux.

Il est très léger et compatible avec pratiquement toutes les commandes.

Je le trouve particulièrement utile pour les raisons suivantes:

  • comparé à pv dans le pipe 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 éléments après coup;
  • comparé à kill -USR1, il fonctionne avec pratiquement toutes les commandes. Je n'ai pas besoin de toujours vérifier la page de manuel pour être sûr que je ne tue pas accidentellement la copie. de plus, c’est agréable de voir que, lorsqu’il est appelé sans paramètre, il affiche la progression de toute commande courante de «transfert de données» en cours d’exécution, de sorte que je n’ai même pas besoin de rechercher le PID;
  • comparé à pv -d, encore une fois, je n'ai pas besoin de rechercher le PID.
37
Matteo Italia

Exécutez dd, puis, dans un shell distinct, appelez la commande suivante:

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

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

24
sleblanc

Il existe une alternative à dd: dcfldd.

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

Etat de la sortie - dcfldd peut mettre à jour l’utilisateur de ses progrès en termes de quantité de données transférées et de durée de fonctionnement prolongée.

dcfldd if=/dev/zero of=out bs=2G count=1 # test file
dcfldd if=out of=out2 sizeprobe=if
[80% of 2047Mb] 52736 blocks (1648Mb) written. 00:00:01 remaining.

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

9
Antonin Décimo

En pourcentage, vous devrez faire des calculs, mais vous pouvez obtenir la progression d'un jj sous une forme lisible par l'homme, même après avoir déjà commencé, en effectuant kill -USR1 $(pidof dd)

Le processus actuel de la DD s'affichera de la manière suivante:

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

7
Sirex