Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[BASH] Copie de fichier / controle d'intégrité (resolu)
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
anonjoe
Guru
Guru


Joined: 02 Oct 2003
Posts: 316

PostPosted: Thu Nov 08, 2007 7:06 pm    Post subject: [BASH] Copie de fichier / controle d'intégrité (resolu) Reply with quote

Bonjour,
Je voudrais savoir si il existe une alternative a la commande "cp", qui me permettent de copier un gros fichier (+ de 6 Go) d'un disque dur vers un autre, de façon a être sur que l'intégrité du fichier soit respecté.

J'ai pensé qu'utilisé scp pourrais répondre a mes besoin, mais je n'en suis pas sur.

Merci


Last edited by anonjoe on Mon Nov 12, 2007 2:21 pm; edited 1 time in total
Back to top
View user's profile Send private message
GentooUser@Clubic
l33t
l33t


Joined: 01 Nov 2004
Posts: 829

PostPosted: Thu Nov 08, 2007 7:15 pm    Post subject: Reply with quote

Heu SCP c'est pas pour le transfert sécurisé via SSH ?
un md5sum du fichier source puis de la copie, tu peut mettre ça dans un script pour automatiser le tout. Mais pour un fichier de 6go le calcul risque d'être assez long !

Sinon rsync ne vérifie pas l'intégrité des données ?
Back to top
View user's profile Send private message
anonjoe
Guru
Guru


Joined: 02 Oct 2003
Posts: 316

PostPosted: Thu Nov 08, 2007 7:47 pm    Post subject: Reply with quote

GentooUser@Clubic wrote:
Heu SCP c'est pas pour le transfert sécurisé via SSH ?

Si la copie se fera dans un tunnel ssh, mais c'est pas grave je ne pense pas que ca ralentisse la copie sensiblement. Et étant donné que c'est prévu pour du réseau je me dis que le controle de l'intégrité doit être meilleur qu'avec cp.
Back to top
View user's profile Send private message
guilc
Bodhisattva
Bodhisattva


Joined: 15 Nov 2003
Posts: 3326
Location: Paris - France

PostPosted: Thu Nov 08, 2007 9:11 pm    Post subject: Reply with quote

anonjoe wrote:
GentooUser@Clubic wrote:
Heu SCP c'est pas pour le transfert sécurisé via SSH ?

Si la copie se fera dans un tunnel ssh, mais c'est pas grave je ne pense pas que ca ralentisse la copie sensiblement. Et étant donné que c'est prévu pour du réseau je me dis que le controle de l'intégrité doit être meilleur qu'avec cp.

Si, passer par scp ça ralentit beaucoup ! et ton CPU en prend un sacré coup. C'est déjà super difficile de remplir un lien 100Mbits en scp, a moins d'avoir une machine super costaud, alors des disques physiques sans réseau au milieu...

cp ASSURE l'intégrité, parceque les drivers de FS du noyaux ne fournissent pas de la cochonnerie ! pas besoin de plus.
Au pire, tu peux faire des md5sum, mais le fait que la commande cp ne balance pas d'erreur d'IO est suffisant pour affirmer que le fichier n'est pas endommagé...
Ca serait plutot très grave que cp ne soit pas fiable. Au delà de la copie, ça signifierait que les lectures/écritures sur les disques ne sont pas fiable, et ce n'est carrément pas admissible... (linux serait déjà mort dans ce cas...)
_________________
Merci de respecter les règles du forum.

Mon site perso : https://www.xwing.info
Mon PORTDIR_OVERLAY : https://gentoo.xwing.info ou layman -a xwing
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Nov 08, 2007 9:27 pm    Post subject: Reply with quote

d'accord avec toi, mais j'ai déjà eu des probz:

tu copie via cp sur un dur, tout va bien ... le problème se situe à la relecture => trop tard ... Faut relire le fichier pour etre sur ...
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
anonjoe
Guru
Guru


Joined: 02 Oct 2003
Posts: 316

PostPosted: Thu Nov 08, 2007 9:47 pm    Post subject: Reply with quote

En fait j'ai eu un soucis sur une iso de 6Go que j'ai copier sur un disque NTFS monter par ntfs-3g.
J'men suis apperçu trop tard.

Au pire je ferais un checksum ap la copie, mais si c'est foireux faut tout recommencer...
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


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

PostPosted: Thu Nov 08, 2007 9:48 pm    Post subject: Reply with quote

