DD : récupérer l'avancement


#1

Hello à toutes et tous,

Je cherche une méthode pour récupérer l’avancement lorsque je fais un DD.

C’est à dire, ne pas suivre en direct ( comme le propose l’option status=progress),
mais récupérer l’état d’avancement dans un fichier texte par exemple.

J’arrive à le faire lorsque je décompresse une archive :

#fichier maj
if sudo 7z l $maj_fichier_full_rar | grep $maj_fichier_full_name ;then
	echo "ok"
else
	sudo rm -rf /StockImg/*
	return_result "Contenu archive incorrecte// MAJ PATCH"
	return 2
fi
	#fichier version
if sudo 7z l $maj_fichier_full_rar | grep $maj_scriptversion_name ;then
	echo "ok"
else
	sudo rm -rf /StockImg/*
	return_result "Contenu archive incorrecte// MAJ PATCH"
	return 2
fi
sleep 3

echo "Commencer extraction"
sudo python $lcd_maj_suivi "full" "Extraction maj" "non"
sleep 3

taille_finale=$(sudo 7z l $maj_fichier_full_rar | sudo grep $maj_fichier_full_name | sudo tr -s ' ' ';' | sudo cut -d';' -f4 )
echo $taille_finale

taille_intermediaire=1
echo $taille_intermediaire

sudo 7z x $maj_fichier_full_rar | while [ $taille_finale -ne $taille_intermediaire ] ;do
	if [ -f $maj_fichier_full ];then
		taille_existant=$(du -b $maj_fichier_full | awk '{ print $1 }')
		taille_intermediaire=$taille_existant
		
		taille_tempsreel=$(($taille_existant*100/$taille_finale))"%"
		sudo python $lcd_maj_suivi "full" $taille_tempsreel "oui"
		
		echo $taille_finale
		echo $taille_existant
		echo $taille_tempsreel
	else
		((taille_intermediaire++))
	fi
done

Quelque-chose de ce genre là :slight_smile:

C’est pour permettre de diffuser l’information sur mon écran, monté sur les GPIO.
Je récupère cette information pour la passer dans mon script python.

Merci par avance :slight_smile:


#2

Bonjour,
Je ne suis pas un spécialiste des scripts, mais en faisant un df sur la cible tu pourrais, peut-être, avoir un truc…


#3

Bonjour

L’option status=progress de la commande dd
permet d’afficher quelques informations
en cours de création du fichier de sortie :

root@debg53sw:~# dd if=/dev/sdb of=fichierImageSdb.img bs=4096 status=progress
40882176 bytes (41 MB, 39 MiB) copied, 4,0006 s, 10,2 MB/s

root@debg53sw:~# 

Une autre solution consiste à
installer le paquetage nommé pv

Ci-dessous, un exemple de ligne de commandes utilisant pv
qui affiche une barre de progression
pendant la création par dd du fichier image de ma clef USB

root@debg53sw:~# pv -tpreb /dev/sdb | dd of=clefUsb4GB.img bs=4096 
1,21GiO 0:03:16 [3,55MiB/s] [================>                                         ] 31% ETA 0:07:03

#4

Pour pouvoir récupérer l’avancement à un instant donné, sans le suivre en temps réel, je pense que je bricolerais quelque chose utilisant stat, du, ls ou un autre outil dans ce style pour comparer la taille de la source et celle de la destination.

Pour obtenir la taille en octets d’un fichier :

stat --format='%s' $fichier
du --bytes $fichier | cut --fields=1
ls --format=verbose $fichier | awk '{ print $5 }'

#5

rediriger la sortie de dd dans un fichier texte

dd if=/dev/sdb of=fichierImageSdb.img bs=4096 status=progress > resul_dd.txt

#6

Hello
Merci pour ta réponse :slight_smile:

J’ai déjà essayé mais rien ne sort dans le fichier texte :frowning:


#7

Hello
Merci pour ta réponse :slight_smile:

L’option status=progress est très pratique mais ne permet pas de récupérer l’état du transfert pour pouvoir être exploiter.

En fait, je cherche à récupérer l’info sur létat du transfert pour la transmettre dans un script python :slight_smile:


#8

Je te propose :

dd if=/dev/sdb of=fichierImageSdb.img bs=4096 status=progress 2> resul_dd.txt

Amicalement.

Jean-Marie


#9

Au top :slight_smile:

petite question pourquoi le 2> ?

merci encore :slight_smile:


#10

Forcer un script bash à s'arrêter après une certaine durée
#11

Grantoubab a donné la réponse.

Pour ne pas interférer avec la sortie standard de la commande, status sort sur la sortie d’erreur.

2>resul_dd.txt sert donc à rediriger la sortie d’erreur vers le fichier resul_dd.txt.

Cependant, il y a d’autres méthodes pour récupérer l’avancement de la commande dd :

https://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/

Amicalement.

Jean-Marie