Server Festplatten nach VSITR formatieren

meilon

Erfahrenes Mitglied
Hallo!

wir haben einige unserer Server in die ESX Umgebung geladen, jetzt benötigen wir die alten Kisten nicht mehr. Bevor die nun auf dem Schrott landen dürfen, müssen die Festplatten sauber gelöscht werden. Es handelt sich dabei um unterschiedliche Server mit unterschiedlichen SCSI Controllern etc.

Das Tool VS-Clean vom BSI hat bei den Desktop-PCs mit IDE noch saubere Arbeit geleistet, doch bei den Servern hat das Tool anscheinend seine Grenze erreicht. Ich suche daher nach einem Tool (egal ob Windows oder Linux), welches ich in einer PE/Live-Umgebung zur Formatierung einsetzten kann. Da ich mich in der Live-CD Erstellung für Linux gar nicht auskenne, dafür aber schon PE Erfahrung habe, wäre mir ein Windows Tool am liebsten.

Jetzt kommt das Schwierigste: Es darf (erstmal) nichts kosten. Wir haben wie gesagt schon VSClean, noch ein Tool kaufen möchte mein Chef nicht. Wenns nicht anders geht, na denn muss es eben sein.

Beste Grüße
meilon
 
Prinzipiell eignet sich zum Löschen wunderbar das Buildin-Tool dd, das Byteweise Daten auf die Festplatten schreibt. Da es kein Problem ist mit einer LiveCD die Festplatten einzeln anzusprechen, sprich um eventuelle Raids herum etc. kann man jede Platte einzeln je nach belieben mit Nullen oder Zufallszahlen überschreiben (/dkmlmlnev/zero und /dev/urandom). Natürlich nimmt das ganze mit Zufallszahlen mehr Zeit in Anspruch als ohnehin schon aber daran sollte es ja nicht mangeln.

Bash:
dd if=/dev/zero of=/dev/devicefile

dd if=/dev/urandom of=/dev/devicefile

Weitere Optionen sind in der man-page nachlesbar. Unter Umständen befinden sich die betreffenden Device-Files je nach Controller auch in Unterverzeichnissen unter /dev. Sollte mit mount ja relativ leicht heraus zu finden sein wo die sich befinden.
 
Uff, aufs einfachste komme ich wieder nicht :D Das ganze in ein Script gepackt und ich muss nicht den ganzen Tag die 4 Etagen zwischen Serverraum und meinem Büro zurücklegen :D

Da ich es nach BSI-Norm machen muss: Wie bekomme ich 0xFF und 0xAA geschrieben? VSITR schreibt vor, dass man die Festplatte in 7 Durchgängen mit unterschiedlichen Chars (0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xAA) beschreiben muss. Wie löse ich das mit dd?
 
Ich würde da ja jetzt einfach den Standard wechseln ...
Denn ein Special Character Device wie /dev/zero würde sich nur durch ein entsprechendes Kernelmodul erzeugen lassen.
Da bleibt eigentlich nur noch die Bytes mit einem Skript oder Programm an den stdout zu übergeben. Dies geht etwa wunderbar mit Python und sollte i.d.R. immer noch schneller als die Festplatte sein:

Python:
#!/urs/bin/env python

import sys

bytes = "\xff" * 4096

while True:
    try:
        sys.stdout.write(bytes)
    except IOError:
        pass

Dann simpel dd vom stdin lesen lassen und voila:

Bash:
python script.py | dd of=dev/sd0 bs=4k
 
Zuletzt bearbeitet:
Besten Dank, werde es ausprobieren!

EDIT: Menno, zu einfach wollen mir es die alten Kisten nicht machen! Meine Ubuntu Desktop 9.04 CD bootet auf keinem der Server komplett durch, immer scheint es etwas mit dem Zugriff auf die Festplatten zu tun zu haben.

Bevor ich viele andere Live CDs runterlade und Rohling nach Rohling verbrenne: Welche Distro kommt mit dem alten SCSI Kram besser zurecht? GParted vll? Oder Knoppix? OpenSUSE? Oder sind die alle im Grunde gleich? Dürfte eigentlich nur ein Treiber Problem sein, die Server sind teilweise schon zwei Jahre ohne Strom, aber vor Außerbetriebnahme liefen sie einwandfrei.

