¿Cómo hacer una copia de seguridad (WSL) del subsistema de Linux para Windows 10, antes de reiniciar o reinstalar el sistema?

24

Mi problema es que tengo que restablecer o reinstalar Windows debido a algunos problemas, pero pasé mucho tiempo para configurar WSL para el desarrollo y no quiero perderlo.

¿Hay alguna forma de hacer una copia de seguridad de todo el WSL con su configuración y módulos instalados, complementos, usuarios, etc. y restaurarlo después de restablecer o reinstalar Windows? Busqué mucho este tema pero no pude encontrar ninguna información útil.

De lo contrario, si no hay forma de hacer una copia de seguridad, ¿el reinicio de Windows 10 eliminará totalmente WSL?

emipac
fuente
Me imagino, su tan simple como realizar copias de seguridad, %USERPROFILE%/AppData/Local/lxss. ¿Has intentado eso?
Ramhound
Sí, lo intenté, pero es funcional solo en parte con muchos errores.
emipac

Respuestas:

15

¿Cómo hacer una copia de seguridad?

De varias maneras, pero una práctica común es usar tar para crear un archivo de los archivos que desea respaldar (para volver a instalar todo cuando vuelva a crear su entorno). Escribir un backup.shscript simple debería facilitar la copia de seguridad repetida en un horario regular.

¿Qué hacer una copia de seguridad?

La mayor parte de su configuración se almacena en archivos de configuración de Linux .___, a menudo en su carpeta ~ /. Es posible que también desee hacer una copia de seguridad de su /etc/ssh/ssh_configy otros archivos de configuración del sistema similares, aunque tenga cuidado con los archivos de configuración complejos que contienen claves / datos / instancias específicas de la instancia, etc.

Puede generar su lista de paquetes apt usando dpkg-query -f '${binary:Package}\n' -Wy podría hacer eco en un archivo que también puede respaldar.

¿A dónde respaldar?

Luego puede copiar estos archivos tar en una ubicación separada. Recomendamos copiar en una carpeta accesible para Windows (p /mnt/c/backups. Ej. ) Desde la cual puede copiarla en OneDrive, DropBox, HDD externo, FTP en otro lugar, etc.

HTH

Richard Turner
fuente
22

Windows 10 v1903 incluye un comando de exportación / importación WSL incorporado . Específicamente, wsl --exportque produce un tary wsl --import, que importa un exportado previamente tar. Luego puede mover este archivo entre computadoras.

También puede especificar stdin / stdout con -, lo que debería permitirle transferir directamente a otra máquina e importar utilizando un shell remoto como ssh.

Beto
fuente
wsl --importTambién puede importar tar.gzarchivos. Esos comandos lanzan %SystemRoot%\System32\lxss\tools\bsdtarinternamente el binario ELF64.
Biswapriyo
anecdata, para ayudar a aquellos con una disposición nerviosa: wsl --exportpuede tomar más tiempo de lo esperado. En mi máquina, se sentó durante aproximadamente 10 minutos después de haber escrito solo unos pocos megabytes, luego finalmente escribió un archivo tar de 3.2 GB.
scruss
2

Para hacer una copia de seguridad y restaurar una distribución completa de Linux de WSL, puede intentar (1) crear una .tar.gzcon su sistema de archivos y (2) restaurar la copia usando algunas herramientas de instalación disponibles en Internet:

  • LxRunOffline tiene opciones para duplicar e instalar distribuciones de Linux personalizadas. Puede instalar una distribución desde un .tar.gzarchivo.
  • WSL-DistroLauncher le permite instalar una distribución desde a rootfs.tar.gz.
  • WSLInstall , otro instalador de Linux para WSL.

Crear la copia de seguridad

Según un informe de problemas , puede crear una copia de seguridad utilizando el taren el WSL. Tenga en cuenta que debe ignorar algunas carpetas (por ejemplo, / mnt) en la 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

Debe crear, o mover más tarde, el archivo de respaldo a una /mnt/csubcarpeta válida . En el ejemplo, los archivos se crean en el /mnt/c/tmp.


Restauración usando lxRunOffline

Usando lxRunOffline , puede instalar el tar resultante como una nueva distribución en WSL usando la línea de comando de 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

Para ejecutar la copia de seguridad, puede usar el mismo lxRunOffline

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

Restauración usando un DistroLauncher

Hay muchos lanzadores para distribuciones de Linux basados ​​en el ejemplo de Microsoft . Creo que puedes probar la versión Yuk7 .

Debe descargar un archivo de distribución y el launcher.exe. Para usar el mismo archivo de distribución mencionado anteriormente, debe cambiar el nombre del archivo de copia de seguridad rootfs.tar.gzy el iniciador por el nombre de distribución que desee. Más tarde, debe ejecutar el iniciador como administrador (recibí errores al ejecutarlo como usuario normal)

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

La primera vez que ejecuta el iniciador, se instala y ejecuta la distribución. La próxima vez, ejecuta la distribución de Linux.

Jaime
fuente
¡Gracias! - El lanzador wsdl de Yuk7 seguía fallando en el lanzamiento, y no vi el problema lxRunOffline. Este fue el único lugar que encontré que documentó el comando tar correcto que solucionó mi problema de wsldl.
AndrewD
0

Si bien la respuesta de Jaime es perfecta, de alguna manera la /tmpcarpeta no se recrea cuando se utiliza launcher.exe para instalar la bola de alquitrán (específicamente estoy hablando de mover la instalación WSL de una máquina a otra).

Entonces uno debe crear /tmpy asignar los derechos requeridos.

El único enfoque que funcionó para mí es:

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
fuente