有没有办法备份我的 WSL ubuntu 20.04 环境并在我的 Ibuntu 20.04 系统上恢复它?
我目前正在通过 WSL 工作,但我想我快要转向普通 Linux 系统了。
如何将所有已安装的服务和文件备份到新系统?
答案1
这可能不是 1-1 匹配,但由于“一切都是文件”,在 Linux 上更容易一些。我还没有弄清楚如何备份基于 snap 的软件。我有一个旧答案在这里需要一些更新,但本质上
在 Ubuntu 或 Debian 上,使用 dpkg --get-selections 转储已安装软件包的列表,然后使用 dpkg --set-selections 安装它们。
我并不需要用 snap 来做这件事。
这尚未测试,但您可以用它snap list
来列出快照。然后,您可以将snap save
每个快照制作成快照 snap export-snapshot
然后snap import-snapshot
应该备份和恢复特定的快照
如果有必要,创建与源系统相同的用户 -cat /etc/passwd
应该列出他们,然后您可以使用 diff 检查两个列表是否相同。
然后使用 rsync 复制/etc/
设置文件夹、/home/
用户的各种文件夹(并在此处检查权限)和其他文件夹,如/var/www/
。测试,确保所有内容都已存在并正常工作,并根据需要启动,然后您就大功告成了。这比设置新服务器花费的时间还少。
如果您使用其他方法,则需要确保权限和属性正确
这应该覆盖你的整个环境。
答案2
虽然(大多数)一切都@JourneymanGeek 的回答是正确的,我想我会以不同的方式看待它。我认为这值得一试,但你可能需要多次尝试才能“做到恰到好处”。
一些用户在 WSL 中执行的一些操作最终会在“真正的”Ubuntu 中导致问题。我将在下面列举其中的一些。
备份 WSL2 Ubuntu 发行版并将其恢复为“真实” Ubuntu 安装将涉及以下几个步骤:
您会使用 Ubuntu 和 Windows 双启动还是完全替换 Windows 安装?如果使用双启动,那么您可以使用 Windows 驱动器上的文件夹来保存需要传输的任何文件。否则,您需要将它们移动到 USB 驱动器之类的东西上。
你可以如果是双启动,则可能直接使用
rsync
,但您需要ext4.vhdx
在 Ubuntu 中访问 WSL2 虚拟磁盘。此功能默认不安装,因此您需要找到解决方案——如果您想使用rsync
,请参阅询问 Ubuntu问题。我可能只是
tar
传输您需要的任何文件,但请确保以 /root 身份进行传输,sudo
以便保留权限和所有权(或者tar
如果使用非 root 用户,请使用适当的标志)。识别您在 WSL2/Ubuntu 下安装的软件包,正如 JG 在链接的答案中指出的那样。将其保存到文件中以进行传输。
消除任何 WSL 特定的软件包,例如
wslu
。这些可能会在“真正的”Ubuntu 上引起问题(尽管我现在不记得我遇到的与此问题有关的问题)。tar
您的用户的/home/username
。这可能是最直接的传输方式,尽管可以删除您对 shell 启动所做的任何“特定于 WSL”的更改(例如~/.bashrc
)。例如,由于 WSL 没有
systemctl enable
,因此通常在用户中启动服务~/.bashrc
。您应该恢复该设置并计划在实际安装下使用 Systemd。tar
您的/etc
目录,但在恢复到“真实”Ubuntu 时要格外小心。这是最容易引起问题的区域,原因如下:首先,这可能是也可能不是一个问题,但 WSL Ubuntu 发行版是基于 Ubuntu服务器. 你可能会安装 Ubuntu桌面。
/etc
两者之间的配置可能大不相同。我无法直接指出在新安装的“桌面”配置上恢复“服务器”配置的任何问题,但我也不知道这是否是经过测试或支持的方案。您可能最终用更“最小”的服务器配置覆盖一些“特定于桌面”的配置。更重要的是,如果你曾经尝试在 WSL 上启用 Systemd,我可能会忽略 (
tar --exclude-from
)/etc/systemd
和中的任何内容/etc/tmpfiles.d
。你为了使 WSL 正常工作而进行的更改 (或启用脚本) 几乎肯定会破坏真正的 Ubuntu 安装。此外,从您的
/etc
tarball 中排除以下内容:/etc/passwd
、/etc/group
和/etc/shadow
。这些将由 Ubuntu 安装本身(包括您的默认用户)或您安装的软件包创建。如果您用 WSL2 副本覆盖这些文件的 Ubuntu 桌面安装版本,则会出现问题。/etc/fstab
,因为您不想覆盖物理机器的配置。/etc/resolv.conf
,因为 WSL 将其配置为使用 Windows 主机解析器/etc/hosts
,它也是由 WSL 生成的,具有内部 Windows/WSL 名称。
可能还有其他的——这些只是我能想到的,如果你尝试将它们从 WSL 移动到真实的物理机器上,它们会引起问题。
正如@JG 所说,备份您可能有工作文件的任何其他目录,例如下的特定目录
/var/
。