Como fazer backup (WSL) do subsistema Linux para Windows 10, antes da redefinição ou reinstalação do sistema?

24

Meu problema é que tenho que redefinir ou reinstalar o Windows por causa de alguns problemas, mas gastei muito tempo para configurar o WSL para desenvolvimento e não quero perdê-lo.

Existe alguma maneira de fazer backup de todo o WSL com suas configurações e módulos instalados, plugins, usuários etc. e restaurá-lo depois de redefinir ou reinstalar o Windows? Pesquisei bastante este tópico, mas não encontrei nenhuma informação útil.

Caso contrário, se não houver como fazer backup, a redefinição do Windows 10 excluirá totalmente o WSL?

emipac
fonte
Eu imagino, é tão simples quanto fazer backup %USERPROFILE%/AppData/Local/lxss. Você já tentou isso?
Ramhound
Sim, eu tentei, mas é funcional apenas parcialmente com muitos erros.
Emipac

Respostas:

15

Como fazer backup?

De várias maneiras, mas uma prática comum é usar o tar para criar um arquivo morto dos arquivos que você deseja fazer backup (para reinstalar tudo quando você recriar seu ambiente). Escrever um backup.shscript simples deve facilitar o backup repetido regularmente.

O que fazer backup?

A maior parte da sua configuração é armazenada nos arquivos de configuração .___ do Linux, geralmente na sua pasta ~ /. Você também pode fazer backup de seus /etc/ssh/ssh_configarquivos de configuração do sistema e de outros similares, embora tenha cuidado com arquivos de configuração complexos que contêm chaves / dados / etc específicos da instância.

Você pode gerar sua lista de pacotes apt usando dpkg-query -f '${binary:Package}\n' -We pode ecoar em um arquivo que você também pode fazer backup.

Para onde fazer backup?

Você pode copiar esses arquivos tar para um local separado. Recomendamos copiar para uma pasta acessível pelo Windows (por exemplo /mnt/c/backups), da qual você pode copiá-la para o OneDrive, DropBox, HDD externo, FTP em outro lugar, etc.

HTH.

Richard Turner
fonte
21

O Windows 10 v1903 inclui um comando WSL de exportação / importação interno . Especificamente, wsl --exportque produz um tare wsl --import, que importa um exportado anteriormente tar. Você pode então mover este arquivo entre computadores.

Você também pode especificar stdin / stdout com -, o que deve permitir a transferência direta para outra máquina e a importação usando um shell remoto como ssh.

Prumo
fonte
wsl --importtambém pode importar tar.gzarquivos. Esses comandos lançam %SystemRoot%\System32\lxss\tools\bsdtarinternamente o binário ELF64.
Biswapriyo 12/05/19
anecdata, para ajudar aqueles de disposição nervosa: wsl --exportpode levar mais tempo do que você poderia esperar. Na minha máquina, permaneceu por cerca de 10 minutos gravando apenas alguns megabytes e, finalmente, gravando um arquivo tar de 3,2 GB.
scruss
2

Para fazer backup e restaurar uma distribuição Linux completa da WSL, você pode tentar (1) criar um .tar.gz com seu sistema de arquivos e (2) restaurar a cópia usando algumas ferramentas instaladoras disponíveis na Internet:

  • LxRunOffline tem opções para duplicar e instalar distribuições linux personalizadas. Você pode instalar uma distribuição a partir de um .tar.gzarquivo.
  • WSL-DistroLauncher permite instalar uma distribuição a partir de um rootfs.tar.gz.
  • WSLInstall , outro instalador linux para WSL.

Criando o backup

Com base em um relatório de problemas , você pode criar um backup usando o tarna WSL. Observe que você deve ignorar algumas pastas (por exemplo, / mnt) na cópia.

# 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

Você deve criar ou mover posteriormente o arquivo de backup para uma /mnt/csubpasta válida . No exemplo, os arquivos são criados no /mnt/c/tmp.


Restaurando usando lxRunOffline

Usando lxRunOffline , você pode instalar o tar resultante como uma nova distribuição no WSL usando a linha de comando do 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 executar o backup, você pode usar o mesmo lxRunOffline

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

Restaurando usando um DistroLauncher

Existem muitos lançadores para distribuições linux com base no exemplo da Microsoft . Eu acho que você pode tentar a versão Yuk7 .

Você deve baixar um arquivo de distribuição e o launcher.exe. Para usar o mesmo arquivo de distribuição mencionado acima, você deve renomear o arquivo de backup rootfs.tar.gze o iniciador para o nome da distribuição que deseja. Posteriormente, você deve executar o iniciador como administrador (obtive erros ao executá-lo como usuário normal)

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

A primeira vez que você executa o iniciador, ele instala e executa a distribuição. Na próxima vez, ele executa a distribuição linux.

Jaime
fonte
Obrigado! - O lançador wsdl do Yuk7 continuava falhando no lançamento, e eu não vi o problema lxRunOffline. Este foi o único lugar que encontrei que documentou o comando tar correto que corrigiu meu problema wsldl.
Andrewd
0

Embora a resposta de Jaime seja perfeita, de alguma forma a /tmppasta não é recriada quando o launcher.exe é usado para instalar a bola tar (estou falando especificamente sobre mover a instalação da WSL de uma máquina para outra).

Portanto, é preciso criar /tmpe atribuir os direitos necessários.

A única abordagem que funcionou para mim é:

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
fonte