Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[RESOLU] Image d'une partition par bloc
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
skerain
n00b
n00b


Joined: 21 Feb 2009
Posts: 2

PostPosted: Sat Feb 21, 2009 11:51 pm    Post subject: [RESOLU] Image d'une partition par bloc Reply with quote

Bonjour,

J'ai une partition démontée sur un serveur sur internet (OVH Gentoo Release 2). Je dois en récupérer une image pour tenter de restaurer des fichiers importants stockés dedans. Cette partition a une taille de 165Go. N'ayant pas suffisamment d'espace sur le serveur, je dois la copier sur un serveur NFS distant (Windows XP / Allegro). J'ai donc lancé la commande :
Code:
dd if=/dev/<partition> of=/mnt/<partage NFS> bs=2M
.
Mon problème est que j'ai peur que malgré un débit moyen de 450ko/s, la copie n'arrive pas au bout (durée > 5 jours).

a) Comment dans ce cas saucissonner cette image de telle sorte que je puisse ne reprendre que la dernière partie téléchargée si j'ai un problème ?

Je pense que la commande dd me permet cela mais j'ai une contrainte de temps assez forte et s'il s'avère que je me suis trompé, je repars pour une semaine de téléchargement sans assurance que je fais bien.

b) Comment m'assurer que la copie est conforme à l'originale une fois les morceaux recollés sur le serveur NFS ?

Je pense à md5 ou autre pour contrôler que la copie est conforme à l'originale.

Merci d'avance pour vos réponses. :)


Last edited by skerain on Sun Feb 22, 2009 9:46 am; edited 1 time in total
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1906
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Sun Feb 22, 2009 1:14 am    Post subject: Reply with quote

Il y a quelques mois, sur ce forum, quelqu'un souhaitais saucissoner un gros fichier en plusieurs morceaux sur lesquelles on pourrait vérifier l'intégrité avant de passer au suivant. Du coup, j'avais pondu ce script :
safe-cp:
!/bin/bash

BLOCK=2000
CHECKSUM="sha1sum"

if [ -z "$2" ]
then
    echo "Usage: safe-cp src dest"
    exit 64
fi

rm "$2" 2> /dev/null
offset=0
isize=`wc -c "$1" | awk '{print $1}'`
osize=0
while [ $osize -ne $isize ]
do
    dd if="$1" of="$2" skip=$offset seek=$offset count=$BLOCK 2> /dev/null
    if [ `dd if="$1" skip=$offset count=$BLOCK 2> /dev/null | $CHECKSUM | awk '{print $1}'` = `dd if="$2" skip=$offset count=$BLOCK 2> /dev/null | $CHECKSUM | awk '{print $1}'` ]
    then
   osize=`wc -c "$2" | awk '{print $1}'`
   offset=`expr $offset + $BLOCK`   
    fi
done


Si tu ne veux pas de la vérification, il suffit d'enlever quelques lignes :
block-cp:
!/bin/bash

BLOCK=2000

if [ -z "$2" ]
then
    echo "Usage: safe-cp src dest"
    exit 64
fi

rm "$2" 2> /dev/null
offset=0
isize=`wc -c "$1" | awk '{print $1}'`
osize=0
while [ $osize -ne $isize ]
do
    dd if="$1" of="$2" skip=$offset seek=$offset count=$BLOCK 2> /dev/null
    osize=`wc -c "$2" | awk '{print $1}'`
    offset=`expr $offset + $BLOCK`   
done


La variable BLOCK te permet de régler la taille du bloc que tu cherches à copier. La valeur 2000 est probablement bien trop petite (elle était pensée pour l'envoi via un medium entraînant beaucoup de perte/corruption). Si tu veux y aller par coup de Mo, tu peux mettre "BLOCK=1M". Maintenant je me demande si tout cela est bien nécessaire. Je crois que, si tu la copie s'arrête, tu peux, à partir de la taille du fichier destination, reprendre là où ça s'est arrêté (avec les options seek et skip de dd).


Last edited by Magic Banana on Sun Feb 22, 2009 9:52 pm; edited 1 time in total
Back to top
View user's profile Send private message
skerain
n00b
n00b


Joined: 21 Feb 2009
Posts: 2

PostPosted: Sun Feb 22, 2009 9:46 am    Post subject: Reply with quote

MERCI ! :)
Back to top
View user's profile Send private message
Jamesbch
Apprentice
Apprentice


Joined: 30 Sep 2007
Posts: 185

PostPosted: Sun Feb 22, 2009 6:45 pm    Post subject: Reply with quote

Bonjour,

Je ne suis pas expert en bash mais il me semble qu'il y a une faute dans le script bash. Je peux me tromper et désolé si c'est le cas. Il semblerait que la condition du if ne controle que $1 avec $1 mais il faut controler $1 et $2 plutôt non ?

Code:
if [ `dd if="$1" skip=$offset count=$BLOCK 2> /dev/null | $CHECKSUM | awk '{print $1}'` = `dd if="$1" skip=$offset count=$BLOCK 2> /dev/null | $CHECKSUM | awk '{print $1}'` ]


La chose à corriger c'est après le = on a dd if="$1" mais ce ne serait pas plutôt dd if="$2" dans ce cas ?
Désolé encore si j'ai mal compris.

Et bonne chance pour ta sauvegarde skerain ! :)
_________________
Desktop: Gigabyte EX38-DS4, Intel Q9450 2.6 GHz, 4 GiB DDR2, Nnvidia GTX 285.
Home-Server: Gigabyte 945GCM-S2L, Intel E2180 2.2 GHz, 2 GiB DDR2, Intel 82945G.
Laptop: Asus 1215N, Atom D525 1.4 Ghz, 2 GiB, Intel + Ion2
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1906
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Sun Feb 22, 2009 9:52 pm    Post subject: Reply with quote

Tu as raison. C'est corrigé. :wink:
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum