如何将 WSL 上的 Ubuntu 从一台笔记本电脑转移到另一台笔记本电脑?

Leo*_*Leo 2 migration backup restore cloning windows-subsystem-for-linux

Linux 和 Ubuntu 新手。我正在尝试将旧的 Ubuntu WSL 文件传输到新的 Windows 11 笔记本电脑。

我经历过类似的问题,但似乎没有一个对我的情况有帮助。

lsblk我正在尝试将旧笔记本电脑的 WSL 克隆到 USB 硬盘驱动器上,以便可以将其传输到新笔记本电脑上,但当我输入或列出笔记本电脑上的驱动器的任何其他命令时,USB 并未列出。

wsl -l -v评论结果:

  NAME                    STATE      VERSION
  docker-desktop-data     Running    2
* Ubuntu                  Running    2
  docker-desktop          Running    2
Run Code Online (Sandbox Code Playgroud)

我需要从Ubuntu和传输文件docker-desktop-data

Not*_*1ds 9

如果您只想从 Ubuntu 中复制一些文件,那么您当然可以使用\\wsl$\Ubuntu@Android776 在另一个答案中提出的方法。然而,这几乎只适用于您的 Linux 用户创建和拥有的文件。其他文件将失去其权限和/或所有者(通常root),并且某些系统文件将根本无法读取(例如/etc/shadow)。

既然您说要将 Docker 数据移至新笔记本电脑,那么您无论如何都需要使用--export下面描述的方法,因此您不妨将其用于 Ubuntu 文件系统和 Docker 文件系统。

备份是比较简单的部分 - WSL 提供导出发行版的功能,这会创建一个tar文件,然后可以在同一台计算机(作为新发行版)或另一个系统上再次导入该文件。

我假设您的 USB 驱动器是D:,但请替换下面您需要的任何驱动器号。

来自 PowerShell:

wsl --export Ubuntu D:\ubuntu.tar
wsl --export docker-desktop-data D:\docker-desktop-data.tar
Run Code Online (Sandbox Code Playgroud)

无需导出docker-desktop,因为当您在新笔记本电脑上安装 Docker Desktop 时,它将自动正确地重新创建。

弹出 USB 驱动器(正确地,使用任务栏上的“弹出”命令)并将其移动到另一台计算机。

在新计算机上的 Windows 11 上:

  • 启动管理员 PowerShell。

  • wsl --install(如果你还没有)

  • 告知后重新启动。

  • 完成安装,这将安装一个新的 Ubuntu——您将不会使用这个。

  • 删除这个新安装的 Ubuntu。从管理员 PowerShell:

    wsl --unregister Ubuntu
    
    Run Code Online (Sandbox Code Playgroud)

    重要提示:仅在新计算机上执行此操作,并且仅在以这种方式安装后立即执行。这将从新安装的Ubuntu 版本中删除所有文件。

  • 接下来,我们恢复备份到 USB 驱动器的 Ubuntu 发行版。连接 USB 驱动器(再次假设D:)。

  • 再次,从管理员 PowerShell:

    # Adjust paths and names below as desired
    mkdir $env:USERPROFILE\WSL\instances\Ubuntu_WSL2
    wsl --import Ubuntu_WSL2 $env:USERPROFILE\WSL\instances\Ubuntu_WSL2 D:\ubuntu.tar --version 2
    wsl --set-default Ubuntu_WSL2
    wsl ~ 
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,您需要将新的 Ubuntu 命名为“Ubuntu”或“Ubuntu-20.04”等之外的名称。这些是应用商店安装程序使用的名称,此安装将与该安装程序“分开”。如果您再次运行应用商店安装程序(有意或无意),最好不要“混淆”它们。

  • 在这个 Ubuntu 中,您的所有文件都应该存在,但您将root代替普通用户。您需要通过以下方式设置“默认”用户:

    sudo -e /etc/wsl.conf
    
    Run Code Online (Sandbox Code Playgroud)
  • 并添加:

    [user]
    default=your_username
    
    Run Code Online (Sandbox Code Playgroud)

    your_username应该是您在旧笔记本电脑上的 Ubuntu 上使用的用户名。

  • 现在退出

  • 并重新启动 WSL,您应该会恢复正常

让我知道这对您来说效果如何,我也会努力添加恢复说明docker-desktop-data