Je pense que faire un simple cp est suffisant. Utilise md5 pour te rassurer si tu le souhaites. Fait attention au système de fichiers vers lequel tu copies. Certains (FAT32 par exemple) ne peuvent héberger ton fichier en un morceau.

Si tu tiens tellement a l'envoyer par petits morceaux (chacun vérifié par md5), fais toi un script bash à base de dd (avec les opérandes skip, seek et count). Je peux même te le faire si tu y tiens. Mais je crois vraiment que cp fera la job sans problème.
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Nov 08, 2007 10:01 pm    Post subject: Reply with quote

le md5 est une très bonne solution en fait, ca va forcer l'ordi à relire la copie ;) ce qui détecterais le problème que j'ai eu 8)
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


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

PostPosted: Thu Nov 08, 2007 11:32 pm    Post subject: Reply with quote

Bon j'étais motivé pour te pondre un script. Le voilà donc :
safe-cp:
#!/bin/bash

BLOCK=2000
CHECKSUM="sha1sum"

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

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
    dd if="$1" of="$1.tmp" skip=$offset count=$BLOCK 2> /dev/null
    dd if="$2" of="$2.tmp" skip=$offset count=$BLOCK 2> /dev/null
    if [ `$CHECKSUM "$1.tmp" | awk '{print $1}'` = `$CHECKSUM "$2.tmp" | awk '{print $1}'` ]
    then
   osize=`wc -c "$2" | awk '{print $1}'`
   offset=`expr $offset + $BLOCK`   
    fi
done
rm "$1.tmp" "$2.tmp"
exit 0


Tu peux changer la fonction de checksum utilisée en changeant le contenu de la variable CHECKSUM. Par exemple tu peux y mettre "md5sum". Nettement plus important, tu peux changer la taille des segments qui sont envoyé et vérifiés à mesure à l'aide de la variable BLOCK. Comme son nom l'indique il s'agit d'une taille en block (sur mon ext3 un bloc mesure 512 octets). Il s'agit de deviner la valeur optimale en fonction du taux d'erreur. Pas facile... Si tu transmets des tout petits blocks tu vas faire énormément de checksums et le temps de transfert sera énormément augmenté. Si le taux d'erreur fait qu'il y a toujours une erreur dans chaque segment envoyé, la copie n'avancera pas.

Donne en moi des nouvelles ! :wink: [/code]
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


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

PostPosted: Fri Nov 09, 2007 8:30 am    Post subject: Reply with quote

Bon j'en ai pas dormis cette nuit de ce script ! :lol: En fait je ne suis pas certain que la taille d'un bloc soit identique sur n'importe quel système de fichiers, sur n'importe quel disque... mais je crois que si. Essaie tout de même d'envoyer d'abord un petit fichier (choisis BLOCK de manières à ce qu'il y ait plusieurs segments) et voit si tout va bien (si ça va mal, le script ne s'arrêtera pas tout seul : Ctrl + C).

Sinon, il y avait un problème dans le cas où tu copiais vers un fichier existant et de taille supérieure (OK vue la taille de ton fichier ce serait étonnant). J'ai rajouter le rm qui va bien en début de script. Enfin j'ai laissé l'approche fichiers temporaires pour des pipes. Je pensais au début que cela éviterait de copier trois fois le fichier (deux sont des copies de contôle d'intégrité) mais en fait non ! Enfin, pour être plus précis, je crois que le bash fixe une limite quand à la taille d'un pipe (et que c'est 8 blocs par défaut) et que tu ne veux pas rester sous cette limite (trop de petits segments).

Bref, voilà le script corrigé :
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="$1" 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
exit 0
Back to top
View user's profile Send private message
guilc
Bodhisattva
Bodhisattva


Joined: 15 Nov 2003
Posts: 3326
Location: Paris - France

PostPosted: Fri Nov 09, 2007 9:17 am    Post subject: Reply with quote

anonjoe wrote:
En fait j'ai eu un soucis sur une iso de 6Go que j'ai copier sur un disque NTFS monter par ntfs-3g.
J'men suis apperçu trop tard.

Bah voila, quand on utilise du bricolage aussi... C'est pas de la même qualité que les drivers inclus dans le noyau ça, on ne peut pas lui demander la même fiabilité... ET dans ce cas précis, scp ne changera strictement rien, c'est le driver au moment de l'écriture qui a fait les erreurs, pas cp...
_________________
Merci de respecter les règles du forum.

Mon site perso : https://www.xwing.info
Mon PORTDIR_OVERLAY : https://gentoo.xwing.info ou layman -a xwing
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Fri Nov 09, 2007 10:03 am    Post subject: Reply with quote

