Come eseguire il backup del sottosistema Linux (WSL) per Windows 10, prima di ripristinare o reinstallare il sistema?


24

Il mio problema è che devo ripristinare o reinstallare Windows a causa di alcuni problemi, ma ho trascorso molto tempo a configurare WSL per lo sviluppo e non voglio perderlo.

Esiste un modo per eseguire il backup dell'intero WSL con le sue impostazioni, i moduli installati, i plug-in, gli utenti ecc. E ripristinarlo dopo aver ripristinato o reinstallato Windows? Ho cercato molto in questo argomento ma non sono riuscito a trovare alcuna informazione utile.

Altrimenti se non c'è modo di eseguire il backup, il ripristino di Windows 10 eliminerà totalmente WSL?


Immagino, la sua nel modo più semplice il backup, %USERPROFILE%/AppData/Local/lxss. Ci hai provato?
Ramhound,

Sì, ci ho provato, ma è funzionale solo in parte con molti errori.
emipac,

Risposte:


15

Come fare il backup?

Qualsiasi numero di modi, ma una pratica comune è quella di utilizzare tar per creare un archivio dei file di cui si desidera eseguire il backup (al fine di reinstallare tutto quando si ricrea l'ambiente). La scrittura di uno backup.shscript semplice dovrebbe rendere più semplice il backup ripetuto a intervalli regolari.

Cosa fare il backup?

La maggior parte della configurazione è archiviata in file di configurazione .___ di Linux, spesso nella cartella ~ /. Puoi anche eseguire il backup del tuo /etc/ssh/ssh_confige di altri file di configurazione del sistema simili, ma fai attenzione ai file di configurazione complessi che contengono chiavi / dati / ecc. Specifici dell'istanza.

È possibile generare il proprio elenco di pacchetti apt usando dpkg-query -f '${binary:Package}\n' -We si può inserire in un file che è anche possibile eseguire il backup.

Dove eseguire il backup?

È quindi possibile copiare questi archivi tar in una posizione separata. Si consiglia di copiare in una cartella accessibile da Windows (ad esempio /mnt/c/backups) da cui è possibile copiarlo su OneDrive, DropBox, HDD esterno, FTP da qualche altra parte, ecc.

HTH.


21

Windows 10 v1903 include un comando di esportazione / importazione WSL incorporato . In particolare, wsl --exportche produce un tare wsl --importche importa un esportato in precedenza tar. È quindi possibile spostare questo file tra i computer.

Puoi anche specificare stdin / stdout con -, che dovrebbe permetterti di trasferire direttamente su un'altra macchina e importare usando una shell remota come ssh.


wsl --importpuò anche importare tar.gzfile. Quei comandi lanciano %SystemRoot%\System32\lxss\tools\bsdtarinternamente il binario ELF64.
Biswapriyo,

aneddoti, per aiutare quelli di una disposizione nervosa: wsl --exportpotrebbe richiedere più tempo del previsto. Sul mio computer, è rimasto per circa 10 minuti dopo aver scritto solo pochi megabyte, quindi alla fine ha scritto un file tar da 3,2 GB.
scruss

2

Per eseguire il backup e il ripristino di una distribuzione linux WSL completa, è possibile provare a (1) creare una .tar.gzcon il proprio filesystem e (2) ripristinare la copia utilizzando alcuni strumenti di installazione disponibili in Internet:

  • LxRunOffline ha opzioni per duplicare e installare distribuzioni Linux personalizzate. È possibile installare una distro da un .tar.gzfile.
  • WSL-DistroLauncher consente di installare una distribuzione da a rootfs.tar.gz.
  • WSLInstall , un altro programma di installazione di Linux per WSL.

Creare il backup

Sulla base di una segnalazione di problemi , è possibile creare un backup utilizzando tarnel WSL. Si noti che è necessario ignorare alcune cartelle (ad esempio / mnt) nella copia.

# 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

È necessario creare o spostare in un secondo momento il file di backup in una /mnt/csottocartella valida . Nell'esempio, i file vengono creati in /mnt/c/tmp.


Ripristino tramite lxRunOffline

Utilizzando lxRunOffline , è possibile installare il tar risultante come nuova distribuzione in WSL utilizzando la riga di comando di 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

Per eseguire il backup, è possibile utilizzare lo stesso lxRunOffline

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

Ripristino utilizzando un DistroLauncher

Esistono molti lanciatori per le distribuzioni di Linux basate sull'esempio di Microsoft . Penso che potresti provare la versione Yuk7 .

È necessario scaricare un file di distribuzione e il file launcher.exe. Per utilizzare lo stesso file di distribuzione sopra menzionato, è necessario rinominare il file di backup rootfs.tar.gze il programma di avvio con il nome di distribuzione desiderato. Successivamente è necessario eseguire il programma di avvio come amministratore (ho riscontrato errori durante l'esecuzione come utente normale)

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

La prima volta che si avvia il programma di avvio, viene installato ed eseguito la distribuzione. La prossima volta, esegue la distribuzione di Linux.


Grazie! - Il launcher wsdl di Yuk7 continuava a fallire all'avvio, e non ho visto il problema lxRunOffline. Questo è stato l'unico posto che ho trovato che documentava il comando tar corretto che ha risolto il mio problema con wsldl.
AndrewD,

0

Mentre la risposta di Jaime è perfetta, in qualche modo la /tmpcartella non viene ricreata quando launcher.exe viene utilizzato per l'installazione della tar ball (sto parlando in particolare di spostare l'installazione WSL da una macchina all'altra).

Quindi è necessario creare /tmpe assegnare i diritti richiesti.

L'unico approccio che ha funzionato per me è:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.