Windows 10 Laptop löschen und neu aufsetzen

Posted on So 18 Oktober 2020 in computer

Heute wurde mir ein Laptop in die Hand gedrückt – mit der Bitte, alle Daten sicher zu löschen und das Windows wieder neu einzuspielen, damit er einer neuen Aufgabe zugeführt werden kann. Leichte Übung.

Vorbereitungen

Zuerst müssen wir mal nachsehen, welche Windows Version eigentlich installiert ist. Früher hatte man dafür ja immer eine Installations-CD und einen Aufkleber mit dem Produkt-Schlüssel. Heute gibt's das normalerweise nicht mehr, denn das Installations-Image kann man sich einfach bei Microsoft herunterladen und der Schlüssel ist im BIOS gespeichert. Wichtig ist nur, die selbe Betriebssystemversion zu installieren weil sonst der Schlüssel nicht zum Produkt passt.

Also Rechner booten, einloggen und nachsehen – Windows 10 Professional, Deutsch. Das ist also geklärt. Nun brauchen wir ein Image. Und das gibt es hier. Dort kann man nun Win10 auswählen und im Anschluss die gewünschte Sprache. Ist das erledigt, wird man mit zwei download-Links für das 32- bzw. 64-bit Medium belohnt.

Mach ihn platt

Als nächstes wollen wir alle Daten loswerden, ohne dass jeder halbwegs belesene Teenager sie sofort wieder herstellen kann. Einfach alles in den Papierkorb werfen klingt erstmal logisch ist aber eine sehr schlechte Idee, denn dabei werden die Daten auf der Platte keineswegs gelöscht, sondern nur als gelöscht markiert. Wer sich auch nur ein ganz kleines bisschen auskennt (oder Google bedienen kann) wird problemlos das meiste wieder herbeizaubern können, das wir eigentlich vor neugierigen Augen schützen wollten.

Also anders. Haben wir es mit einer normalen Festplatte zu tun, also so einem Ding mit rotierenden Scheiben, ist die Welt verhältnismäßig einfach. Wir müssen nur die komplette Festplatte mit irgendwas überschreiben und schon ist alles weg. Ja – manche Leute werden nun aufschreien und sagen, dass es unbedingt Zufallsdaten sein müssen und das auch nicht nur einmal, sondern mehrfach passieren muss, um wirklich sicher zu sein. Ich sag mal so: wenn Ihr davon ausgeht, dass der KGB, die NSA oder der Mossad hinter Euch her sind und die Platte die Abschuss-Codes für das Atomwaffenarsenal enthält, dann ist das vermutlich ein guter Tipp – möglicherweise nicht mal ausreichend. Aber um Eure Sammlung peinlicher Urlaubsfotos, die Ehrenurkunde vom Gartenbauverein und die angesammelten Memes zuverlässig los zu werden reicht auch einmaliges Überschreiben mit irgendwas – z.B. Nullen.

Und wie mache ich das? Schön dass Ihr fragt. Ich nehme dazu immer ein kleines LINUX ISO Image, das man von einem USB-Stick booten kann und verwende das dd Kommando. Dieses mal habe ich das 2020er desinfect image der ct verwendet, aber viele andere Stick-Distributionen tun es genauso.

Also erstmal Image auf den Stick spielen. Bei mir ist das /dev/sdc – bei Euch kann das ganz was anderes sein, also Augen auf, sonst gibt's ein Daten-Unglück! Wir machen nun viel Zeug, das root-Rechte benötigt, also entweder macht Ihr jedesmal ein sudo davor, oder Ihr seid faul, wie ich, und macht das Folgende alles in einer interaktiven root-Shell:

sudo -i
cd wo/auchimmer/Win10_image-und-desinfect/liegen/

dd if=desinfect-2020_ct_2020_12.iso of=/dev/sdc bs=10M

Selbigen Stick steckt man dann in den zu löschenden Computer und startet diesen neu. Dabei ist schonmal die erste Hürde zu umschiffen: Windows 10 hat nämlich die lästige Eigenart, einen "Schnellstart" einzurichten. Dadurch startet der Rechner nach dem Herunterfahren schneller, aber in Wahrheit findet nie ein echter kompletter Shutdown statt. Und das bedeutet, dass wir keine Chance bekommen, von einem anderen Gerät (z.B. unserem USB-Stick) zu booten, oder auch nur die Bootreihenfolge im BIOS einzustellen. Das ist lästig!

Man kann den Schnellstart irgendwo in den Tiefen der Systemsteuerung deaktivieren, aber das brauchen wir garnicht, denn wenn Ihr statt "Herunterfahren" "Neustart" wählt, dann wird der Rechner tatsächlich komplett herunter gefahren, bevor der Neustart erfolgt. Also machen wir das und hoffen, das der Stick in der Bootreihenfolge vor der Festplatte kommt. Ist das nicht der Fall müssen wir ins BIOS, um das zu konfigurieren, oder eine temporär geänderte Boot-Reihenfolge wählen. Wie das genau geht, hängt von Eurem Computer ab. Bei meinem Thinkpad komme ich z.B. ins BIOS, wenn ich beim Neustart F1 drücke und mit F12 kann ich ein temporäres Boot-Device auswählen. Das Objekt unserer Operation ist jedoch ein Fujitsu – da muss man F2 drücken, um ins BIOS zu kommen und mit F12 geht's in das Boot-Menü.

