So verschieben Sie Ubuntu in WSL

So verschieben Sie Ubuntu in WSL

Als ich mit der Entwicklung in begann, WSLweiß ich nicht warum, aber ich habe Ubuntu-20.04die App aus dem Microsoft Store installiert, anstatt nur Ubuntu. Ich weiß, dass der einzige Unterschied darin besteht, dass Ubuntu-20.04sie nicht automatisch aktualisiert wird, wenn eine neue UbuntuVersion veröffentlicht wird. Ich möchte einfach nur so vorgehen Ubuntuwie Ubuntu-20.04ohne Neukonfiguration. Ich habe darüber nachgedacht, alle Dateien von Ubuntu-20.04nach zu verschieben Ubuntu, aber ich weiß nicht, ob das sicher ist. Weiß jemand, wie das geht, was ich versuche? Sollte ich es auch tun?

Bearbeiten: Beide Ubuntu-Versionen laufen. WSL-2Ich habe es überprüft, wsl -l -vwie @NotTheDr01ds sagte.

edit 2: Ich möchte meine gesamte Konfiguration von Ubuntu-20.04bis Ubuntueinschließlich aller Dateien und installierten Pakete

Antwort1

Warum Sie dies möglicherweise überhaupt nicht tun müssen

Ok, das Wichtigste zuerst. Das ist wahrscheinlich ziemlich unnötig.

Dass sich das „Ubuntu“ (ohne Versionsnummer) im Store automatisch aktualisiert, ist zwar … richtig, in der Realität aber etwas irreführend.

Das ist ein bisschen schwierig zu erklären, aber wenn Sie "Ubuntu" (keine Version) aus dem Store installieren, erhalten Sie tatsächlichzweiDinge:

  • Ein RootFS-Paket ( install.tar.gz) in C:\Program Files\WindowsApps\CanonicalGroup.... Sie können dies sehen, indem Sie eine administrative PowerShell starten und ausführen Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\Canonical*' | Where-Object {$_.Name -eq 'install.tar.gz' } | % { $_.DirectoryName }.

  • Beim ersten Ausführen (über ubuntu.exe) erstellt das Installationsprogramm Ihre eigentliche WSL-Instanz in Ihrem %UserProfile%\AppData\Local\Packages\CanonicalGroup....

Wenn es eine neue Version im Store gibt, wird nur das Rootfs-Paket aktualisiert. Esnichtändern Sie Ihre installierteBeispiel. (Kredit und Dank an u/zoredache auf Reddit, dererinnert mich daran.)

Dies ist für die meisten Benutzer ziemlich nutzlos, es sei denn, Sie:

  1. Heben Sie die Registrierung der Instanz auf (wodurch die gesamte Konfiguration gelöscht wird) und konfigurieren Sie sie neu, indem Sie den ubuntu.exeBefehl erneut ausführen.
  2. Möchte dies verwenden, install.tar.gzum eine zweite WSL/Ubuntu-Instanz zu erstellen (mit wsl --import). Die neu erstellte Instanz würde dann das vom Store aktualisierte Root-Dateisystem verwenden.

Keines dieser Szenarien ist sehr häufig. Selbst wenn der unversionierte Store Ubuntuauf (vermutlich) 22.04 aktualisiert wird, ändert sich nichts an IhremEingerichtetInstanz von 20.04, nur das RootfsPaket.

Sie müssen weiterhin einen ausführen, sudo do-release-upgrade -dwenn Sie irgendwann auf 22.04 (oder eine Zwischenversion) aktualisieren möchten.

Wenn man also davon ausgeht, dass ... Da Sie Ihre Ubuntu-20.04Konfiguration bereits Ihren Wünschen entsprechend vorgenommen haben, bietet eine Änderung für Sie keinen großen Vorteil, außer dass Sie einen kürzeren und klareren UbuntuNamen für die WSL-Instanz erhalten.

Wie es trotzdem geht

