Software Berater Logo Software Berater #neuland seit 1993

WSL Migration auf einen neuen PC

Es ist Laptop Tag und ich freue mich. Ein nagelneuer DELL Precision 5570 Laptop in fetter Ausstattung ist in der Post. Man meint es gut mit mir. Jetzt muss ich nur meine WSL2-Installation vom alten auf den neuen PC bewegen. Und vielleicht mal einen Geschwindigkeitsvergleich starten…

Ich bin nicht erst seit meinem Objektkultur-Blog über Docker, Windows und WSL begeistert davon, dass Microsoft heute Linux auf Windows in einfache Weise möglich macht - und sogar selbst Linux-Distributionen zum Download anbietet. WSL (genauer: WSL 2) gehört schon seit langem zu meinem Arbeitsalltag. Nicht verwunderlich, dass meine Installation sorgfältig gepflegt ist und ich sie nicht verlieren möchte.

Eine WSL-Installation ist eine Virtuelle Maschine, ein komplettes Linux-Betriebssystem.

Schrit 1: Bereinigen

Im ersten Schritt reduziere ich den Speicherbedarf meiner Ubuntu-Installation ein wenig. Insbesondere Docker lässt viele Gigabyte liegen, die wirklich nicht migriert werden müssen. Aber auch NPM, Maven und RVM sind groß darin. Diese Kommandos gebe ich in der Ubuntu-Shell ein:

# Anzeige der gesamten Belegung
sudo du -hsx /

npm cache clean --force
rvm cleanup
docker system prune --all
sudo rm -rf /var/tmp/*

# Erneute Kontrolle des Ergebnisses
sudo du -hsx /

Das hat bei mir einige Gigabyte beseitigt. Alle Daten, die jetzt gefahrlos gelöscht werden können, müssen im zweiten Schritt nicht bewegt werden.

Schritt 2: Exportieren

Zum Export beende ich die VM, und erzeuge eine Exportdatei:

# VM herunterfahren
wsl.exe --shutdown

# "Ubuntu" ist der Name deiner WSL-VM.
# Der Ausgabepfad kann frei gewählt werden
wsl.exe --export Ubuntu c:\temp\ubuntu.tar

Der angegebene Pfad C:\temp muss existieren. Die entstehende tar-Datei (tar: tape archive) ist nicht komprimiert und daher in meinem Fall knapp 13GB groß.

Schritt 3: Vorbereitung

Auf dem neuen PC muss WSL2 installiert werden. In den Einstellungen unter Apps->Optionale Features findet man ganz unten “Mehr Windows Funktionen”. Dort muss das “Windows-Subsystem für Linux” aktiviert werden, dies erfordert einen Neustart.

wsl feature aktiviert

Die große Datei aus Schritt 2 muss jetzt irgendwie auf den neuen PC gelangen. In meinem Fall war ein schnelles lokales Netzwerk vorhanden, ein ausreichend großer USB-Stick tut es wohl auch. Das dauert halt ein wenig länger. Auf einem schwachen WLAN würde der Transfer mehr als 4 Stunden benötigen, ggü. 2,5 Minuten per Gigabit-LAN.

Schritt 4: Import

Der große Tag: Wir importieren die Daten.

wsl.exe --import Ubuntu %LOCALAPPDATA%\Ubuntu C:\path\to\ubuntu.tar --version 2

Der Importbefehl legt ein neues Verzeichnis an, hier %USERPROFILE%\AppData\Local\Ubuntu. Der Name der importierten VM wird Ubuntu sein, als WSL-Version ist Version 2 angegeben. Dieser Vorgang sollte nur recht kurze Zeit in Anspruch nehmen.

Jetzt sollte die VM mit wsl.exe -d Ubuntu gestartet werden können.

Schritt 5: Letzter Schliff

Der Standard-Benutzername, den ich in meiner VM ursprünglich gesetzt habe, ist nach dem Import noch nicht automatisch gesetzt. Neue Sessions starten also zumeist als Root. In der /etc/wsl.conf kann dies konfiguriert werden.

[user]
default=christian

Auf PCs mit viel Speicher legt WSL mit 25% des Gesamt-RAM per default zuviel Swap an. Wer diesen nicht benötigt (und gerade Kubernetes ist da sogar ziemlich empfindlich) kann den Swap durch einen Eintrag in der Datei .wslconfig vermeiden.

[wsl2]
memory=16GB
swap=0

Zu den Details bzgl wsl.conf und .wslconfig siehe die Doku bei Microsoft: Konfiguration erweiterter Einstellungen in WSL

Bonus: Precision 5570 im Geschwindigkeitstest

Wie viel schneller ist der schicke Laptop jetzt für mich, in meiner Praxis? Ich habe bei der Arbeit gerade mit einem hübschen Projekt zu tun, dessen Ende-zu-Ende-Tests mit Docker Compose und Cypress automatisiert sind. Das erzeugen der Images, starten der Container und ausführen der Tests dauert eine Weile, und das eignet sich gut dazu, die Systeme zu vergleichen.1

Zum Test habe ich das build-Skript einmalig zum aufwärmen durchlaufen lassen, um Caches und Downloads zu erzeugen. Mit time ./run.sh habe ich dann in drei Durchläufen die Zeit gemessen und gemittelt. Weitere Optimierungen habe ich nicht vorgenommen. Und aus Spaß hab ich das identische Skript auch auf meinem AMD Ryzen 9 mit Manjaro Linux laufen lassen.

e2e benchmark Linux vs Windows

Ernüchternde Fakten: Der Precision 5570 kann auf dem Papier vor Kraft kaum gehen, ist in meiner Praxis bei diesem Workload aber nur ca 3,3% schneller als der Vorgänger. Fun fact: Mein AMD Mini-PC für ein Viertel des Geldes fährt mit Linux Kreise um den Boliden. Kinder, das nur wieder mal als Erinnerung, warum Linux für Entwickler besser ist…

  1. Sowohl der Precision als auch Latitude Laptop basieren auf i7-CPUs, achte und zehnte Generation. Mein AMD-Rechner ist ein Beelink GTR5 Barebone mit AMD Ryzen 9 5900HX. Alle Systeme haben NVMe PCI SSDs. Die Laptops haben 16GB (Latitude) und 32GB (Precision) RAM, der AMD verfügt über 64GB RAM.