[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