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 dd
commande vanilla; juste sudo dd if=/dev/sda of=/dev/sdc1
et puis je me suis souvenu que cela laisse juste 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 disque. J'ai donc démarré celle-ci également 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 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 faire cela que status = progress?
la source
dd
tous leswrite()
appels système étaient déjà terminés etfsync
ouclose
bloqués dans l'attente des écritures. Avec une clé USB lente, les seuils de mémoire tampon d'entrée / sortie Linux par défaut concernant la taille des mémoires tampons d'écriture modifiées conduisent à un comportement qualitativement différent de celui obtenu avec des fichiers volumineux sur des disques rapides, car les mémoires tampons sont aussi grandes que ce que vous copiez. prend encore du temps perceptible.dd
sont vraiment intéressants, surtout pour les serveurs sur lesquels vous ne pouvez pas / ne voulez pas installerpv
Mon outil de prédilection pour ce genre de choses est
progress
:Je le trouve particulièrement utile car:
pv
in pipe oudcfldd
, 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;kill -USR1
, cela fonctionne sur pratiquement n'importe quelle commande, je n'ai pas besoin de toujours vérifier la page de manuel pour être sûr de ne pas tuer accidentellement la copie; de plus, il est intéressant de noter que, lorsqu'il est appelé sans paramètre, il affiche la progression de la commande courante "transfert de données" en cours d'exécution, de sorte que je n'ai même pas à rechercher le PID;pv -d
, encore une fois, je n'ai pas besoin de rechercher le PID.la source
--command <command-name>
.Exécutez
dd
ensuite, dans un shell séparé, appelez la commande suivante:Cela fera que pv obtienne des statistiques sur tous les descripteurs de fichiers ouverts du
dd
processus. Il vous montrera à la fois où se trouvent les tampons de lecture et d’écriture.la source
/proc/$PID/fdinfo
les positions des fichiers et/proc/$PID/fd
de voir quels fichiers (et donc les tailles). Donc oui, très cool et bonne idée pour une fonctionnalité, mais je ne l'appellerais pas "incroyable" car il y a des API Linux qui permettent de sonder les positions de fichier d'un autre processus.pv
pipelines à l'avance.) Bien sûr, j'en ai pensé autant une fois que j'ai vu que cela fonctionnait.Il y a une alternative à
dd
:dcfldd
.http://dcfldd.sourceforge.net/
https://linux.die.net/man/1/dcfldd
la source
En pourcentage, vous devez faire des calculs, mais vous pouvez obtenir la progression d’un jj sous une forme lisible par l’être humain, même après avoir déjà commencé, en effectuant les opérations suivantes:
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
la source
status=progress
donne