我一直在 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 --export
d 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 安装有多强大。