在系统重置或重新安装之前,如何备份(WSL)Windows 10的Linux子系统?


24

我的问题是,由于某些问题,我必须重置或重新安装Windows,但是我花了很多时间来配置WSL进行开发,并且不想丢失它。

有什么方法可以备份整个WSL及其设置和已安装的模块,插件,用户等,并在重置或重新安装Windows之后将其还原?我在这个主题上进行了大量搜索,但是找不到任何有用的信息。

否则,如果没有备份方法,Windows 10重设会完全删除WSL吗?


我可以想象,就像备份一样简单%USERPROFILE%/AppData/Local/lxss。你有尝试过吗?
Ramhound

是的,我尝试过,但是它只能部分起作用,但有很多错误。
emipac'1

Answers:


15

如何备份?

有多种方法,但一种常见的做法是使用tar创建要备份的文件的存档(以便在重新创建环境时重新安装所有内容)。编写简单的backup.sh脚本应该可以更轻松地按计划定期重复备份。

要备份什么?

您的大多数配置都存储在Linux .___配置文件中,通常位于〜/文件夹中。您可能还想备份您的/etc/ssh/ssh_config和其他类似的系统配置文件,尽管使用包含特定于实例的键/数据/等的复杂配置文件时要格外小心。

你可以生成你的apt软件包列表使用dpkg-query -f '${binary:Package}\n' -W并能呼应成一个文件,你也可以备份。

备份到哪里?

然后,您可以将这些tar归档文件复制到另一个位置。我们建议复制到Windows可访问的文件夹(例如/mnt/c/backups),您可以从中将其复制到OneDrive,DropBox,外部HDD,FTP在其他位置等。

HTH。


22

Windows 10 v1903 包含内置的WSL导出/导入命令。具体来说,wsl --export会产生tarwsl --import,并会导入先前导出的tar。然后,您可以在计算机之间移动此文件。

您还可以使用指定stdin / stdout -,这应允许您直接转移到另一台计算机并使用远程shell(如)导入ssh


wsl --import也可以导入tar.gz文件。这些命令在内部启动%SystemRoot%\System32\lxss\tools\bsdtarELF64二进制文件。
Biswapriyo

anecdata,以帮助那些紧张不安的人:wsl --export可能花费比您预期更长的时间。在我的机器上,它只写了几兆字节就呆了大约10分钟,然后最终写出了3.2 GB的tar文件。
凌晨

2

要备份和还原完整的WSL linux发行版,您可以尝试(1).tar.gz使用文件系统创建一个,并且(2)使用Internet上提供的一些安装程序工具还原副本:

  • LxRunOffline具有复制和安装自定义linux发行版的选项。您可以从.tar.gz文件安装发行版。
  • WSL-DistroLauncher允许您从中安装发行版rootfs.tar.gz
  • WSLInstall,另一个用于WSL的Linux安装程序。

创建备份

根据问题报告,您可以使用tarWSL中的创建备份。请注意,您必须忽略副本中的某些文件夹(例如/ mnt)。

# 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

您必须将备份文件创建或以后将其移动到有效的/mnt/c子文件夹中。在示例中,文件创建到中/mnt/c/tmp


使用lxRunOffline还原

使用lxRunOffline,您可以使用Windows命令行在WSL中将生成的tar安装为新发行版。

# 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

要运行备份,您可以使用相同的lxRunOffline

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

使用DistroLauncher还原

有很多基于Microsoft示例的 linux发行版启动器。我认为您可以尝试Yuk7版本

您必须下载一个分发文件,然后下载launcher.exe。若要使用上述相同的分发文件,必须将备份文件重命名为rootfs.tar.gz,启动器重命名为所需的分发名。稍后,您必须以管理员身份运行启动器(我在以普通用户身份运行时遇到错误)

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

首次运行启动器时,它将安装并运行发行版。下次,它将运行linux发行版。


谢谢!-Yuk7的wsdl启动器在启动时一直失败,并且我没有看到lxRunOffline问题。这是我发现的唯一记录了可解决wsldl问题的正确tar命令的地方。
AndrewD

0

尽管Jaime的回答很完美,但是/tmp当使用launcher.exe安装tar球时,无论如何都不会重新创建该文件夹(我特别是在谈论将WSL安装从一台机器移动到另一台机器)。

因此,必须创建/tmp并分配所需的权限。

对我有用的一种方法是:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.