Comment sauvegarder (WSL) le sous-système Linux pour Windows 10, avant la réinitialisation ou la réinstallation du système?

24

Mon problème est que je dois réinitialiser ou réinstaller Windows à cause de certains problèmes, mais j'ai passé beaucoup de temps à configurer WSL pour le développement et je ne veux pas le perdre.

Existe-t-il un moyen de sauvegarder l'intégralité du WSL avec ses paramètres et modules installés, plugins, utilisateurs, etc. et de le restaurer après la réinitialisation ou la réinstallation de Windows? J'ai beaucoup cherché sur ce sujet mais je n'ai trouvé aucune information utile.

Sinon, s'il n'y a aucun moyen de sauvegarder, la réinitialisation de Windows 10 supprimera-t-elle totalement WSL?

emipac
la source
J'imagine, aussi simplement que sa sauvegarde, %USERPROFILE%/AppData/Local/lxss. As-tu essayé ça?
Ramhound
Oui, j'ai essayé, mais il ne fonctionne qu'en partie avec beaucoup d'erreurs.
emipac

Réponses:

15

Comment sauvegarder?

Un certain nombre de façons, mais une pratique courante consiste à utiliser tar pour créer une archive des fichiers que vous souhaitez sauvegarder (afin de tout réinstaller lorsque vous recréez votre environnement). L'écriture d'un backup.shscript simple devrait faciliter la sauvegarde répétée et régulière.

Que sauvegarder?

La plupart de votre configuration est stockée dans des fichiers de configuration Linux .___, souvent dans votre dossier ~ /. Vous pouvez également vouloir sauvegarder vos /etc/ssh/ssh_configfichiers de configuration système et d'autres fichiers similaires, mais soyez prudent avec les fichiers de configuration complexes qui contiennent des clés / données / etc spécifiques à l'instance.

Vous pouvez générer votre liste de paquets apt en utilisant dpkg-query -f '${binary:Package}\n' -Wet pouvez faire écho dans un fichier que vous pouvez également sauvegarder.

Où sauvegarder?

Vous pouvez ensuite copier ces archives tar vers un emplacement séparé. Nous vous recommandons de copier dans un dossier accessible par Windows (par exemple /mnt/c/backups) à partir duquel vous pouvez le copier sur OneDrive, DropBox, disque dur externe, FTP ailleurs, etc.

HTH.

Richard Turner
la source
22

Windows 10 v1903 comprend une commande d'exportation / importation WSL intégrée . Plus précisément, wsl --exportqui produit un taret wsl --import, qui importe un précédemment exporté tar. Vous pouvez ensuite déplacer ce fichier entre les ordinateurs.

Vous pouvez également spécifier stdin / stdout avec -, ce qui devrait vous permettre de transférer directement vers une autre machine et d'importer à l'aide d'un shell distant comme ssh.

Bob
la source
wsl --importpeut également importer des tar.gzfichiers. Ces commandes lancent en %SystemRoot%\System32\lxss\tools\bsdtarinterne le binaire ELF64.
Biswapriyo
anecdata, pour aider les personnes nerveuses: cela wsl --exportpeut prendre plus de temps que prévu. Sur ma machine, il a reposé pendant environ 10 minutes après avoir écrit seulement quelques mégaoctets, puis a finalement écrit un fichier tar de 3,2 Go.
scruss
2

Pour sauvegarder et restaurer une distribution Linux WSL complète, vous pouvez essayer de (1) créer un .tar.gzavec votre système de fichiers et (2) restaurer la copie à l'aide de certains outils d'installation disponibles sur Internet:

  • LxRunOffline a des options pour dupliquer et installer des distributions Linux personnalisées. Vous pouvez installer une distribution à partir d'un .tar.gzfichier.
  • WSL-DistroLauncher vous permet d'installer une distribution à partir d'un fichierrootfs.tar.gz .
  • WSLInstall , un autre programme d'installation Linux pour WSL.

Création de la sauvegarde

Sur la base d'un rapport de problème , vous pouvez créer une sauvegarde à l'aide dutar dans le WSL. Notez que vous devez ignorer certains dossiers (par exemple / mnt) dans la copie.

# cd /
# tar vzcpf /mnt/c/tmp/ubuntu_`date +%Y%m%d_%H`.tar.gz --exclude=/proc --exclude=/dev --exclude=/mnt --exclude=/media --exclude=/lost+found  --exclude=/tmp --exclude=/sys  --exclude=/run / > /mnt/c/tmp/ubuntu_`date +%Y%m%d_%H`.log 2> /mnt/c/tmp/ubuntu_`date +%Y%m%d_%H`.error

Vous devez créer ou déplacer ultérieurement le fichier de sauvegarde dans un fichier valide. /mnt/c sous-dossier . Dans l'exemple, les fichiers sont créés dans le /mnt/c/tmp.


Restauration à l'aide de lxRunOffline

À l'aide de lxRunOffline , vous pouvez installer le tar résultant en tant que nouvelle distribution dans WSL à l'aide de la ligne de commande Windows.

# lxrunoffline install -n <distro name> -d <installation folder> -f <file>
C:\wsl> lxrunoffline install -n mybackup -d c:\wsl\mybackup -f c:\tmp\ubuntu_20180729_00.tar.gz

Pour exécuter la sauvegarde, vous pouvez utiliser le même lxRunOffline

# lxrunoffline run -n <distro name> -w
C:\wsl> lxrunoffline run -n mybackup  -w

Restauration à l'aide d'un DistroLauncher

Il existe de nombreux lanceurs pour les distributions Linux basés sur l' exemple de Microsoft . Je pense que vous pouvez essayer la version Yuk7 .

Vous devez télécharger un fichier de distribution et le launcher.exe. Pour utiliser le même fichier de distribution mentionné ci-dessus, vous devez renommer le fichier de sauvegarde en rootfs.tar.gzet le lanceur avec le nom de distribution souhaité. Plus tard, vous devez exécuter le lanceur en tant qu'administrateur (j'ai des erreurs en l'exécutant en tant qu'utilisateur normal)

c:\wsl> ren launcher.exe mybackup.exe
c:\wsl> ren .\ubuntu_20180729_00.tar.gz rootfs.tar.gz
c:\wsl> .\mybackup.exe

La première fois que vous exécutez le lanceur, il installe et exécute la distribution. La prochaine fois, il exécutera la distribution Linux.

Jaime
la source
Je vous remercie! - Le lanceur wsdl de Yuk7 échouait au lancement, et je n'ai pas vu le problème lxRunOffline. C'est le seul endroit que j'ai trouvé qui a documenté la commande tar correcte qui a résolu mon problème wsldl.
AndrewD
0

Bien que la réponse de Jaime soit parfaite, /tmp dossier n'est pas recréé d'une manière ou d'une autre lorsque launcher.exe est utilisé pour installer la balle tar (je parle spécifiquement de déplacer l'installation WSL d'une machine à une autre).

Il faut donc créer /tmp et attribuer les droits requis.

La seule approche qui a fonctionné pour moi est:

https://www.cyberciti.biz/faq/mysqld-innodb-error-unable-to-create-temporary-file/

# chown root:root /tmp
# chmod 1777 /tmp
## test it ##
# /etc/init.d/mysqld start
Rajesh Thampi
la source