家里有台打游戏的电脑,想用这台电脑偶尔跑跑机器学习的程序,不想搞双系统,就试试巨硬家的wsl2,可以直接使用到win上的显卡,下面就是这次折腾碰到的一个问题。

问题

大模型的数据集通常都比较大,我不想放在主分区里,毕竟主分区的所占用的硬盘是在c盘里,万一数据过大给吃满了就不好了,所以想单独挂载个数据盘给wsl。 挂载有两种方式:

  1. 将物理磁盘直通挂载给wsl,这种方式无法挂载单独的硬盘分区给wsl,必须是整块硬盘
  2. 新建一个虚拟磁盘,将虚拟磁盘挂载给wsl,未来万一有啥空间上的问题,换起来也方便些

考虑下来最后选择了2,毕竟有时候还是想用同一块高性能固态打打游戏的。

操作步骤

给wsl挂载或者卸载的操作需要管理员权限,先以管理员身份打开控制台,可以执行以下命令打开:

start-process PowerShell -verb runas

继续以管理员身份获取虚拟硬盘的编号,后续用以挂载:

## -Path参数后是虚拟磁盘的路径,注意修改为自己的虚拟磁盘路径
Write-Output "\\.\PhysicalDrive$((Mount-VHD -Path D:\Workspace\wsl-workspace.vhdx -PassThru | Get-Disk).Number)"

挂载磁盘前,需要注意wsl不能处于运行状态,所以需要先执行命令将wsl停止:

wsl --shutdown

然后执行挂载命令:

wsl --mount <DiskPath> --name <MyDiskName>

未格式化的磁盘可能会挂载失败,需要先执行格式化,挂载失败时可以在wsl里通过fdisk进行格式化,格式化方式不再赘述,自行查找linux下格式化磁盘的命令。 如果需要卸载挂载的磁盘,同样需要先停掉wsl,然后执行卸载:

wsl.exe --unmount \\.\PhysicalDrive3

挂载成功后,可能没有文件的访问权限,这个可以自行查找文件权限的解决办法,我这里为了方便,直接将所有文件设置为了所有人可读写,命令:

chmod -R 777 /home/user 

接下来就愉快的使用吧。 需要注意的是,这个挂载信息在win系统重启后就失效了,如果需要启动自动挂载,则需要寻找其他自动挂载的解决方案,通常都是win层面的自动执行脚本或开机启动命令等方式进行自动挂载,当然,也可以通过配置Terminal启动的命令进行初始化wsl环境,具体使用哪种方式这里就不再展开了。 对于挂载磁盘的方式,巨硬的文档写的还算详细,大家也可以参考官方文档进行挂载。

参考