Wenn alles nach Plan läuft bootet nun also unser Mini-LINUX und wir können loslegen und die Festplatte mit Nullen überschreiben:

dd if=/dev/zero of=/dev/sda bs=10M

bs legt die Block-size fest – das ist nicht zwingend nötig, beschleunigt den Prozess aber in der Regel. Wichtig ist nur, dass Ihr bei of die richtige Platte erwischt – bzw. das für alle zu löschenden Platten wiederholt. Also ggf. nochmal für /dev/sdb etc. Für die Paranoiker unter uns noch eine Variante mit Zufallswerten, statt Nullen:

dd if=/dev/urandom of=/dev/sda bs=10M

Und wem das nicht reicht oder wenn die Festplatte schon Probleme hat und sich teilweise nicht mehr beschreiben lässt, dann ist das tool dc3dd ein bessere Wahl:

dc3dd wipe=/dev/sda  # Mit Nullen überschreiben

Oder

dc3dd hwipe=/dev/sda pat=0xff    # mit dem Pattern 0xff überschreiben

Allerdings ist dc3dd nicht bei allen gängigen Stick-Images vorhanden.

Für SSDs

Lustiger wird es, wenn der zu löschende Computer keine normale Festplatte, sondern eine SSD enthält. Selbige haben nämlich das Problem, dass die Speicherzellen bei häufigem Beschreiben irgendwann den Geist aufgeben. Damit das im normalen Betrieb keinen Ärger macht, sorgt die Firmware dieser Speichermedien dafür, dass man nicht immer in die gleiche Zelle schreibt auch wenn man das zu tun glaubt. D.h. das sogenannte wear leveling sorgt dafür, dass alle Speicherzellen einigermaßen gerecht verwendet werden. Das bedeutet aber auch, dass ich mich nicht (wie bei einer Festplatte) darauf verlassen kann, dass ein bestimmter Sektor auch jedes mal der selbe ist. Um die Welt noch weiter zu verkomplizieren, haben SSD auch noch Reserve-Speicherzellen, die in der Kapazitätsangabe verschwiegen werden und die die Firmware im Ärmel hat, wenn wirklich Speicherzellen zugrunde gehen. Das alles macht unsere schöne Strategie, einfach alle Blöcke oder Speicherzellen der Reihe nach zu überschreiben mindestens fragwürdig. Und vor allem haben wir fast keine Möglichkeit zu überprüfen, ob nicht doch noch irgendwo Daten übrig sind...

Der offizielle Weg so eine SSD sicher zu löschen geht über das security erase Kommando das die Firmware implementiert. Dabei werden laut Spezifikation wirklich alle Zellen gelöscht bzw. verschlüsselt. Leider müssen wir in weiten Teilen darauf vertrauen, dass der jeweilige Hersteller dieses Kommando auch korrekt (oder überhaupt) implementiert hat.

Und so können wir einen security erase auslösen:

hdparm --user-master u --security-erase 98s7ygbvo23u098yhvn20487yriu /dev/sda

Der Buchstabensalat im Mittelteil ist der zu verwendende Key, ohne den die Daten futsch sind. D.h. wenn wir diesen nicht speichern, aufschreiben oder so doof sind, ihn in unserem Blog zu veröffentlichen ist die Platte safe.

Zu dumm nur, dass das nicht geklappt hat, denn der Rechner hatte was zu meckern:

Issuing SECURITY_ERASE command, password="98s7ygbvo23u098yhvn20487yriu" user=user
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 04 51 40 00 21 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Grumpf!

Irgendwo las ich dann, dass man das security passwort vorher setzen muss, damit das funktioniert. Also:

hdparm --user-master u --security-set-pass 98s7ygbvo23u098yhvn20487yriu /dev/sda

Leider ist die SSD nun aber frozen:

hdparm -I /dev/sda

sagt nämlich:

[...]
Security:
    Master password revision code = 65534
        supported
        enabled
    not locked
        frozen
[...]

Na toll. Um das in Ordnung zu bringen soll es helfen, das System in den suspend Mode zu bringen und dann wieder aufzuwecken:

pm-suspend

Das hat funktioniert. Nun ist die Disk not frozen. Neues Spiel, neues Glück:

hdparm --user-master u --security-erase 98s7ygbvo23u098yhvn20487yriu /dev/sda
security_password: "98s7ygbvo23u098yhvn20487yriu"

/dev/sda:
Issuing SECURITY_ERASE command, password="98s7ygbvo23u098yhvn20487yriu", user=user

Sehr gut!

Neues Fenster einbauen

Die Platte ist erfolgreich geputzt und nun ist es an der Zeit, unser Windows-Image auf einen USB-Stick zu schreiben und die Neuinstallation zu starten.

Also rein in das Verzeichnis, in dem das Image liegt und in alter LINUX-Manier:

