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

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

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

有没有办法备份整个 WSL 及其设置和已安装的模块、插件、用户等,并在重置或重新安装 Windows 后恢复它?我搜索了很多这个主题,但找不到任何有用的信息。

否则,如果没有办法备份,Windows 10 重置是否会完全删除 WSL?

答案1

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

您还可以使用 指定 stdin/stdout -,这允许您直接传输到另一台机器并使用 等远程 shell 导入ssh

答案2

如何备份?

有很多方法,但一种常见的做法是使用 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 等其他地方。

更新 2020-02-18 更新

在 Windows 10 1903 中,我们发布了一个更新的wsl.exe工具,该工具包括将发行版的内容导出到外部存档/从外部存档导入发行版内容的功能,大大简化了在机器之间备份和/或移动发行版的过程!

嗨嗨。

答案3

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

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

创建备份

基于问题报告,您可以使用 WSL 中的创建备份tar。请注意,您必须忽略副本中的某些文件夹(例如 /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 命令行将生成的 tar 作为新的发行版安装到 WSL 中。

# 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 恢复

有许多基于 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 发行版。

答案4

虽然 Jaime 的回答很完美,但是/tmp当使用 launcher.exe 安装 tar ball 时,不知何故并没有重新创建该文件夹(我具体是在谈论将 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

相关内容