尝试在 Windows 11 上将 VHDX 挂载到 wsl 时出现访问被拒绝

尝试在 Windows 11 上将 VHDX 挂载到 wsl 时出现访问被拒绝

我使用磁盘管理器创建了一个新的 VHDX,并尝试将其挂载到 WSL2(版本 1.0.3),运行以下命令:

wsl -d Ubuntu-22.04 --mount --vhd D:\wsl2\wsl2-drive.vhdx --bare

它失败了:

Failed to attach disk '\\?\D:\wsl2\wsl2-drive.vhdx' to WSL2: Access is denied.
Error code: Wsl/Service/AttachDisk/MountVhd/E_ACCESSDENIED

我尝试过但没有什么效果的事情:

  • 从提升的 PowerShell 运行它
  • 创建 VHD 而不是 VHDX
  • 离开了--bare
  • 离开了-d Ubuntu-22.04
  • VHDX 有多种不同的状态:
    • “未初始化/未分配”:磁盘管理器中创建后的状态
    • 在磁盘管理器中选择“初始化磁盘”
    • 创建一个分区(但感觉不对,因为它不应该是 Linux 的 NTFS?)
    • 在磁盘管理器中将其完全分离

答案1

通过评论解决,因此将信息移至答案(附带一些附加信息)。

在这种情况下,(相对较)新的 WSL 错误消息很有用。Wsl/Service/AttachDisk/MountVhd/E_ACCESSDENIED指示权限问题一些种类。

通常,据我所知,.vhdx通过磁盘管理创建的文件将归本地管理员组所有。在大多数情况下,安装并运行 WSL 的本地用户是该组的成员,因此存在权限问题。

然而,在这种情况下,似乎事实并非如此,因为改变所有者.vhdx最终解决了ACCESSDENIED错误。

一些附加项目:

  • 虚拟磁盘需要从磁盘管理中分离(右键单击 ->分离 VHD),否则会出现以下错误:

    Failed to attach disk '<path_to>\wsl2-drive.vhdx' to WSL2: The process cannot access the file because it is being used by another process.
    Error code: Wsl/Service/AttachDisk/MountVhd/0x80070020
    
  • 我个人建议.vhdx使用以下方法从管理 PowerShell 帐户创建:

    new-vhd -Dynamic -SizeBytes 100gb -BlockSizeBytes 1mb -path <path_to>/<name>.vhdx
    

    块大小对于动态磁盘的增长速度非常重要。WSL 为其内置虚拟磁盘使用了 1 mb 的块大小。

  • 此外,--bare只要驱动器上没有 WSL 可以处理的文件系统,则需要。下一步是在该虚拟驱动器上创建文件系统之内WSL。正如在WSL 文档,用于lsblk识别新挂载的磁盘。

    完全确定您正在格式化正确的设备,方法是卸载,lsblk然后重新安装,然后lsblk再次执行。在这种情况下,新设备将很明显。当然,唯一的驱动器大小也是识别它的有效方法。

    一旦识别了设备,你将使用类似以下内容:

    sudo mkfs.ext4 /dev/<device> # e.g. sde
    
  • 在设备上创建文件系统后,只要该文件系统是 WSL2 可以识别的(ext4、,btrfs可能还有其他一些),您就可以--bare在以后的挂载时跳过该选项。

    此时,最好切换到使用--name <name>,以便分区/文件系统将挂载到已知位置。默认情况下,这将是/mnt/wsl/<name>

  • 在这种情况下,这-d Ubuntu-22.04是一个无操作。我有点惊讶它没有产生错误,但设备始终被安装到全部发行版,无论您是否指定使用发行版wsl -d

答案2

不管怎样,我在尝试从另一台 PC 安装 wsl 磁盘备份时遇到了同样的问题。我通过制作本地副本解决了这个问题。

因此,不要直接从外部驱动器安装,而是进行复制,然后使用以下命令安装驱动器:

wsl -d Ubuntu --mount -vhd ext4.vhdx --name backup

注意:由于备份已格式化,请勿--bare在这种情况下使用。驱动器将出现在/mnt/wsl/backup/

相关内容