dd if=Win10_2004_German_x64.iso of=/dev/sdc bs=10M

Stick in den gelöschten Computer rein, Neustart, ggf. Bootreihenfolge (s.o.) und installieren. Dachte ich jedenfalls. Denn:

Was'n da los? Offenbar kann man ein Windows Installations-Image nicht einfach so auf einen USB-Stick kopieren und erwarten, dass er bootfähig ist. Grumpf!

Wenn man unter Windows arbeitet, was ja durchaus Sinn macht, wenn man ein Windows installieren möchte, kann man bei Microsoft ein Tool herunterladen, das einen USB-Stick zum Installationsmedium macht. Besagtes Windows haben wir aber gerade erfolgreich platt gemacht, und so müssen wir das irgendwie unter Linux hinbekommen.

Etwas online-Recherche später bin ich schlauer. Man kann den Stick einfach partitionieren, eine FAT32 Partition draufmachen und den Inhalt des ISO-Image in diese Partition kopieren. Dann machen wir das mal.

cfdisk /dev/sdc

Und nun

  • Label type "dos" wählen
  • Ggf. vorhandene Partitionen löschen (Delete)
  • Neue primary Partition erzeugen (New – Größenvorschlag akzeptieren – primary)
  • Die neue Partition bootfähig machen (Bootable)
  • Type auf 0x0b "FAT32" ändern (Type)
  • Änderungen auf den Stick schreiben (Write)

Nun noch formatieren:

mkfs.vfat /dev/sdc1

So – jetzt ist der Stick vorbereitet und wir können ihn mit den Daten aus dem Win-10 Installations-Image befüllen. Dazu müssen wir beides erstmal mounten

mkdir image
mount -o loop Win10_2004_German_x64.iso image

mkdir stick
mount /dev/sdc1 stick

Und jetzt ist es ein Kinderspiel, alle Files auf den Stick zu bringen:

cp -r image/* stick/

Eine Weile warten und schon kann es losgehen.

umount stick

Stick wieder in den platten Rechner rein, einschalten, ggf. Boot Device wählen und installieren. So die Theorie. In der Praxis hingegen bekommt man dies:

Was zum Geier ist denn jetzt schon wieder los!?! Warum ist denn dieses blöde install.wim nicht drauf? Spinn' ich jetzt? Mal nachschauen:

ls -l stick/sources/*.wim

-rwx------ 1 root root 491M Okt 15 21:28 stick/sources/boot.wim
-rwx------ 1 root root 4.0G Okt 15 21:30 stick/sources/install.wim

Oha – diese install.wim Datei ist exakt 4GB groß. Das ist verdächtig! Schließlich ist 4GB die Maximale Größe, die ein FAT32-Filesystem verkraftet...

ls -lh image/sources/*.wim

-r-xr-xr-x 1 nobody nogroup 491M Mai 11 08:40 image/sources/boot.wim
-r-xr-xr-x 1 nobody nogroup 4.2G Mai 11 08:42 image/sources/install.wim

Richtig geraten. Da fehlen 200MB von dem File...

Das hätte ich auch früher merken können, denn der aufmerksame Leser hat beim Nachvollziehen vermutlich schon bemerkt, dass der cp Befehl eine Fehlermeldung geworfen hatte:

cp: error writing 'stick/sources/install.wim': File too large

Jetzt fallen mir aber gleich vor Wut alle Haare aus! Und was mache ich jetzt? Mein erster Gedanke war, eine NTFS-Partition zu nehmen, statt FAT32. Das ging zunächst auch super und das blöde .wim File ist in seiner ganzen Pracht und Größe auf dem Stick gelandet. Leider konnte der Rechner aber von der NFTS-Partition nicht booten. Grrr.

Also wieder ins Netz und Nach Abhilfe suchen. Die fand ich auch. Windows hat ein Kommandozeilen-Tool namens Dism, das aus einer riesigen .wim Datei mehrere mundgerechte .swm Dateien macht, mit denen der Installer angeblich auch umgehen kann. Das sieht dann ungefähr so aus:

Dism /Split-Image /ImageFile:C:\sources\install.wim /SWMFile:C:\sources\install.swm /FileSize:3000

Aber wie Ihr Euch vermutlich erinnert, habe ich grade kein Windows mehr, weil wir das ja platt gemacht hatten. Also wieder suchen. Die Lösung heißt wimsplit – ein LINUX-Tool, das das auch kann. Her damit:

apt install wimlib-imagex

Und nun weg mit dem verhunzten install.wim und stattdessen aufsplitten:

rm stick/sources/install.wim
wimsplit image/sources/install.wim stick/sources/install.swm 3000

ls -lh stick/sources/*.swm

-rw------- 1 root root 1.3G Okt 19 10:08 install2.swm
-rw------- 1 root root 3.0G Okt 19 10:07 install.swm

Besser!

Noch schnell alles unmounten.

unount stick
umount image

Und ein neuer Versuch: Stick in den Rechner, Strom an, ggf. Bootdevice wählen, auf Installer warten. Und – Trommelwirbel:

Sieg!