在不同的 WSL2 实例之间移动文件?

BoZ*_*haa 2 windows-subsystem-for-linux wsl-2

如果可能,如何将文件从一个 WSL 实例直接移动到另一个实例?这在尝试新发行版时很有用,例如将 /home 从 Ubuntu 18.04 复制到 20.04。

我厌倦了通过资源管理器通过访问\\wsl$Windows 主机来执行此操作,它似乎无法可靠地传输所有文件并且总体上感觉不对。

小智 5

如何在不同的 WSL 实例之间共享数据

1. 创建不包含在任何 WSL 实例中的共享目录

mkdir /mnt/wsl/share
Run Code Online (Sandbox Code Playgroud)

这将创建/mnt/wsl/share在所有 WLS 实例之间共享但不包含在任何 WSL 实例中的目录。

您可以通过此共享目录共享数据。

但是,仍然无法在 WSL 实例之间直接复制/粘贴数据。

(请注意,重新启动时会自动删除共享目录。)

2. 创建包含在 WSL 实例中的共享目录

您可以使用绑定挂载使 WSL 实例中的现有目录在其他 WSL 实例之间共享。

例如,您有两个 WSL 实例,Ubuntu-AUbuntu-B

1.~/.profileUbuntu-A 中打开并添加以下代码。

# bind mount shared directory
if [ ! -d /mnt/wsl/share-a ]; then
  mkdir /mnt/wsl/share-a
  wsl.exe -d Ubuntu-A -u root mount --bind / /mnt/wsl/share-a/
fi
Run Code Online (Sandbox Code Playgroud)

2.~/.profileUbuntu-B 中打开并添加以下代码。

# bind mount shared directory
if [ ! -d /mnt/wsl/share-b ]; then
  mkdir /mnt/wsl/share-b
  wsl.exe -d Ubuntu-B -u root mount --bind / /mnt/wsl/share-b/
fi
Run Code Online (Sandbox Code Playgroud)

这会自动安装根目录(/中)的Ubuntu-A/mnt/wsl/shared-a/,做同样的事情的Ubuntu-B当您启动WSL。

https://jinsuxpark.blogspot.com/2021/01/how-to-share-data-between-different-wsl-instances-eng.html


int*_*ris 5

关于第 2 项,我将以下内容放入我的 ~/.profile 中(技术上是我的 .bash_profile)。

if [[ -n "${WSL_DISTRO_NAME}" ]]; then
   if [[ -d "/mnt/wsl/${WSL_DISTRO_NAME}" ]]; then
      ls "/mnt/wsl/${WSL_DISTRO_NAME}"
   else 
      mkdir "/mnt/wsl/${WSL_DISTRO_NAME}"
      # note the terminating / on the directory name below!
      wsl.exe -d ${WSL_DISTRO_NAME} -u root mount --bind / "/mnt/wsl/${WSL_DISTRO_NAME}/"
   fi
fi
Run Code Online (Sandbox Code Playgroud)

结果是我启动的每个发行版都会使用“明显”名称安装其根目录。

  • 我发现通过[这个超级用户答案](https://superuser.com/a/1659355/1210833)中记录的“/etc/fstab”做同样的事情更干净。`/etc/fstab` 中的一行处理所有这些逻辑。 (2认同)