guilc wrote:
C'est pas de la même qualité que les drivers inclus dans le noyau ça

Les drivers NTFS dans le noyau ils ne savent pas bien écrire sur du ntfs il me semble, en tout cas ça foire encore plus facilement la-dite partoche.
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
GaMeS
Guru
Guru


Joined: 08 Nov 2005
Posts: 374
Location: Nantes

PostPosted: Fri Nov 09, 2007 10:53 am    Post subject: Reply with quote

kwenspc wrote:

Les drivers NTFS dans le noyau ils ne savent pas bien écrire sur du ntfs il me semble, en tout cas ça foire encore plus facilement la-dite partoche.


+1, les drivers disponible dans portage sont régulièrement mis à jour ce qui n'est pas le cas dans le noyau.
_________________
$this->setLife(FALSE);
printf "I'm not a gamer !";
Back to top
View user's profile Send private message
guilc
Bodhisattva
Bodhisattva


Joined: 15 Nov 2003
Posts: 3326
Location: Paris - France

PostPosted: Fri Nov 09, 2007 11:48 am    Post subject: Reply with quote

Pardon, je me suis mal fait comprendre :lol:
Je pensais aux "VRAIS" drivers de FS en écrivant ça, du genre ext, XFS, Reiserfs, JFS... certainement pas le driver NTFS du noyau :wink:
_________________
Merci de respecter les règles du forum.

Mon site perso : https://www.xwing.info
Mon PORTDIR_OVERLAY : https://gentoo.xwing.info ou layman -a xwing
Back to top
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Fri Nov 09, 2007 2:12 pm    Post subject: Reply with quote

C'est peut être une connerie mais pourquoi ne pas la copie par rsync ? ça marche très bien en local, et s'assure de l'intégrité.
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


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

PostPosted: Fri Nov 09, 2007 2:31 pm    Post subject: Reply with quote

Bapt wrote:
C'est peut être une connerie mais pourquoi ne pas la copie par rsync ? ça marche très bien en local, et s'assure de l'intégrité.


Euh... C'est pas que je suis mégalo mais le script que j'ai pondu fait exactement ce qu'il veut et rien d'autre (man dd peut vous aider à vous en convaincre si vous ne me faites pas confiance) : au lieu de copier le fichier entier et de vérifier a posteriori de l'intégrité, le fichier est envoyé par morceau (de taille paramétrable via la variable BLOCK). Chaque morceau est testé pour voir si sa copie s'est bien passé. Si c'est le cas on passe à la suite sinon on recommence avec le même.

Utiliser des commandes utilisant des protocoles de transfert sur réseau (ftp, scp, etc.) ou destinées à n'envoyer qu'un diff d'un fichier (rsync) ne peut qu'être moins efficace et je ne suis vraiment pas sûr que des tests d'intégrités sur des morceaux de fichiers soient réalisés.
Back to top
View user's profile Send private message
El_Goretto
Moderator
Moderator


Joined: 29 May 2004
Posts: 3174
Location: Paris

PostPosted: Fri Nov 09, 2007 2:39 pm    Post subject: Reply with quote

Comme autre fonction de vérification, t'as aussi les fichiers par2: même inconvénient, faut relire le fichier, mais l'avantage c'est que ça inclut les mécanismes de correction d'erreur (donc pas besoin de rererecopier).

Et respect à Magic Banana :)
_________________
-TrueNAS & jails: µ-serv Gen8 E3-1260L, 16Go ECC + µ-serv N40L, 10Go ECC
-Réseau: APU2C4 (OpenWRT) + GS726Tv3 + 2x GS108Tv2 + Archer C5v1 (OpenWRT)
Back to top
View user's profile Send private message
anonjoe
Guru
Guru


Joined: 02 Oct 2003
Posts: 316

PostPosted: Mon Nov 12, 2007 2:21 pm    Post subject: Reply with quote

Ouai franchement c'est nickel ton script, encore merci

Petite annecdote je me suis apperçu qu'en fait c'etait mon iso original qui était corrompu :roll:
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


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

PostPosted: Mon Nov 12, 2007 10:30 pm    Post subject: Reply with quote

anonjoe wrote:
Ouai franchement c'est nickel ton script, encore merci

De rien.

anonjoe wrote:
Petite annecdote je me suis apperçu qu'en fait c'etait mon iso original qui était corrompu :roll:

Arf! :lol:
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