由于要在本地存储大量数据,需要使用大容量硬盘。鉴于WSL和NTFS文件系统之间存在一些“不兼容性”,读取/写入存储在NTFS上的的文件时读写速度较慢,因此较好的方式是创建一块虚拟硬盘,并格式化为Linux系统使用的格式,比如ext4。理论上也可以直接将物理硬盘全部格式化,但鉴于这块硬盘在windows上使用,并且可能存储一些其他东西,因此不考虑这种方案。
首先创建虚拟硬盘。创建虚拟硬盘可以直接使用windows提供的磁盘管理:

选择“操作——创建VHD”,进入创建虚拟磁盘界面:

选择一个存放虚拟磁盘的位置,例如 E://data.vhdx
,硬盘大小根据需要自定义,格式最好选择VHDX,因为支持的容量比较大,适合存放数据;类型可以选择动态扩展,使得虚拟磁盘的大小能随着存储量的大小增加至给定的上限而非直接分配,有利于优化空间使用。
创建好后,以管理员身份打开 powershell
,查看目前windows上挂载的硬盘信息。输入
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
一般来说当创建好虚拟硬盘时系统会自动挂载,因此可以在输出看到:
DeviceID Caption Partitions Size Model
-------- ------- ---------- ---- -----
\\.\PHYSICALDRIVE0 WDC WUH721816ALE6L4 1 16000900392960 WDC WUH721816ALE6L4
\\.\PHYSICALDRIVE2 WD Elements SE 2623 USB Device 1 2000363420160 WD Elements SE 2623 USB Device
\\.\PHYSICALDRIVE1 KBG50ZNS512G NVMe KIOXIA 512GB 3 512105932800 KBG50ZNS512G NVMe KIOXIA 512GB
\\.\PHYSICALDRIVE3 Microsoft 虚拟磁盘 0 15945058967040 Microsoft 虚拟磁盘
\\.\PHYSICALDRIVE4 Microsoft 虚拟磁盘 0 966363471360 Microsoft 虚拟磁盘
其中,最后两行是创建的虚拟磁盘(有两行是因为作者创建了两个)。如果没有挂载,请参考文末的解决方案。选择要挂载的虚拟磁盘,例如 \\.\PHYSICALDRIVE4
,在 powershell
中挂载到WSL上:
wsl --mount \\.\PHYSICALDRIVE4 --bare
因为虚拟硬盘还未格式化,因此暂时使用 --bare
进行挂载。
此时,在WSL中,使用 lsblk
命令,就能看到这块虚拟硬盘(即 sde
):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 363.3M 1 disk
sdb 8:16 0 2G 0 disk [SWAP]
sdc 8:32 0 14.5T 0 disk /data
sdd 8:48 0 1T 0 disk /mnt/wslg/distro
sde 8:64 0 900G 0 disk
接下来,需要将硬盘格式化并挂载到指定的目录下。使用 mkfs
命令将硬盘格式化为 ext4
文件系统,然后使用 mount
命令挂载到 /data2
目录下:
user@localhost:/$ sudo mkfs -t ext4 /dev/sde
mke2fs 1.45.5 (07-Jan-2020)
Discarding device blocks: done
Creating filesystem with 235929600 4k blocks and 58982400 inodes
Filesystem UUID: 2b6571ba-4bb8-4768-9629-2259dcf6a8d3
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
user@localhost:/$ sudo mount /dev/sde /data2
再次利用 lsblk
命令,就能看到磁盘被挂载到了指定的目录:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 363.3M 1 disk
sdb 8:16 0 2G 0 disk [SWAP]
sdc 8:32 0 14.5T 0 disk /data
sdd 8:48 0 1T 0 disk /mnt/wslg/distro
sde 8:64 0 900G 0 disk /data2
此时,就可以在wsl中正常使用这块虚拟磁盘了。
如果虚拟磁盘没有成功挂载到windows中(例如系统重新启动时),可以使用 diskpart
工具解决。同样,利用管理员身份启动 powershell
, 输入 diskpart
启动该工具,然后输入:
select vdisk your://virtual/disk/location
attach vdisk
就能成功挂载。最后使用 exit
退出 diskpart
。 以上方法可以添加到自动任务中,设定为开机执行,就能“永久”挂载虚拟硬盘。
Comments NOTHING