Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/06/2011, à 13:38

compte supprimé

[Résolu] dcfldd où est la barre de progession ?

Bonjour la communauté,

J'aimerai créer des images iso de mes DVD en ligne de commande. Ma première idée était d'utiliser dd mais très causant. Après quelques recherches sur Google j' ai opté pour dcfldd, car il aurait la possibilité d'afficher une barre de progression.

Super ! je tape ma ligne de commande :

dcfldd if=/dev/dvd of=/home/orion79/test.iso

Le programme s’exécute mais pas de barre de progression.

Pourquoi la barre de progression ne s'affiche pas ?

NB Je suis sur Linux Mint 11

Dernière modification par Orion79 (Le 10/07/2011, à 09:15)

#2 Le 26/06/2011, à 14:03

Vysserk3

Re : [Résolu] dcfldd où est la barre de progession ?

Salut, moi j'ai juste ça qui apparaît après quelques secondes :

2304 blocks (72Mb) written.

avec les chiffres qui augmentent.

D'après le site officiel http://dcfldd.sourceforge.net/ :

Status output - dcfldd can update the user of its progress in terms of the amount of data transferred and how much longer operation will take.

Il n'y a donc pas de barre de progression à proprement parler.

Hors ligne

#3 Le 26/06/2011, à 14:19

compte supprimé

Re : [Résolu] dcfldd où est la barre de progession ?

Pourtant suite au recherche que j'ai fais plusieurs site en parle, par exemple :
Si dcfldd n'est pas installé, tu peux utiliser dd (de la même manière) mais tu n'auras pas de barre de progression, et c'est pas très sympa
extrait du siteduzero (voir vers le milieu de la page, post du 20/01/2011 à 19:28:30 )

J'y comprends plus rien a moins qu'il faille utiliser un programme comme Zenity ?

Dernière modification par Orion79 (Le 26/06/2011, à 14:23)

#4 Le 26/06/2011, à 14:50

Vysserk3

Re : [Résolu] dcfldd où est la barre de progession ?

Zenity, c'est pour des boîtes de dialogue graphique à afficher, tu pourrais éventuellement faire un truc en prenant le nombre de bloc écrit par  dcfldd puis en fonction de la taille totale à traiter, calculer le pourcentage total et l'afficher avec zenity.
Il y aussi ça dans le manuel :

status=[on|off]
              display a continual status message on stderr
              
              default state is "on"

statusinterval=N
              update the status message every N blocks

               default value is 256

En mettant un N plus petit que 256, tu auras une mise à jour de l'information plus régulière.


ps : au fait, je viens de me rendre compte que c'est la mauvaise section du forum pour poster ce genre de sujet. il faudrait déplacer le sujet wink

Hors ligne

#5 Le 30/06/2011, à 18:31

compte supprimé

Re : [Résolu] dcfldd où est la barre de progession ?

Vysserk3 a écrit :

ps : au fait, je viens de me rendre compte que c'est la mauvaise section du forum pour poster ce genre de sujet. il faudrait déplacer le sujet wink

Au tant pour moi mais, tu l'aurais posté dans quel section ???

Vysserk3 a écrit :

Zenity, c'est pour des boîtes de dialogue graphique à afficher, tu pourrais éventuellement faire un truc en prenant le nombre de bloc écrit par  dcfldd puis en fonction de la taille totale à traiter, calculer le pourcentage total et l'afficher avec zenity.

ça serai vraiment bien mais pour l'instant je n'ai aucune idée pour réaliser un tel code. Toute personne qui serait à même de me donner une piste est le bienvenu !

Dernière modification par Orion79 (Le 30/06/2011, à 18:31)

#6 Le 30/06/2011, à 20:17

Vysserk3

Re : [Résolu] dcfldd où est la barre de progession ?

Salut,
Désolé j'avais pas vu que tu repostais ton dernier message, il aurait mieux fallu utiliser un "up" comme on dit wink
Bon sinon, je ne comprend pas très bien, au départ tu veux faire un truc en ligne de commande, et après tu veux lui interfacer zenity, c'est normal ?
Sinon, j'ai regardé un peu plus le manuel de dcfldd, et effectivement avec cette commande on obtient un truc avec progression :

dcfldd sizeprobe=if statusinterval=5 if=/dev/dvd of=/home/orion79/test.iso

Le sizeprobe=if indique qu'il faut demander la taille totale à transférer à la source (if = input file) car ici elle est connue. Parfois il faut mettre of (output file) car on sait quelle taille on veut en sortie (contrôler avec le paramètre bs) et que la source provient d'un /dev/zero (des zéros) ou d'un /dev/random (aléatoire).

Le statusinterval=5 est le nombre de bloc au bout duquel il met à jour le statut. Il ne faut pas le mettre trop bas ni trop élevé.

Mais là déjà on obtient un truc plus en accord avec ce que tu voulais wink

Dernière modification par Vysserk3 (Le 30/06/2011, à 20:20)

Hors ligne

#7 Le 30/06/2011, à 20:58

