我的问题是由于某些问题我必须重置或重新安装 Windows,但是我花了很多时间来配置 WSL 进行开发并且不想丢失它。
有没有办法备份整个 WSL 及其设置和已安装的模块、插件、用户等,并在重置或重新安装 Windows 后恢复它?我搜索了很多这个主题,但找不到任何有用的信息。
否则,如果没有办法备份,Windows 10 重置是否会完全删除 WSL?
答案1
Windows 10 v1903 包含内置的 WSL 导出/导入命令。具体来说wsl --export
, 生成一个tar
和wsl --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