![Erstellen eines Snapshots in WSL](https://rvso.com/image/1072221/Erstellen%20eines%20Snapshots%20in%20WSL.png)
Ich habe gerade WSL 2 auf meinem Rechner installiert (unter Windows 10 Pro). Ich habe die Ubuntu-Distribution 20.04 heruntergeladen. Ich frage mich, ob ich davon Snapshots und Klone erstellen kann wie in Vmware. Vielen Dank!
Antwort1
Der Kommentar von @Esther, der auf Super User verweist, ist gut, aber ich denke, es ist eine Frage, die eine eigene Antwort hier auf Ask Ubuntu verdient. Sie braucht auch eineAktualisiertAntwort, da WSL in diesem Bereich neue Funktionen hat.
Die Super User Frage deckt auch nurKlonen/Backups, aber keine echten „Schnappschüsse“, die meiner Meinung nach normalerweise „inkrementelle“ Backups bedeuten. Also werde ichversuchenin dieser Antwort auch auf „Schnappschüsse“ einzugehen.
Sichern einer WSL1- oder WSL2-Distribution
Der unterstützte Mechanismus zum „Sichern“ einer WSL1- oder WSL2-Distribution ist die Verwendung von wsl --export
. Wie bei den meisten Sicherungen ist es am besten, zuerst die verwendeten Dateien zu schließen. Daher ist es auch am besten, diese Aktionen über PowerShell auszuführen.
Beenden Sie Ubuntu auf WSL
Von PowerShell:
wsl -l -v # Confirm your distribution name for the following commands wsl --terminate <distro_name> # Create directory structure, adjust to preference: mkdir "$env:userprofile\WSL\images" # You can hardcode the backup name below if you wish. # This example creates it with a date/timestamp-prefix on the tarball: wsl --export <distroname> "$env:userprofile\WSL\images\$(date -f yyyyMMdd_HHmmss)_Ubuntu.tar"
Wiederherstellen der vorherigen Sicherung auf einer neuen Instanz (Erstellen einer geklonten Instanz)
Zum Erstellen des Klons können Sie den wsl --import
Befehl zum Erstellen einer neuen Instanz aus der im vorherigen Schritt erstellten Sicherung verwenden.
Nochmals aus PowerShell:
# Adjust paths and names to your preference
mkdir "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone"
wsl --import Ubuntu20.04_TestClone "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone" <path_to_previous_backup.tar> --version 2
WSL „merkt“ sich den Standardbenutzer für --import
ED-Instanzen nicht, Sie müssen ihn also manuell festlegen. Siehediese Super User-Antwortwie das mit einer /etc/wsl.conf
Datei geht.
Neue, kürzere Option für WSL2 in der WSL-Vorschau
In der neuesten Version von WSL (derzeit in der Vorschau) gibt es mehrere zusätzliche Optionen für wsl --import
(sowie --export
).
Wenn Sie Windows 11 verwenden (was bei Ihnen nicht der Fall ist, aber bei anderen vielleicht und irgendwann auch bei Ihnen), können Sie es aus dem Microsoft Store installieren. Es ist dort aufgeführt als„Vorschau des Windows-Subsystems für Linux“.
Mit dieser Version können Sie eine VHDX-Datei (die virtuelle Festplatte einer WSL2-Instanz) direkt von einer vorhandenen Instanz in eine neue Instanz importieren wsl --import --vhd
. Dazu müssen Sie zunächst wissen, wo sich Ihre vorhandene VHDX-Datei befindet.
Von PowerShell:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | ForEach-Object { (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath }
Importieren Sie dann einfach von diesem Speicherort mit:
# Adjust paths and names to your preference
mkdir "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone"
wsl --import Ubuntu20.04_TestClone "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone" <path_to_main_distro>\ext4.vhdx> --vhd --version 2
Hinweis: Wenn Sie die folgende Fehlermeldung erhalten:
The process cannot access the file because it is being used by another process.
... dann versuchen Sie Folgendes der Reihe nach:
wsl --terminate <distro>
die vorhandene Instanz, und versuchen Sie es dann--import
erneut.- Stoppen Sie Docker Desktop, falls es ausgeführt wird, und versuchen Sie es dann
--import
erneut. wsl --shutdown
, und versuchen Sie es dann--import
erneut.
Diese Methode hat einen Nachteil: Es handelt sich lediglich um eine „Kopie“ der vorhandenen WSL2-VHDX-Datei. Das bedeutet, dass das neue Image denselben „verschwendeten Speicherplatz“ aufweist, wenn es mehr Speicherplatz verbraucht als nötig (siehediese AntwortFür mehr Information).
Inkrementelle Snapshots
WSL verfügt noch nicht über eine Funktion, die inkrementelle Snapshots erstellt, um Speicherplatz zu sparen. EsMaiEs ist möglich, dies manuell zusammenzuhacken, aber ich habe diese Technik noch nicht persönlich getestet. Die Idee ist im Großen und Ganzen:
- Erstellen Sie ein Tarball der vorhandenen Instanz mit Gnu
tar
'sinkrementeller SpeicherauszugBesonderheit. - Geben Sie die richtigen Dateien im tatsächlichen Dateisystem an
--one-file-system
und erfassen Sie sie (und ihre erweiterten Attribute, falls sie in Ihrer Distribution verwendet werden).--xattrs
- Rekonstruieren Sie aus dem inkrementellen Tarball ein „nicht-inkrementelles“ Tarball.
- Stellen Sie es mit wieder her
wsl --import
.
Das ist etwas, was ich schon länger ausprobieren wollte, aber mir fehlte bisher einfach die Zeit.