@Mods: Da es nun doch auf Linux herausläuft, bitte den Thread ins Linux-Forum verschieben - Danke!

EDIT2: Ein Kollege hate noch eine GParted Live CD rumliegen, mit der komme ich schon mal weiter, am Ende fehlen mir aber die Devices zum löschen! Während des Boots erscheinen Meldungen zu scsi0 und scsi1, aber im Linux selbst finde ich keine einzige Festplatte. Laut lsmod ist das sym53c8xx Modul geladen , genauso wie megaraid_mbox. Auch gparted findet keine partitionierbare Partition. Unabhängig davon, om im SCSI Controller ein logisches Laufwerk eingerichtet wurde oder nicht.
Einzig ein /dev/sg0 konnte ich ausfindig machen, kein /dev/scsi oder /proc/scsi
Was muss ich machen?
 
Zuletzt bearbeitet:
Vllt hättest du einfach ein neues Thema im Linux-Forum machen sollen. Aber vllt wird das hier noch verschoben.

Also du findest keine Dateien /dev/sda etc?
 
Gibt es noch eine bessere Methode bzw. kann man das vorhandene Script noch erweitern? Es scheint schon mal rasend schnell zu sein, da ich mit dem Script gute 40MB/s hinbekomme, mit /dev/zero gerade mal 8MB/s.
Das Problem ist jetzt nur, dass sich das Script nicht beendet wenn dd fertig ist, in meinem Script muss ich also nach jedem Schreibvorgang != 0x00 Strg+C drücken, damit das Python Script auch beendet wird und der nächste Aufruf im Script durchgeführt wird.

EDIT: Vergesst es, habe dcfldd gefunden! Mit dem Parameter "pattern" kann man einen HEX-Wert angeben (wie FF) und das schreiben lassen! Zusammen mit dem Multiple Output kann ich mit einem Kommando alle drei Festplatten gleichzeitig beschreiben lassen!
 
Zuletzt bearbeitet:
Natürlich kann man das Skript mit Python noch entsprechend erweitern. Die Geschwindigkeit des Skripts beim Schreiben dürfte übrigens primär damit zusammen hängen, dass der bs-Parameter genutzt wird und so immer genau so viele Daten gelesen werden wie das Skript auch schreibt. Dabei sind die 4 Kilobyte die Masse Daten, die der Kernel auf ner Pipe etc. buffert bevor er liest etc.

Ich hab mal ein dd in ein python skript verlagert. Natürlich könnte man auch mit python selbst schreiben aber dd bietet ja am Ende ein paar kleine Informationen die theoretisch ausgegeben werden sollten. Mir fehlt momentan die Möglichkeit das zu testen. Insgesamt hab ich es recht prozedural gehalten ohne Klassen und Funktionen, da es nur eine Sache machen soll.

Probiers mal aus :)

Python:
#!/urs/bin/env python

import sys, os, subprocess

if len(sys.argv) != 3:
    print "Usage: script.py target [0|F|A]"
    print "0 - write zeros to target"
    print "F - write 0xFF to target"
    print "A - write 0xAA to target"
else:
    target,byte=sys.argv[1],sys.argv[2]
if os.path.isdir(target):
    sys.exit("target does not exist or is a directory.")
if not byte.lower() in ["0","f","a"]:
    sys.exit("byte has to be one of 0, F or A")
hash = {"0":"\0",
        "f":"\xff",
        "a":"\xaa"}

bytes = hash[byte.lower()] * 4096

process = subprocess.Popen(args=["dd","of="+target,"bs=4096"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
while True:
    try:
        process.stdin.write(bytes)
    except:
        raise
    else:
        if process.poll():
            print process.communicate()
            sys.exit(process.returncode)
 
Danke für die Mühen mit dem Script, aber mit dcfldd geht es wie gesagt einfacher. Der Server kann sich bis morgen in Ruhe selbst formatieren, dann springe ich mit USB-Stick und Ubuntu Lucid Beta Live CD zum nächsten Server.

Nochmal besten Danka für die Hilfe!
 

Neue Beiträge

Zurück