compte supprimé

Re : [Résolu] dcfldd où est la barre de progession ?

Vysserk3 a écrit :

Salut,
Désolé j'avais pas vu que tu ripostais ton dernier message, il aurait mieux fallu utiliser un "up" comme on dit wink

Effectivement c'est plus simple...

Vysserk3 a écrit :

Salut,
Bon sinon, je ne comprend pas très bien, au départ tu veux faire un truc en ligne de commande, et après tu veux lui interfacer zenity, c'est normal ?

J'aurais dû peut-être précisé que je suis en train de faire un script bash (avec zenity) pour copier les DVD avec plusieurs options donc la possibilité de créer une image iso.
J'avais préciser en ligne de commande afin d'évité que des personnes me propose des programme graphique comme acidrip et cie qui dans le cas présent ne me sont pas utiles...

Vysserk3 a écrit :

Salut,
Sinon, j'ai regardé un peu plus le manuel de dcfldd, et effectivement avec cette commande on obtient un truc avec progression :

dcfldd sizeprobe=if statusinterval=5 if=/dev/dvd of=/home/orion79/test.iso

Mais là déjà on obtient un truc plus en accord avec ce que tu voulais wink

C'est du bon travail !!!  smile smile smile
Reste "plus" qu'a trouvé une commande pour récupérer la valeur de dcfldd en % et de l'envoyer vers Zenity... c'est reparti pour un tour de réfection et de recherche sur Google...

#8 Le 30/06/2011, à 22:07

Vysserk3

Re : [Résolu] dcfldd où est la barre de progession ?

