Wissen
Wipe-Station selbst bauen: Festplatten automatisch löschen – nach der Suche nach wichtigen Dateien
Ein Stapel alter Festplatten, die gelöscht und weitergegeben werden sollen – und irgendwo darauf vielleicht noch die Steuerunterlagen von 2019. Dieser Ratgeber zeigt, wie Sie aus einem USB-Stick und einem freien Linux eine Station bauen, die jede Festplatte zuerst nach wichtigen Dateien durchsucht, nur die unbedenklichen löscht, das Ergebnis prüft und für jede Platte einen Bericht schreibt.
Roland Block, Laborleiter ·
Kurz gesagt: Ein USB-Stick mit SystemRescue 13.02 und einem einzigen Bash-Skript genügt. Nach dem Einschalten findet der Stick alle Laufwerke im Rechner, sucht darauf nach Dateien aus einer Liste, lässt jedes Laufwerk mit einem Treffer in Ruhe, überschreibt die übrigen gleichzeitig mit Nullen, liest sie danach vollständig zurück und bewertet den Zustand anhand der SMART-Werte vor und nach dem Löschen. Kein Tastendruck nötig. Am Ende liegt für jede Platte ein Bericht auf dem Stick.
Wichtig, bevor Sie weiterlesen: Diese Station löscht alle Laufwerke des Rechners, an dem sie startet – außer dem Stick selbst. Ein versehentlicher Start am Arbeits- oder Familien-PC vernichtet dessen Daten. Benutzen Sie einen eigenen Rechner nur zum Löschen, beschriften Sie den Stick deutlich und probieren Sie alles zuerst mit einer leeren Testplatte aus. Das Skript ist ohne Gewähr.
Wofür so eine Station gut ist
In unserem Labor gehen regelmäßig ganze Kisten mit gebrauchten Festplatten zur Löschung. Zwei Dinge sind dabei immer wieder dieselben:
- Niemand will vor jeder Platte sitzen. Einstecken, einschalten, weggehen – und später nachsehen, was herausgekommen ist.
- Manchmal soll vorher noch etwas gerettet werden. „Auf einer der Platten müssten noch die Rechnungen sein“ – nur auf welcher? Wer erst löscht und dann sucht, hat verloren.
Daraus ergeben sich die Anforderungen an die Station:
- Start vom Stick, dann Löschen, Prüfen und SMART-Bewertung jedes Laufwerks.
- Kein einziger Tastendruck vom Einschalten bis zum Ergebnis.
- Auf dem Bildschirm sichtbar, wenn ein Laufwerk hängt oder langsam schreibt oder liest.
- Keine Auswahl: Alle angeschlossenen Laufwerke werden gleichzeitig bearbeitet, ob zwei oder acht.
- Vor dem Löschen wird nach den gesuchten Dateien gesucht. Ein Treffer genügt, und dieses Laufwerk wird nicht gelöscht.
Was Sie brauchen
| Was | Empfehlung |
|---|---|
| Linux-System | SystemRescue 13.02 (August 2026, Linux-Kernel 6.18 LTS), kostenlos, Download. Enthält bereits smartctl, ntfs-3g, ntfsundelete, blkid, dd und cmp. |
| USB-Stick | ab 4 GB; der Stick wird komplett überschrieben |
| Schreibprogramm | Rufus unter Windows, Modus „ISO-Abbild“ (nicht „DD-Abbild“) – nur so bleibt der Stick beschreibbar, und nur dann können Skript und Berichte darauf liegen |
| Rechner | ein ausgemusterter PC mit mehreren SATA-Anschlüssen; zusätzlich gehen USB-Dockingstationen, NVMe-Steckplätze und SAS-Controller |
| Skript | wipe-station-autorun.sh (Bash, rund 250 Zeilen, siehe unten) |
So funktioniert die Station
SystemRescue bringt eine eingebaute Funktion mit, die eigene Skripte beim Start ausführt: autorun. Liegt auf dem Stick im Ordner autorun eine Datei namens autorun, startet SystemRescue sie nach dem Hochfahren automatisch und wartet danach nicht auf eine Taste (Option ar_nowait, seit Version 9.05 Standard). Beschrieben ist das im SystemRescue-Handbuch zu autorun. Der Ablauf:
- Der PC startet vom Stick. Das Startmenü von SystemRescue wählt nach seiner Wartezeit selbst den Standardeintrag.
- autorun startet das Skript. Das Skript startet sich sofort als eigener Systemdienst neu (
systemd-run), damit autorun nicht auf das Ende warten muss und es nicht abbricht. - Die Anzeige springt auf Konsole 8, Bildschirmschoner und Energiesparen werden abgeschaltet.
- Laufwerke finden: alle beschreibbaren Laufwerke außer dem Boot-Stick, virtuellen Laufwerken (loop, zram) und CD-Laufwerken. Den Stick erkennt das Skript an seinem Einhängepunkt
/run/archiso/bootmntund am DatenträgernamenRESCUE…. - Schutz prüfen und Dateien suchen. Laufwerke mit Treffer werden ausgeschlossen.
- Liste auf dem Bildschirm und 10 Sekunden Countdown. Das ist keine Auswahl, sondern die letzte Warnung.
- Für jedes Laufwerk gleichzeitig: SMART vorher, Überschreiben mit Nullen, vollständiges Zurücklesen und Vergleich, SMART nachher, Bewertung, Bericht.
- Danach bleibt die Station aktiv: Ein neu eingestecktes Laufwerk (Hot-Swap-SATA oder USB-Dock) wird ohne Neustart bearbeitet. Bereits gelöschte Laufwerke erkennt das Skript an der Seriennummer und löscht sie in derselben Sitzung kein zweites Mal.
Schritt für Schritt: den Stick einrichten
- SystemRescue-ISO herunterladen, mit Rufus im Modus ISO-Abbild auf den Stick schreiben.
- Stick neu einstecken. Er erscheint als Laufwerk mit dem Namen
RESCUE1302. - Ordner
autorunanlegen und das Skript alsautorun(ohne Dateiendung) hineinlegen. - Optional:
search.txtundnowipe.txtins Hauptverzeichnis des Sticks.
So sieht der Stick danach aus:
RESCUE1302/
├── autorun/
│ └── autorun ← das Skript
├── search.txt ← gesuchte Dateien, eine Maske je Zeile (optional)
├── nowipe.txt ← Seriennummern, die nie gelöscht werden (optional)
├── wipe-reports/ ← legt das Skript selbst an: Berichte und log.csv
└── sysresccd/ … ← SystemRescue selbst, nicht verändern
Bitte den Startparameter copytoram nicht verwenden: Dann ist der Stick nach dem Start nicht mehr eingehängt, und die Berichte landen nur im Arbeitsspeicher.
Das Skript: die wichtigsten Teile
Das vollständige Skript steht zum Download. Alle Schwellenwerte stehen als Variablen am Anfang und lassen sich anpassen. Hier die Kernstücke.
Neustart als eigener Dienst auf Konsole 8 – damit autorun sofort fertig ist und das Skript unabhängig weiterläuft:
if [ "${1:-}" != run ]; then
systemd-run --unit=wipestation --property=TTYPath=/dev/tty8 \
--property=StandardOutput=tty --property=StandardError=tty \
/bin/bash "$BOOT/autorun/autorun" run
exit 0
fi
Laufwerke finden, den Stick auslassen:
lsblk -dnpo NAME,TYPE,RO | while read -r d t ro; do
[ "$t" = disk ] && [ "$ro" = 0 ] || continue
case $d in /dev/loop*|/dev/zram*|/dev/sr*) continue ;; esac
[ "$d" = "/dev/$BOOTDISK" ] && continue
lsblk -no LABEL "$d" | grep -q '^RESCUE' && continue
echo "$d"
done
Löschen und Prüfen. Geschrieben wird in Blöcken zu 4 MB unter Umgehung des Zwischenspeichers (oflag=direct). Am Ende meldet dd „No space left on device“ – das ist das erwartete Ende des Laufwerks. Danach wird das ganze Laufwerk zurückgelesen und Byte für Byte mit Nullen verglichen:
dd if=/dev/zero of="$d" bs=4M oflag=direct conv=fsync status=none
blockdev --flushbufs "$d"; echo 3 > /proc/sys/vm/drop_caches
cmp -n "$(blockdev --getsize64 "$d")" "$d" /dev/zero # 0 = überall Nullen
SMART vorher und nachher. Hinter USB-Adaptern sieht smartctl die Werte oft erst mit -d sat; das Skript versucht es dann automatisch:
smartctl -x "$d" > vorher.txt
grep -qiE 'Unknown USB bridge|specify device type' vorher.txt && smartctl -x -d sat "$d" > vorher.txt
Was auf dem Bildschirm zu sehen ist
Die Anzeige wird alle 5 Sekunden neu aufgebaut. Für jedes Laufwerk stehen Modell und Größe, die Phase (LÖSCHEN oder PRÜFEN), der Fortschritt in Prozent und das aktuelle Tempo. Das Tempo misst das Skript nicht über dd, sondern direkt beim Kernel in /sys/block/<laufwerk>/stat – dort steht, wie viele Sektoren geschrieben und gelesen wurden.
| Zustand | Bedingung | Farbe | Variable |
|---|---|---|---|
| normal | Tempo ab 40 MB/s | grün | SLOW_MBS=40 |
| LANGSAM | Tempo der letzten 5 Sekunden unter 40 MB/s | gelb, Zahl der Messungen und Mindesttempo landen im Bericht | SLOW_MBS |
| HÄNGT | 60 Sekunden kein Fortschritt | rot, mit Sekundenzähler | STALL_SEC=60 |
| abgebrochen | 15 Minuten kein Fortschritt | Laufwerk wird aufgegeben, Ergebnis HUNG | GIVEUP_SEC=900 |
Langsame Phasen bleiben im Bericht stehen, auch wenn das Laufwerk danach wieder schnell wird. Am Ende steht für jedes Laufwerk ein Gesamturteil – grün ALLES IN ORDNUNG, gelb ACHTUNG oder rot SCHLECHT – und darunter die einzelnen Punkte mit [!!] (gelb) oder [XX] (rot).
Wann ein Laufwerk als schlecht gilt
Das Gesamturteil richtet sich nach dem schlechtesten Einzelpunkt: Ein roter Punkt genügt für „SCHLECHT“. Weil SMART zweimal gelesen wird, fällt auch auf, wenn ein Laufwerk während des Löschens neue defekte Sektoren bekommt – ein deutliches Zeichen, dass es nicht mehr weitergegeben werden sollte.
| Prüfung | Gelb | Rot |
|---|---|---|
| SMART-Gesamtstatus | nicht lesbar (Adapter ohne SMART) | nicht PASSED / nicht OK |
| Attribut mit Schwellwert-Überschreitung | in der Vergangenheit | FAILING_NOW |
| 5 Reallocated Sectors / 196 Reallocation Events | 1–49 | ab 50 |
| 197 Pending, 198 Uncorrectable, 187 Reported Uncorrect | – | ab 1 |
| Anstieg von 5, 187, 197 oder 198 während des Tests | – | jeder |
| 10 Spin Retry Count | ab 1 | – |
| 199 CRC-Fehler (meist Kabel oder Adapter) | ab 1 | – |
| SMART-Fehlerprotokoll | ab 1 Eintrag | – |
| Temperatur (194/190) | über 55 °C | – |
| NVMe Critical Warning | – | ungleich 0x00 |
| NVMe Media and Data Integrity Errors | – | ab 1 |
| NVMe Percentage Used | 80–99 % | ab 100 % |
| NVMe Available Spare | unter 50 % | 10 % oder weniger |
| SAS Grown Defect List | 1–49 | ab 50 |
| Schreib- oder Lesefehler, keine Nullen bei der Prüfung, Hänger | – | ja |
| langsame Phasen beim Löschen oder Prüfen | ja | – |
Die Schwellen für umgelagerte Sektoren und Temperatur stehen als REALLOC_WARN, REALLOC_BAD und TEMP_WARN am Anfang des Skripts. Was die einzelnen Attribute bedeuten, erklärt die Übersicht der SMART-Attribute bei Wikipedia.
Erst suchen, dann löschen
Ein Laufwerk, auf dem auch nur eine gesuchte Datei gefunden wird, wird nicht gelöscht. Alle anderen Laufwerke laufen normal weiter.
Was gesucht wird, steht in search.txt im Hauptverzeichnis des Sticks – eine Maske pro Zeile, Groß- und Kleinschreibung egal, # leitet einen Kommentar ein:
# Rechnungen und Buchhaltung
Rechnung*
*.qbw
*Vertrag*.pdf
# ganze Ordner: Masken mit / gelten für den vollständigen Pfad
*/Projekte/*
Fehlt die Datei oder ist sie leer, wird nicht gesucht.
So wird gesucht:
- Jede Partition wird nur lesend eingehängt. NTFS zuerst mit dem Kernel-Treiber
ntfs3, notfalls mitntfs-3g -o ro,norecover, damit auch ein „schmutzig“ heruntergefahrenes Windows nicht verändert wird. - Vorhandene Dateien:
find -inamebzw.-ipathüber die ganze Partition, höchstens eine Stunde je Partition (SEARCH_TIMEOUT). - Gelöschte Dateien auf NTFS:
ntfsundelete --scan --matchdurchsucht die Einträge der Master File Table (SEARCH_DELETED=1). - Übersprungen werden Auslagerungsbereiche, LVM, RAID-Mitglieder, LUKS, BitLocker und ZFS.
Was Sie sehen: einen grünen Block „GESCHÜTZT – WIRD NICHT GELÖSCHT“ mit Grund und den ersten fünf Fundstellen. Die vollständige Liste liegt auf dem Stick unter wipe-reports/…_FOUND_<Seriennummer>.txt.
Laufwerke auch ohne Suche schützen – jede der drei Möglichkeiten genügt:
- eine Datei oder ein Ordner
NOWIPE,NO_WIPE,DO_NOT_WIPEoderNICHT_LOESCHEN(beliebige Endung) im Hauptverzeichnis einer Partition; - ein Datenträgername, der
NOWIPE,NO_WIPE,KEEPoderNICHT_LOESCHENenthält; - die Seriennummer des Laufwerks als Zeile in
nowipe.txtauf dem Stick.
Berichte und Protokoll
Alle Berichte schreibt das Skript auf den Stick in den Ordner wipe-reports. Lässt sich der Stick nicht beschreiben, landen sie im Arbeitsspeicher und sind nach dem Ausschalten weg – dann erscheint ein gelber Hinweis.
| Datei | Inhalt |
|---|---|
JJJJMMTT-HHMM_<Modell>_<Seriennummer>.txt |
Gesamturteil, alle Prüfpunkte, vollständige SMART-Ausgabe nachher und vorher |
…_FOUND_<Seriennummer>.txt |
alle Fundstellen der Suche, auch gelöschte Dateien mit Inode-Nummer |
log.csv |
eine Zeile je Laufwerk: Datum; Modell; Seriennummer; Größe; OK / WARN / BAD / HUNG / PROTECTED; Bericht |
Die log.csv öffnet jede Tabellenkalkulation. Sie eignet sich als Löschprotokoll für einen ganzen Stapel.
Was wir geprüft haben – und was Sie selbst prüfen sollten
Das Skript haben wir in einer Testumgebung mit Laufwerksabbildern geprüft:
| Test | Ergebnis |
|---|---|
| Syntaxprüfung mit ShellCheck (Stufe „warning“) | ohne Befund |
| Vier Abbilder gleichzeitig, zwei davon mit Zufallsdaten | gelöschte Abbilder vollständig Nullen, Berichte und log.csv angelegt |
Datei Users/Kunde/Projekte/Rechnung_2023.PDF, Maske rechnung* |
gefunden, Laufwerk geschützt, die anderen gelöscht |
Markierungsdatei Nicht_Löschen.TXT (andere Schreibweise) |
gefunden, Laufwerk geschützt |
Datenträgername MY KEEP |
erkannt, Laufwerk geschützt |
Seriennummer in nowipe.txt mit Windows-Zeilenenden und Leerzeichen |
erkannt |
Auf Ihrer Hardware ist es trotzdem ein neues Skript. Machen Sie den ersten Durchlauf mit einer leeren Testplatte, legen Sie bei einem zweiten Durchlauf eine Datei aus Ihrer search.txt darauf und prüfen Sie, dass die Platte geschützt bleibt. Besonders unterschiedlich verhalten sich USB-Adapter verschiedener Hersteller.
Grenzen der Station
- Es wird alles gelöscht, was nicht geschützt ist. Ein Fehler in der
search.txt– ein Tippfehler, eine zu enge Maske – kostet Daten. - Gesucht wird nur nach Dateinamen, nicht nach Inhalten.
- Verschlüsselte Partitionen (BitLocker, LUKS) werden nicht durchsucht. Findet sich auf so einem Laufwerk sonst nichts, wird es gelöscht. Wer verschlüsselte Laufwerke im Stapel hat, sollte sie über
nowipe.txtoder eine Markierung schützen. - Gelöschte Dateien findet die Station nur auf NTFS und nur, solange der Eintrag in der Master File Table noch nicht überschrieben ist.
- Ein hängendes Laufwerk lässt sich nicht immer stoppen. Steckt ein Prozess im Kernel fest, hilft auch
kill -9nicht. Das Laufwerk bleibt dann als „HÄNGT“ stehen, die anderen arbeiten weiter. - Versteckte Bereiche. Einmaliges Überschreiben über die normale Schnittstelle erreicht nur den Bereich, den das Laufwerk nach außen meldet. Eine Host Protected Area (HPA), ein Device Configuration Overlay (DCO) und Sektoren in der Defektliste bleiben unberührt. Ob eine HPA eingerichtet ist, zeigt
hdparm -N /dev/sdX. Warum das wichtig ist, steht in unserem Beitrag zur Datenlöschung. - SSD und NVMe. Bei Flash-Speichern erreicht Überschreiben die Reserve- und umgelagerten Blöcke nicht. Für SSDs sind die eingebauten Löschbefehle das Mittel der Wahl:
hdparm --security-erasebzw. ATA Sanitize für SATA-SSDs,nvme formatodernvme sanitizefür NVMe. Die aktuelle NIST-Richtlinie SP 800-88 Rev. 2 (September 2025) empfiehlt solche „Purge“-Verfahren, wo immer möglich, statt reinem Überschreiben. Mehrfaches Überschreiben verlangt die Richtlinie nicht mehr – für Festplatten ist ein vollständiger, geprüfter Durchgang der Maßstab.
Wann Sie besser ein Labor beauftragen
Für ein paar Platten aus dem eigenen Keller ist die Station eine gute Lösung. Ein Labor ist die bessere Wahl, wenn
- Sie eine Löschbescheinigung je Seriennummer brauchen, etwa für einen Datenschutzbeauftragten oder Auftraggeber;
- Laufwerke nicht mehr sauber laufen – dann liefert Überschreiben keine Sicherheit, und sie sollten per Degausser gelöscht und zerlegt werden;
- SSDs, Notebooks mit verlöteten Speichern oder verschlüsselte Laufwerke dabei sind;
- vor dem Löschen Daten gerettet werden müssen, die sich nicht einfach kopieren lassen.
Wir löschen Festplatten mit vollständiger Prüfung für 0,95 € je Laufwerk und bescheinigen jede Seriennummer. Festplatten, die entsorgt werden sollen, löschen und vernichten wir kostenlos.