在两个适用于 Linux 的 Windows 子系统之间创建共享文件夹

在两个适用于 Linux 的 Windows 子系统之间创建共享文件夹

我今天发现我的电脑(Windows 10)上安装了两个 WSL:一个用于 Ubuntu 18.01(将称为 WSL 18.01),一个用于 Ubuntu 20.04(WSL 20.04)。到目前为止,WSL 18.04 是我唯一使用过的,但我想在未来尝试 Ubuntu 20。两者都是 wsl-1 在命令提示符中:

C:\Users\Zaida>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         1
  Ubuntu          Running         1

我想将主文件夹从 WSL 18.04 复制到 WSL 20.04,但我不知道该怎么做。我尝试按照这篇文章操作:https://stackoverflow.com/questions/65815011/moving-files-between-different-wsl2-instances/65838203#65838203 并在 WSL 18.04 中创建了文件夹 /mnt/wsl/share,将权限更改为所有人sudo chmod ugo+rwx share并复制了我的家庭文件。

但是,当我打开另一个终端(WSL 20.04)时,/mnt/wsl 不存在。我当时在那里创建了它,但关闭并打开它后,它仍然是空的,而在 WSL 18.04 中,它包含我复制的主文件夹文件。

我还需要做什么才能使该文件夹在两个 WSL 之间共享?

需要注意的是,该文件夹还托管了我电脑上 4 个硬盘的挂载点。我不知道这是否会影响它为什么没有显示在其他 WSL 中:

\mntWSL 18.04 中的内容:

.
├── a
│   ├── $RECYCLE.BIN
│   └── System Volume Information
├── b
│   ├── $RECYCLE.BIN
│   ├── Program Files
│   ├── System Volume Information
│   └── WindowsApps
├── c
│   ├── $Recycle.Bin
│   ├── Documents and Settings -> /mnt/c/Users
│   ├── Program Files (x86)
│   ├── System Volume Information
│   ├── Users
│   ├── Windows
│   └── temp
├── d
│   ├── $RECYCLE.BIN
│   └── System Volume Information
└── wsl  <------------------- POTENTIAL SHARED FOLDER ACROSS WSLs
    └── share
        ├── .bash_aliases
        ├── .bash_history
        ├── .bash_logout
        └── .bashrc

非常感谢您提供的任何信息,如果您需要任何其他详细信息,请告诉我。

答案1

不幸的是,/mnt/wsl共享文件夹仅适用于 WSL2 发行版。由于您使用的是 WSL1,因此这对您来说不是一个可用的选项。当使用 WSL2 时,这绝对是最佳选择。

对于您来说,有两个 WSL1 发行版,我可以提供几个选项,但有一个“建议”:

  • 首先,建议。使用wsl类似命令ssh将文件从一个发行版传输到另一个发行版。如果你从未见过这种技术,它可能会让人感到困惑(但最终还是会让人大开眼界)。它非常快速和简单,因为它是一行代码,但很难理解和做到恰到好处。

    从 Ubuntu 18.04 开始:

    cd ~
    sudo tar -cvf - . | wsl.exe -u root -d Ubuntu -e tar -C /home/$USER -xvf -
    

    请注意,我已经在两个发行版的系统上测试了该命令。我在命令行中更改的唯一单词是将我的testtest发行版更改为您的Ubuntu发行版。

    分解一下,它:

    • 创建 ( tar -c) 当前目录中所有文件的“存档”,但不会将它们放在驱动器上的“文件”中。相反,tar -f -(末尾带有特殊连字符)表示它会在标准输出上输出存档。

    • 将标准输出通过管道传输到wsl.exe命令,然后我们使用该命令来指定(使用wsl.exe -d Ubuntu)我们希望它处理其他分布。

    • 在其他发行版中运行tar命令以在其标准输入上“接收”管道传输的 tarball。

    • tar -C /home/$USER在提取文件之前,用于切换到“Ubuntu”中的主目录。

    • 使用-xvf -(extract、verbose、“file”、“from standard input”)将文件提取到该目录中。

    • 我们在两端都以 root 身份执行此操作以保留所有权和权限,即使您的用户对特定文件没有完全权限。

    • sudo在 Ubuntu 18.04 端获得 root 访问权限,但wsl -u root在接收端我们不需要在那里输入密码。

  • tar您可以通过将主目录的内容复制到其中一个 Windows 驱动器来简化此过程(但会占用磁盘空间) 。所有这些 Windows 驱动器在两个发行版中都可用。然后,您可以切换到另一个发行版并tar x(提取)它。

  • 您也可以简单地使用 Windows 文件资源管理器导航到目录\\wsl$\并在发行版之间复制文件,但这可能会失去一些 Linux 所有权/权限。

    在 Windows 10 下,每个发行版都需要运行。似乎(也许从今天的更新开始)Windows 11 现在将显示全部分布并根据需要自动启动它们。

    导航到您想要复制的主文件夹,选择所有文件,然后将其粘贴到其他发行版的主目录中。

  • 还可以将其中一个发行版设置为 SSH 服务器,并使用scp、、、管道(就像我们上面所做的那样)等传输文件。为 WSL1 会话设置 SSH 实际上比为 WSL2 设置 SSH 更容易sftprsync

  • 我还没有这样做过,但我认为也可以rsync通过wsl命令来归档。


还:

需要注意的是,该文件夹还托管了我电脑上 4 个硬盘的挂载点。我不知道这是否会影响它为什么没有显示在其他 WSL 中:

不是。/mnt/<drive_letter>为了方便起见,WSL 在启动时会自动挂载所有 Windows 驱动器。这不会影响通过 WSL 发行版共享的能力/mnt。这只是 WSL1 的一个限制。

相关内容