C'est pas possible directement, car il faudrait que dcfldd renvoie en sortie un pourcentage pour le donner à zenity.
Donc je te donne une autre méthode pour faire ça (en gros) :
- Trouver un moyen de connaître la taille du fichier final avant de lancer dcfldd (pas trop dur, c'est la taille du DVD à récupérer d'une manière ou d'une autre.
- Ensuite, fournir zenity avec le retour de la commande du executé sur le fichier test.iso qui est en train d'être écrit. Voici un script bash qui fait ça (toute les demi secondes, il effectue la division de la taille courante (calculée par du) par la taille totale, convertit le tout en pourcentage (via bc car bash ne gère pas les float).


#!/bin/bash
while true
do 
        #taille courante en octets du fichier test.iso en traind d'être écrit...
        c=`du -b test.iso | cut -f 1`

       #taille totale à déterminer via une commande à trouver (en octets)         
        t=4699717632                             
 
       #chaîne contenant l'expression qui sera interprété par la calculatrice bc
        percent="100*$c/$t"                   

       #calcul via bc en interprétant la chaîne percent
        out=`echo "$percent" | bc -l`     
       
       #résultat sur la sortie standard, car zenity lit en entrée un pourcentage...
       echo $out                                     
      
       #faire ça toutes les demi secondes
        sleep 0.5                                        
done

Ensuite, il suffira de fournir à zenity --progress la sortie de ce script (que j'ai appelé size.sh ici) ainsi :

(./size.sh) | zenity --progress

Bon à ajuster selon ton cas, j'ai pas vérifié les effets de bords (comment sortir de la boucle à la fin, etc...) mais bon tu as l'idée.


ps : et du coup l'histoire de la commande dcfldd ne sert plus à rien, tu peux même continuer à utiliser la commande standard dd wink

Dernière modification par Vysserk3 (Le 30/06/2011, à 22:09)

Hors ligne

#9 Le 30/06/2011, à 22:27

compte supprimé

Re : [Résolu] dcfldd où est la barre de progession ?

Merci Vysserk3 !!! Avec ça je vais certainement enfin m’en sortir, je posterai le résultat dès que j'aurais réussi (il faut me laissé un peu de temps car moi être un gros noob en bash, mais je progresse chaque jour grâce à l'aide des autres et de la doc.. )

A+

#10 Le 01/07/2011, à 23:27

compte supprimé

Re : [Résolu] dcfldd où est la barre de progession ?

#! /bin/bash  

EXTRACTION()
{
chemin_image="/home/$USER/Bureau/image.iso"

while true   
do   
taille_dvd=`du -b -c /media/* | grep "total" | cut -f 1`
taille_iso=`du -b $chemin_image | cut -f 1`
percent="100*$taille_iso/$taille_dvd"
out=`echo "$percent" | bc -l`     
echo "$out %"
sleep 0.5  
done
}

EXTRACTION

Maintenant il faut que j'envoie tout ça à Zenity...

Dernière modification par Orion79 (Le 01/07/2011, à 23:49)

#11 Le 10/07/2011, à 09:06

compte supprimé

Re : [Résolu] dcfldd où est la barre de progession ?

Merci Vysserk3  pour ton aide.

Je poste la partie de mon script qui permet de ripper un DVD en iso. (avec le script final on pourra visionner, ripper, copier, graver les DVD !)

#!/bin/bash

##########################################################################
# gDVD6clone 0.0.3
##########################################################################

##########################################################################
# AUTEUR:       Orion79 ( http://www.linuxmint-fr.org/ et http://www.ubuntu-fr.org/ )
# DATE:         09/07/11
# VERSION:      0.0.3
# LICENSE:      GPL 
# NAME:         gDVD6clone
# DESCRIPTION:  lit, extrait et converti les DVD
# REQUIRES:     zenity, mplayer, lsdvd, dd   
##########################################################################

 
 
#########################################################################
# RAPPEL LEGAL
##########################################################################
#La copie de DVD peux être illégaux et interdit dans certains pays !!!!!

##########################################################################
#Vérification et installation paquet requis
##########################################################################
[[ -z `which zenity` ]] && xterm -T "GDVD6clone installation zenity" -e sudo apt-get install zenity
[[ -z `which mplayer` ]] && xterm -T "GDVD6clone installation mplayer" -e sudo apt-get install mplayer
[[ -z `which lsdvd` ]] && xterm -T "GDVD6clone installation lsdvd" -e sudo apt-get install lsdvd
[[ -z `which dd` ]] && xterm -T "GDVD6clone installation dd" -e sudo apt-get install dd
 
##########################################################################
#Option de débug
##########################################################################
set -xv 
 
##########################################################################
# FONCTION 
##########################################################################
ANNULER() 
{
if [ $? -eq 1 ]
then
exit 0
fi 
}
##########################################################################
LECTEUR_DVD()
{
shopt -s extglob # activation pattern étendus
recherche_lecteur_dvd=`find /dev/dvd?([[:digit:]])`
##########################################################################
CHOIX_LECTEUR_DVD
 
    while [ -z $lecteur_dvd ]
    do
    CHOIX_LECTEUR_DVD
    done
}
##########################################################################
CHOIX_LECTEUR_DVD()
{
lecteur_dvd=`zenity \
--list \
--title="GDVD6clone" \
--column "Choisisez votre lecteur DVD" \
--separator="/" \
$recherche_lecteur_dvd`
ANNULER
}
##########################################################################
DOSSIER_ENREGISTEMENT_ISO()
{
titre_dvd=`lsdvd $lecteur_dvd | grep ^"Disc Title" | awk -F" " '{print $3}'`
 
nom_copie_iso=`zenity \
--file-selection \
--title="GDVD6clone Choisisez un fichier de destination" \
--filename="/home/$USER/Bureau/$titre_dvd" \
--save`
ANNULER
}
##########################################################################
EXTRACTION()
{
titre_dvd=`lsdvd $lecteur_dvd | grep ^"Disc Title" | awk -F" " '{print $3}'`
 
device_dvd=$(readlink -m $lecteur_dvd)
chemin_dvd=`mount | grep ^"$device_dvd" | awk -F " " '{print $3}'`
echo $chemin_dvd
 
(while true
do
taille_dvd=`du -b -c $chemin_dvd | grep "total" | cut -f 1`
taille_iso=`du -b $nom_copie_iso.iso | cut -f 1`
#echo "$taille_iso sur $taille_dvd effectué"
echo -e "$((${taille_iso}*100/${taille_dvd}))% \n#Copie de $titre_dvd dans dossier /home/$USER/Bureau/$titre_dvd effectuer à $((${taille_iso}*100/${taille_dvd}))%"
 
sleep 1
done) | zenity --progress --width 600 --auto-close
 
# option arrêt processus si annuler
kill_dd=`ps -u $USER | grep "dd" | awk -F " " '{print $1}'`
 
if [ $? -eq 1 ]
echo $?
then 
kill $kill_dd
ANNULER
fi
}
##########################################################################
DD()
{
dd if=$lecteur_dvd of=$nom_copie_iso.iso | EXTRACTION 
exit 0
}
 
##########################################################################
# Corps du script 
##########################################################################

LECTEUR_DVD
DOSSIER_ENREGISTEMENT_ISO
DD
 
##########################################################################

Dernière modification par Orion79 (Le 10/07/2011, à 18:29)

#12 Le 13/07/2011, à 16:03

Vysserk3

Re : [Résolu] dcfldd où est la barre de progession ?

Au fait, au hasard d'une navigation sur commandlinefu.com, j'ai trouvé ça : http://www.commandlinefu.com/commands/v … -from-disk.
Et d'après l'auteur, il faudrait en fait plutôt utiliser readom :

Many like to use 'dd' for creating CD/DVD iso images. This is bad. Very bad. The reason this is, is 'dd' doesn't have any built-in error checking. So, you don't know if you got all the bits or not. As such, it is not the right tool for the job. Instead, 'reaom' (read optical media) from the wodim package is what you should be using. It has built-in error checking. Similarly, if you want to burn your newly creating ISO, stay away from 'dd', and use:
wodim -v -eject /path/to/image.iso

Peut être que tu devrais adapter ton script ? Surtout que c'est pratiquement rien à changer wink

Dernière modification par Vysserk3 (Le 13/07/2011, à 16:04)

Hors ligne