如何将 Ubuntu WSL 克隆到干净的虚拟机

如何将 Ubuntu WSL 克隆到干净的虚拟机

我一直在 Ubuntu WSL 上进行 PHP 开发,但本月初,我买了一台 Mac,想继续在完全相同的配置上进行开发。如何将 Ubuntu WSL(具有 PHP、nginx 等配置)克隆到在 OSX 上运行的虚拟机上?

答案1

可能没有伟大的解决这个问题,但你随时可以尝试一下,看看会发生什么。

就我个人而言,如果我要转到 Mac,我想我会选择 macOS 和 HomeBrew 进行 PHP 开发。我相信这会给你带来更接近于在 Windows 上使用 WSL/Ubuntu 的体验,而不是在 Ubuntu VM 上获得的体验。

当然,如果某些开发特别需要 Linux 内核或 macOS 没有的工具,那么情况就会有所不同。

至于获得一切从 WSL 迁移到 Ubuntu VM,我不知道是否有人这样做过。我提供了来自虚拟机或物理机的答案西弗吉尼亚海岸,但从来没有反过来过(直到现在)。

有一个Arch Linux 指南这是我在谷歌搜索帮助时偶然发现的。除了第一行之外,它与您的问题并不完全相关:

进入虚拟环境需要付出更多努力。

在 WSL 下,首先,你可以使用以下命令创建任何 WSL 实例的 rootfs 的 tarball:

wsl --export <distroname> <backupname>.tar

这将保留所有文件、权限、链接甚至 Linux 功能(尽管我不相信 Ubuntu 发行版至少会使用这些开箱即用的功能)。

得到那个进入以故障安全的方式运行虚拟机是一项挑战。您可能需要首先将 Ubuntu 20.04 安装到该虚拟机中,以获取对虚拟设备的驱动程序支持。当然,这不是 WSL tarball 中会存在的东西。

因此,您必须保留/lib原位,或者至少保留那里的驱动程序,但同时您要将其/lib与 WSL 备份进行合并。

理论上,如果你有两个系统处于同一级别(通过同时sudo apt update && sudo apt upgrade -y),那么你可以(理论上tar,故意重复我自己)只需从现有目录中提取内容即可。

我刚刚查看了wsl --exportd tar,它很好地排除了不应恢复的任何“系统”目录(例如,,,/proc/等等)。但是,有两个例外——您可能还应该手动从提取中排除和。几乎肯定没有充分的理由用 WSL 实例中的挂载点覆盖 Ubuntu VM 挂载点。/boot/sys/mnt/media

所以如果你真的想尝试一下,我会:

  • wsl --export您现有的 WSL

  • 传输tar至 Mac。

  • 安装 Ubuntu VM,最好使用Ubuntu 最小版本

  • 备份你的 Ubuntu VM(因为这肯定不起作用)

  • 将其转移tar到虚拟机的根目录中

  • 以救援模式重新启动虚拟机

  • 将 tar 提取到现有目录。使用tar --xattrs-include="security.capability" --exclude="./mnt" --exclude="./media" -xvf ...。您可能还需要指定目标目录,但我目前无法测试。请注意,可能--xattrs不需要 ,但如果您有任何扩展属性,它会更安全。请参阅这个答案对于--exclude,因为我对该语法不是 100% 确定。

  • 重启虚拟机

其他可能引起问题的情况如下:

  • WSL 不会启动 Systemd,但您的 VM 会默认启动。目前还不清楚从 WSL 映像中获得的 Systemd 安装有多强大。

相关内容