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

Zai*_*ida 6 linux shared-folders ubuntu windows-10 windows-subsystem-for-linux

今天我发现我的计算机 (Windows 10) 上安装了两个 WSL:一个用于 Ubuntu 18.01(将称为 WSL 18.01),另一个用于 Ubuntu 20.04 (WSL 20.04)。WSL 18.04 是我迄今为止唯一使用过的版本,但我想将来尝试 Ubuntu 20。两者都是 wsl-1\n在命令提示符中:

\n
C:\\Users\\Zaida>wsl -l -v\n  NAME            STATE           VERSION\n* Ubuntu-18.04    Running         1\n  Ubuntu          Running         1\n
Run Code Online (Sandbox Code Playgroud)\n

我想将主文件夹从 WSL 18.04 复制到 WSL 20.04,但我不知道该怎么做。我尝试按照这篇文章进行操作:/sf/ask/4607050801/ Between- Different-wsl2-instances/65838203#65838203 \n并在 WSL 18.04 中创建了文件夹 /mnt/wsl/share ,进行了更改授予每个拥有并复制我的家庭文件的人的权限sudo chmod ugo+rwx share

\n

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

\n

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

\n

请注意,该文件夹还托管我 PC 上 4 个硬盘驱动器的安装点。我不知道这是否会影响它在其他 WSL 中不显示的原因:

\n

内容\\mnt

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 $RECYCLE.BIN\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 System Volume Information\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 $RECYCLE.BIN\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Program Files\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 System Volume Information\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 WindowsApps\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 c\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 $Recycle.Bin\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Documents and Settings -> /mnt/c/Users\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Program Files (x86)\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 System Volume Information\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Users\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Windows\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 temp\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 d\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 $RECYCLE.BIN\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 System Volume Information\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wsl  <------------------- POTENTIAL SHARED FOLDER ACROSS WSLs\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 share\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .bash_aliases\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .bash_history\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .bash_logout\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .bashrc\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

Not*_*1ds 6

不幸的是,/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 -
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,我已经在我的系统上使用两个发行版测试了该命令。我在命令行中更改的唯一单词是我的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 服务器,并使用scpsftprsync、 管道(就像我们上面所做的那样)等传输文件。实际上,为 WSL1 会话设置 SSH 比为 WSL2 更容易。

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


还:

请注意,该文件夹还托管我 PC 上 4 个硬盘驱动器的安装点。我不知道这是否会影响它为什么没有在其他 WSL 中显示:

并不真地。/mnt/<drive_letter>为了方便起见,WSL 在启动时会自动挂载所有 Windows 驱动器。它不会影响通过/mnt. 这只是 WSL1 的更多限制。

  • 不用担心,也谢谢您 - 销售代表很好,但确认知道它有帮助就更好了! (2认同)