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 start
  ermöglicht das Beschreiben einer einzelnen Festplatte mit Nullen.
So würde das Kommando  
navicli -h 172.18.8.3 zerodisk -messner 2_3_4 start
  die 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!

Den Status einer Festplatte kann man sich mit  
navicli -h SP_ID zerodisk -messner BUS_ENCLOSURE_DISK getzeromark
  anzeigen 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