Datenvernichtung bei einem SAN
Das Shreddern von Daten auf einem SAN, also das Löschen der Daten, soll dazu dienen etwaigen Weiterverwertern das Wiederherstellen von Daten unmöglich zu machen. Auch bei einem TradeIn ist dieser Vorgang, zusammen mit dem wahllosen Umstecken der Festplatten, eine wirkungsvolle Methode vorhandene Daten vor den Augen unbefugter zu verbergen.Leider existiert hierzu kein offiziell dokumentierter Befehl. Allerdings gibt es ja zum Glück auch noch den Engineering- Mode.
Das Kommando
navicli -h SP_IP zerodisk -messner BUS_ENCLOSURE_DISK startermöglicht das Beschreiben einer einzelnen Festplatte mit Nullen.
So würde das Kommando
navicli -h 172.18.8.3 zerodisk -messner 2_3_4 startdie Festplatte mit der ID 4 im Enclosure 3 am Bus 2 des Storageprozessors mit der IP 172.18.8.3 mit Nullen beschreiben.
Dass dieser Befehl mit großer Vorsicht zu geniessen ist versteht sich von selbst!
navicli -h SP_ID zerodisk -messner BUS_ENCLOSURE_DISK getzeromarkanzeigen lassen. Erscheint hier eine Ziffernfolge, die länger als 5 Ziffern ist, so ist diese Festplatte noch nicht "genullt". Diese Festplatte wurde also noch nicht gelöscht.
Löschen aller Festplatten im SAN
Das Eintippen des Kommandos für jede einzelne zu löschende Festplatte im SAN ist eine mühselige Arbeit.Aus diesem Grund ist folgendes Script entstanden, das für jeden definierten Storageprozessor die verbundenen Festplatten ausliest und diese dann mit Nullen beschreibt, die Daten auf diesen Festplatten also löscht.
In einer "Ausnahmeliste" in der Zeile 5 (SYSDISK) können einzelne Laufwerke von dieser "Behandlung" ausgeschlossen werden. Daten auf diesen Festplatten werden dann vom Löschen ausgeschlossen, der Inhalt bleibt bestehen.
Angepasst werden müssen die Werte in den Zeilen 4 und 5- ihre Bedeutung sollte selbsterklärend sein.
Das Script kann auf der Controlstation gestartet werden. Etwas Zeit muss man dafür je nach Ausbau des SANs allerdings mitbringen.
#!/bin/bash
IFS=$'\n'
NAVICLI=/nbsnas/sbin/navicli
SPs=("172.18.0.106" "172.18.0.107")
SYSDISK=("0_0_0","0_0_1","0_0_2","0_0_3","0_0_4")
LOGFILE=./nullinger.log
for SP in ${SPs[@]}; do
echo "working on SP $SP" >> $LOGFILE
DISKSARR=( $($NAVICLI -h $SP getdisk | grep '^Bus ') )
for DISK in ${DISKSARR[@]}; do
DISKINT=$(echo $DISK | awk -F" " '{ print $2"_"$4"_"$6; }')
TIMESTAMP=`date +%Y%m%d-%H:%m:%S`
echo $TIMESTAMP >> $LOGFILE
if [[ $SYSDISK =~ $DISKINT ]]
then
echo "$DISKINT contained in SYSDISK - ignoring it" >> $LOGFILE
else
ZEROMARK=`$NAVICLI -h $SP zerodisk -messner $DISKINT getzeromark|grep 'Zero Mark'| awk '{ print $3; }'`
if [ "$ZEROMARK" -eq "$ZEROMARK" ] 2>/dev/null
then
if [ "$ZEROMARK" -gt "99999" ]
then
$NAVICLI -h $SP zerodisk -messner $DISKINT start
echo "writing all zeroes to " $DISKINT >> $LOGFILE
else
echo "disk $DISKINT seems already be nulled" >> $LOGFILE
fi
else
echo "disk $DISKINT::"`$NAVICLI -h $SP zerodisk -messner $DISKINT getzeromark` >> $LOGFILE
fi
fi
done
done
unset IFS