Allerdings ist es angesichts der Art und Weise, wie WSL2 Ihre Daten speichert, nicht allzu schwierig, Konfigurationen zu verschieben. Das gesamte Dateisystem für eine WSL2-Instanz wird auf einer virtuellen Festplatte mit dem Namen gespeichert ext4.vhdx.

UbuntuDa Sie zwei Ubuntu-Installationen ( und ) haben Ubuntu-20.04, finden Sie zwei dieser ext4.vhdxDateien unter %userprofile%\AppData\Local\Packages\. Um die genauen Speicherorte zu ermitteln, führen Sie Folgendes in PowerShell aus:

Get-ChildItem "$env:USERPROFILE\AppData\Local\Packages\CanonicalGroupLimited*\LocalState\*"

Für meine Installation ist das:

...\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
...\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

Die Lösung dürfte an dieser Stelle ziemlich offensichtlich sein, aber seien Sie natürlich vorsichtig:

  • Beenden Sie alle laufenden WSL-Instanzen.

  • wsl --shutdownStellen Sie dann sicher, dass derzeit nichts ausgeführt wird.

  • Eine Sicherungskopie Ihrer bestehenden Konfiguration wäre keine schlechte Idee mit wsl --export Ubuntu-20.04 2021-09-26_Ubuntu-20.04_backup.tar(oder wie auch immer Sie die Sicherungsdatei nennen möchten). Dadurch wird im Wesentlichen ein Tarball des aktuellen Root-Dateisystems erstellt, einschließlich aller Dateien, Eigentümer und Berechtigungen.

  • Kopieren Sie an diesem Punkt einfach Ihr gewünschtes (Ubuntu-20.04) ext4.vhdxüber das neu installierte (Ubuntu). Der eigentliche Trick besteht einfach darin, sicherzustellen, dass Sie das richtige kopieren. Möglicherweise möchten Sie Ihre Ubuntu-20.04Distribution ausführen und eine schnelle Änderung vornehmen, damit Sie den späteren Zeitstempel auf der „richtigen“ Kopie leicht sehen können.

Die einzige wirkliche Anforderung besteht darin, dass der Standardbenutzer für beide Instanzen derselbe sein muss.


Eine andere Möglichkeit – Da Sie Ihre gewünschte Konfiguration mit gesichert haben wsl --export, können Sie diese jederzeit einfach wsl --importin eine neue Instanz mit dem Namen übertragen Ubuntu.

  • Zuerst müssen Sie den Store deinstallieren Ubuntu.
  • Wählen Sie dann ein Verzeichnis für Ihre neue Instanz. Es kann sich überall befinden und muss nicht mehr in Ihrem AppDataVerzeichnis liegen.
  • wsl --import Ubuntu <directory> path\to\2021-09-26_Ubuntu-20.04_backup.tar --version 2

Ich behalte meine in %userprofile%\Documents\WSL\instancesund meine tarBackups in %userprofile%\Documents\WSL\images. So kann ich schnell neue Instanzen über starten wsl --import. Es ist schön, etwas testen zu können, ohne meine alltägliche Umgebung zu beeinträchtigen.


Hinweis für alle WSL1-Benutzer, die dies lesen. Das Root-Dateisystem für WSL1 ist nicht in einer virtuellen HDD-Datei gespeichert, sondern als tatsächliche Dateien und Verzeichnisse unter ...\LocalState\rootfs\. Bitte greifen Sie nicht direkt auf diese Dateien zu, da dies leicht zu einer Beschädigung des WSL-Dateisystems führen kann (sieheMicrosoft-Entwicklerblog).

Wenn Sie einfach von Windows aus auf die Dateien zugreifen müssen, verwenden Sie den \\wsl$\<distro>Pfad in Windows, der in diesem Microsoft-Blog angegeben ist. Wenn Sie jedoch das Ganze kopieren müssen, wie in dieser Frage, konvertieren Sie die Instanz am besten zuerst in WSL2 wsl --set-version <distro> 2(erstellen Sie wsl --exportzuerst eine Sicherung). Nach der Konvertierung liegt das Dateisystem im WSL2- ext4.vhdxFormat vor.

verwandte Informationen