我今天发现我的电脑(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 中:
\mnt
WSL 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 更容易sftp
。rsync
我还没有这样做过,但我认为也可以
rsync
通过wsl
命令来归档。
还:
需要注意的是,该文件夹还托管了我电脑上 4 个硬盘的挂载点。我不知道这是否会影响它为什么没有显示在其他 WSL 中:
不是。/mnt/<drive_letter>
为了方便起见,WSL 在启动时会自动挂载所有 Windows 驱动器。这不会影响通过 WSL 发行版共享的能力/mnt
。这只是 WSL1 的一个限制。