Scripts Linux en Bash

Effacement d'un disque avec données aléatoires

Récupération de la taille d'un disque en blocs de 512o (par exemple avec sdc) :
# cat /sys/block/sdc/size
490234752
Script :
#!/bin/bash
################################################################################
# Nicolas Pons
# le 02.07.2010
#
# Script d'effacement rapide de disque avec données aléatoires. Le principe est
# d'écrire des données provenant de /dev/urandom sur des secteurs du disque
# en le parcourant avec des sauts avant/arrière aléatoire aussi.
# Il devient alors très dur de récupérer quelque donnée que ce soit puisque
# les mouvements de têtes de lecture ne sont pas réguliers.
#
# Ce genre d'effacement devrait suffire pour permettre à l'utilisateur de
# revendre un vieux disque à titre personnel sur un site de vente aux enchères
# par exemple.
# 
# Usage : $0 <périphérique> "je-sais-ce-que-je-fais"
#
################################################################################

Disque="$1"
Validation="$2"

# Constantes
Pas=100000 # saut moyen en nb de blocs des têtes de lecture pour l'effacement (+ grand == + rapide == - effacé)

clear

# Validation du disque fourni en argument
echo "Traitement du disque $Disque :"
Disq=${Disque##*/}
if [[ ! ( -d /sys/block/$Disq && -b $Disque ) ]]
then
  echo "  le fichier de périphérique $Disque n'existe pas ou le disque $Disq n'existe pas dans /sys/block !!!" >&2
  echo "  sortie du programme" >&2
  exit 1
fi
TailleDisque=$(cat /sys/block/$Disq/size)
echo "  taille en blocs de 512o : $TailleDisque"
echo "  taille en Mo            : $((TailleDisque/2048))"
echo

# Validation de l'action
if [[ $Validation != "je-sais-ce-que-je-fais" ]]
then
  echo "Cette opération étant irréversible et dangereuse, veuillez valider l'effacement avec le paramètre je-sais-ce-que-je-fais" >&2
  echo "  sortie sans rien faire (ouf!)" >&2
  exit 2
fi

Secteur=$((RANDOM%Pas))
while (( Secteur < TailleDisque ))
do
  SautAv=$((RANDOM%Pas*2))
  ((Secteur += SautAv))
  dd of=$Disque if=/dev/urandom skip=$Secteur count=1 ibs=512 >/dev/null 2>&1

  SautAr=$((RANDOM%(SautAv/2+1)))
  ((Secteur -= SautAr))
  dd of=$Disque if=/dev/urandom skip=$Secteur count=1 ibs=512 >/dev/null 2>&1

  echo -en '\r'"Avancement : $((100*Secteur/TailleDisque)) % (secteur : $Secteur)"
done
echo