J'ai deux disques SSD et sur disque dur.
Lorsque j'utilise Sudo dd if=/dev/zero of=/dev/sdd count=1000
de bonnes choses se produisent et j'efface les partitions de ma clé USB.
Lorsque j'utilise Sudo dd if=/dev/zero of=/dev/sdb count=1000
, de mauvaises choses se produisent et je perds les partitions Windows 7 et Ubuntu 14.04 sur mon disque dur de 500 Go.
Les mauvaises choses sont arrivées une fois. Comment puis-je empêcher dd
de le faire à nouveau?
ie Vérifiez que of=
ne contient pas sda
, sdb
ou sdc
.
dd
Ouvrez le terminal en utilisant Ctrl+Alt+T. Puis appelez gedit
avec:
gksu gedit /usr/local/bin/dd
et copiez et collez ces commandes:
#!/bin/bash
# Who called this script?
PARENT_COMMAND="$(ps -o comm= $PPID)"
if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "Sudo dd ..." is ok)
echo dd must be called with Sudo powers
exit 1
fi
# log dd usage for audit trails
# log-file '"$PARENT_COMMAND"" - ""$@"' "/var/log/dd-usage"
# Display hints & arguments. Get any key to proceed or <Ctrl>+C to abort
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║ ║"
echo "║ dd - Data Duplicator ║"
echo "║ ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo
echo " Parameter 1 hint: if=/dev/zero"
echo " Parameter 2 hint: of=/dev/sdY where Y cannot be a, b or c"
echo " Parms >2 hints: bs=512 is default block size"
echo " Parms >2 hints: count=100 will process 100 blocks"
echo
echo " Use /bin/dd --help for more info (don't use dd --help)"
echo
# Display drive letterss, names and sizes without partitions for guide
lsblk -ido KNAME,TYPE,SIZE,MODEL
echo
echo " Current parameters: "”$@”
echo
echo " Press <Enter> to continue or <Ctrl>+C to abort."
read ANYKEY
if [[ "$2" != of=* ]]; then
echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
echo "ERROR! Parameter 2 must start with 'of=' (output file=)"
exit 2
fi
if [[ "$2" =~ "sda" ]]; then
echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
echo "ERROR! Output file (of=) cannot be /dev/sda"
exit 2
fi
if [[ "$2" =~ "sdb" ]]; then
echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
echo "ERROR! Output file (of=) cannot be /dev/sdb"
exit 2
fi
if [[ "$2" =~ "sdc" ]]; then
echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
echo "ERROR! Output file (of=) cannot be /dev/sdc"
exit 2
fi
# Call REAL dd command with parameters passed to this wrapper sript
/bin/dd "$@"
exit 0
Enregistrez le fichier et quittez gedit
.
Enfin, marquez la nouvelle dd
comme exécutable avec:
Sudo chmod +x /usr/local/bin/dd
Voici comment il apparaît sur l’écran de votre terminal lorsque vous avez appelé le nouveau script dd
sans utiliser les lecteurs protégés.
$ Sudo dd if=/dev/zero of=/dev/sdd bs=512 count=100
╔════════════════════════════════════════════════════════════════╗
║ ║
║ dd - Data Duplicator ║
║ ║
╚════════════════════════════════════════════════════════════════╝
Parameter 1 hint: if=/dev/zero
Parameter 2 hint: of=/dev/sdY where Y cannot be a, b or c
Parms >2 hints: bs=512 is default block size
Parms >2 hints: count=100 will process 100 blocks
Use /bin/dd --help for more info (don't use dd --help)
KNAME TYPE SIZE MODEL
sda disk 223.6G Kingston SHSS37A
sdb disk 465.8G ST9500423AS
sdc disk 119.2G KingFast
sdd disk 29.8G USB Flash Drive
sr0 rom 1024M DVD+-RW GT80N
Current parameters: 'if=/dev/zero of=/dev/sdd bs=512 count=100'
Press <Enter> to continue or <Ctrl>+C to abort.
100+0 records in
100+0 records out
51200 bytes (51 kB, 50 KiB) copied, 0.00339331 s, 15.1 MB/s
Étant donné que le script d'emballage se trouve dans /usr/local/bin
, il est appelé avant la commande standard stockée dans /bin
.
Le deuxième paramètre doit commencer par of=
et ne peut pas contenir sda
, sdb
ou sdc
, ajoutez des lecteurs supplémentaires pour protéger ou soustraire des lecteurs en fonction de votre installation.
Les caractères de tirage au trait peuvent ne pas fonctionner sur les anciennes plates-formes ou différents jeux de caractères. Utilisez "+ --- +" pour les lignes du haut et du bas et "|" pour les lignes du milieu ou les supprimer complètement.
log-file
est un script permettant de consigner des commandes pour auditer des fichiers. Vous pouvez la remplacer par votre propre commande et annuler le commentaire de la ligne en supprimant le #
initial.