[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux] copydisk




Bonjour,


Merci à tous ceux qui m'ont répondu.
J'ai essayé la solution de Damien et elle semble
fonctionner.
Voir le script  attaché.
Remarque: j'ai du apporter quelques changements:
Il est évident que la meilleure solution est de protéger
physiquement la disquette, mais on est si distrait :-)

Toutes remarques, améliorations, critiques, congratulations
sont les bienvenues ;-) .

> dd if=/dev/fd0 of=/tmp/foo bs=512 count=1
--> j'ai du changer count=5 pour que les disquettes aient
"l'air différentes".

--- Message original de Damien Diederen le 03 jui 2001 ---
> 
> Hello !
> 
> On Tue, Jul 03, 2001 at 06:50:47PM +0200, J-C Hendrickx wrote:
> [.../...]
> > Par ex. je viens de lire le contenu d'une disquette; si je 
> > la laisse dans le lecteur, je veux la faire reconnaître pour
> > qu'elle ne soit pas écrasée.
> 
> Tu peux peut-être faire une copie du premier secteur de la disquette
> dans un fichier temporaire :
> 
> dd if=/dev/fd0 of=/tmp/foo bs=512 count=1
> 
> Ce dernier comprendra de nombreuses infos propres à la disquette, et
> entre autres le numéro de série. Tu peux alors extraire le premier
> secteur de ton image dans un autre :
> 
> dd if=image.fat of=/tmp/bar bs=512 count=1
> 
> Et enfin faire une comparaison des deux :
> 
> if cmp -s /tmp/foo /tmp/bar; then
> 	echo "Same"
> else
> 	echo "Different"
> fi
> 
> Méfie-toi cependant car cette solution n'est pas à 100% correcte : une
> « vraie » copie de disquette n'altèrera pas le numéro de série, et
> les deux seront probablement considérées comme identiques, alors que tu
> aurais pu rajouter / supprimer des fichiers sur une d'entre elles par la
> suite.
> 
> [.../...]
> 
> Cu,
> Dash.
---x--- 
> Damien Diederen
> dash@linuxbe.org
> http://users.swing.be/diederen/

-- 

------------------------
Jean-Claude Hendrickx     
jean.hendrickx@skynet.be
------------------------  
#!/bin/bash
##########################################################################
# Shellscript:	diskcopy - duplicate a 3.5" floppy disk Version    :	0.2
# (beta) Author     :	Heiner Steven (heiner.steven@odn.de) 
# adapté par J-C Hendrickx - 5 juillet 2001 
# Date       :	03.06.95 
# Category :	System Administration 
# SCCS-Id.   :	$Id: diskcopy,v 1.1.1.1 1999/06/15
# 19:29:14 heiner Exp $
##########################################################################
PN=`basename $0`			# program name
VER='0.1 (beta)'

: ${FLOPPY=/dev/fd0}
DiskBS=18k
FileBS=18k

Tmp=${TMPDIR:=/tmp}/dc$$

Usage () {
    echo "$PN - duplique les 3.5\" floppy disks, $VER (hs '95)
usage: $PN   source  cible

La source par défaut est $FLOPPY. Si il n'y a pas de
cible specifiée, un fichier temporaire est utilisé. Si une cible
est donnée, une copie entre 2 disques est assurée." >&2
    exit 1
}

Msg () {
    for i
    do echo "$i" >&2
    done
}

Fatal () { Msg "$*"; exit 1; }

GetYN () {
    while :
    do
	Msg "" "$@"
    	read answer || exit 2
	case "$answer" in
	    [yYoO]*)	return 0;;
	    [nN]*)	return 1;;
	    [qQ]*)	exit 0;
	esac
	Msg "" "Entrer 'o' ou 'n' (oui-non)" "Essayez à nouveau"
    done
}

Out="$Tmp"
while [ $# -gt 0 ]
do
    case "$1" in
	-h)	Usage;;
    esac
    shift
done

if [ $# -gt 2 ]
then Usage
elif [ $# -ge 2 ]
then Out="$2"
elif [ $# -ge 1 ]
then FLOPPY="$1"
fi

#xxxxxxxxxxxxxxxxxxxxx
[ "$FLOPPY" = "$Out" ] &&  Fatal "On ne peut pas écrire sur le même support" 
#xxxxxxxxxxxxxxxxxxxxx -> NE fonctionne PAS !

trap "rm -f $Tmp > /dev/null 2>&1" 0
trap "exit 2" 1 2 3 15


n=1
while GetYN "Copier (lire) le disque $n ? (o/n, q)"
do
    Msg "Lecture du disque $n..."
    if dd if=$FLOPPY of=$Out ibs=$DiskBS obs=$FileBS
    then
        dd if=/dev/fd0 of=/tmp/bar bs=512 count=5
        Msg "" "Retirer la disquette source !" \
               "Et introduire une autre disquette."
        Msg ""
        if [ "$Out" = "$Tmp" ]
        then
            Copy=1
            while GetYN "Copier (écrire) $Copy ? (o/n, q)"
            do
            dd if=/dev/fd0 of=/tmp/foo bs=512 count=5
            if cmp -s /tmp/foo /tmp/bar; then
                # echo "Same"
                Fatal "On ne peut pas écrire sur le même support !"
            else
                echo "Different"
            fi
                Msg "Ecriture de la copie $Copy..."
                 if dd if=$Out ibs=$FileBS of=$FLOPPY obs=$DiskBS
#                if dd  if=$Out  of=$FLOPPY
                then
                Msg "Copie $Copy réussie."
                Copy=`expr ${Copy:-1} + 1`
                else
                Msg "" "Impossible d'écrire sur ce disque!" \
                    "Cherchez la cause et essayez à nouveau"
                fi
            done
	    fi
    else
        Msg "" "Impossible de lire ce disque!" \
            "Cherchez la cause et essayez à nouveau"
        continue
    fi
    n=`expr ${n:-1} + 1`
done