WSL 挂载硬盘/U盘/SD卡
上一篇文章 《WSL2Linux 子系统(八)》 讲解WSL与Windows之间端口转发规则和正向端口代理。《WSL2Linux 子系统(六)》 中仅仅简单讲解 WSL(Windows Subsystem for Linux) 挂载硬盘,本篇继续详细讲解几种常见硬盘挂载使用。
挂载外部硬盘到 WSL 不仅可以扩展其存储空间,还能提升数据访问和管理效率,保障数据安全性,并且利用外部硬盘的跨平台兼容性,实现更便捷的文件共享和备份操作。
扩展存储空间: WSL默认的文件系统通常位于Windows的文件系统中,而Windows分区可能空间有限或者已经被其他用途占用。通过挂载外部硬盘,可以扩展WSL的存储空间,使其能够处理更大的数据和项目。
数据共享与访问: 外部硬盘通常用于存储大量数据,包括文档、媒体文件、开发项目等。将外部硬盘挂载到WSL后,Linux环境可以直接访问这些数据,便于开发、处理和分析。这消除了在不同操作系统之间复制数据或进行文件传输的需要。
备份和恢复: 外部硬盘可以作为WSL中数据的备份目标。通过挂载外部硬盘,可以轻松备份WSL中的文件和配置,以防数据丢失或系统损坏时进行恢复。这对于开发人员和系统管理员来说尤为重要。
跨平台兼容性: 外部硬盘通常支持多种文件系统格式,例如NTFS、exFAT等,这些格式在Windows和Linux系统中都能够很好地支持。通过在WSL中挂载外部硬盘,可以实现数据的跨平台共享和交换,无需担心文件系统不兼容的问题。
灵活性和便利性: 使用外部硬盘作为WSL的存储空间,可以提供更大的灵活性和便利性。用户可以根据需求随时添加、移动或卸载外部硬盘,而无需对主系统进行复杂的磁盘分区或重分配操作。
作者:炭烤毛蛋 ,点击博主了解更多。
提示:wsl 挂载外部硬盘时,先确认硬盘正常使用。
文章目录
1. WSL 挂载硬盘
1.1 挂载 ext4 硬盘
- 获取磁盘标识
获取磁盘分区信息命令GET-CimInstance -query "SELECT * from Win32_DiskDrive"
PS C:\Windows\system32> GET-CimInstance -query "SELECT * from Win32_DiskDrive"
DeviceID Caption Partitions Size Model
-------- ------- ---------- ---- -----
\\.\PHYSICALDRIVE0 SAMSUNG NXNM3601FDKQ-00BD3 4 512105932800 SAMSUNG NXNM3601FDKQ-00BD3
\\.\PHYSICALDRIVE1 Mass Storage Device USB Device 1 15924142080 Mass Storage Device USB Device
当然也有其他命令 wmic diskdrive list brief
PS C:\Windows\system32> wmic diskdrive list brief
Caption DeviceID Model Partitions Size
SAMSUNG NXNM3601FDKQ-00BD3 \\.\PHYSICALDRIVE0 SAMSUNG 4 512105932800
Mass Storage Device USB Device \\.\PHYSICALDRIVE1 Mass Storage Device USB Device 1 15924142080
- 挂载磁盘
挂载磁盘命令格式如下:
wsl --mount --partition --type
DiskPath 为磁盘标识
PartitionNumber 为分区号
Filesystem为磁盘类型 ext2、ext3、ext4 vfat ntfs
挂载示例:
# 挂载 PHYSICALDRIVE1 指向的磁盘,默认 0 分区
wsl --mount \\.\PHYSICALDRIVE1
# 挂载 PHYSICALDRIVE1 指向的磁盘, 1 分区
wsl --mount \\.\PHYSICALDRIVE1 --partition 1
# 挂载 PHYSICALDRIVE1 指向的磁盘,默认 1 分区,盘符类型 ext4
wsl --mount \\.\PHYSICALDRIVE1 --partition 1 --type ext4
通常情况下,Windows系统中的物理硬盘会使用NTFS文件系统或者FAT32文件系统。
- 卸载磁盘
wsl --unmount \\.\PHYSICALDRIVE1
1.2 挂载 NFS 硬盘
在Windows Subsystem for Linux (WSL)中挂载NTFS格式的硬盘可以通过以下步骤完成:
- 确定NTFS硬盘的设备名称
在Windows中,打开资源管理器,右键点击NTFS硬盘(比如D盘),选择“属性” -> “硬件”选项卡 -> 选择硬盘 -> 点击“属性”按钮 -> 选择“详细信息”选项卡 -> 选择“设备实例路径”。
你会看到一个类似于\Device\HarddiskVolume5
的设备路径。这就是硬盘的设备名称。
SCSI\DISK&VEN_NVME&PROD_MICRON_MTFDKBA51\5&10B1FD3F&0&000000
- 在WSL中创建挂载点
打开WSL终端,创建一个目录作为挂载点。比如:
sudo mkdir /mnt/d
这里假设你想将Windows的D盘挂载到WSL中的/mnt/d
目录下。
- 挂载NTFS硬盘
使用mount
命令挂载NTFS硬盘到刚刚创建的挂载点:
sudo mount -t drvfs '\\.\HarddiskVolume5' /mnt/d
这里的HarddiskVolume5
应替换为你在步骤1中获得的实际设备名称。/mnt/d
是你在步骤2中创建的挂载点路径。
-
验证挂载:
执行df -h
命令可以查看所有已挂载的文件系统,确认NTFS硬盘是否成功挂载到了指定的挂载点。 -
自动挂载(可选):
如果希望每次WSL启动时自动挂载NTFS硬盘,可以编辑WSL的自动挂载配置文件。打开/etc/fstab
文件:
sudo nano /etc/fstab
在文件末尾添加类似于以下行(假设硬盘路径为/dev/sdb1
,挂载点为/mnt/d
):
/dev/sdb1 /mnt/d drvfs defaults 0 0
保存并退出。此后,每次WSL启动时,NTFS硬盘应该会自动挂载到指定的位置。
通过这些步骤,你可以在WSL中成功挂载NTFS格式的硬盘。
1.3 挂载 VHD硬盘
- 挂载 VHD 硬盘
将指定的VHD(虚拟硬盘)挂载到Windows系统,并返回该虚拟硬盘在物理磁盘中的位置(PhysicalDrive)
Write-Output "\\.\PhysicalDrive$((Mount-VHD -Path <pathToVHD> -PassThru | Get-Disk).Number)"
Mount-VHD -Path <pathToVHD> -PassThru:
Mount-VHD是一个PowerShell cmdlet,用于挂载VHD文件到当前系统。
-Path 指定了要挂载的VHD文件的路径,应该替换为实际的VHD文件路径。
-PassThru选项表示在挂载完成后返回相关的对象,这里是一个Disk对象。
Get-Disk:
Get-Disk是另一个PowerShell cmdlet,用于获取当前系统中的磁盘信息。
(Mount-VHD ... | Get-Disk).Number:
Mount-VHD -Path -PassThru | Get-Disk组合起来的部分执行挂载VHD并获取相关的Disk对象,然后通过.Number属性获取该磁盘的编号。
“$((Mount-VHD …).Number)”:
将前面获取到的磁盘编号作为字符串输出到命令行。
Write-Output "\.\PhysicalDrive$((Mount-VHD ...).Number)":
最终的命令通过Write-Output将字符串输出到命令行。这里输出的内容是形如\.\PhysicalDriveN的字符串,其中N是挂载的VHD所在的物理磁盘编号。
当然也能使用以下命令挂载VHD文件:
diskpart
select vdisk file="路径\到\你的.vhd"
attach vdisk
- 卸载 VHD 硬盘
attach vdisk
当然也能在Windows命令提示符或PowerShell中,卸载VHD命令如下:
diskpart
select vdisk file="路径\到\你的.vhd"
detach vdisk
1.4 WSL 挂载 refs 硬盘
在WSL(Windows Subsystem for Linux)中挂载REFS(Resilient File System)格式的硬盘相对复杂,因为WSL目前不直接支持REFS文件系统。REFS是Windows专用的文件系统,而WSL主要支持Windows底层的NTFS文件系统和一些网络文件系统(如Samba、NFS等)。
如果你希望在WSL中访问REFS格式的硬盘,以下是一些可能的替代方案:
使用Samba共享:
在Windows上设置Samba共享,并在WSL中挂载该共享。这样,你可以通过网络访问REFS格式的硬盘内容。具体步骤包括:
在Windows上安装并配置Samba服务器。
在WSL中使用mount命令挂载Samba共享,以访问REFS硬盘的内容。
使用NFS共享:
类似于Samba,你可以在Windows上设置NFS共享,并在WSL中挂载该共享来访问REFS格式的硬盘。
转换文件系统:
如果可行,考虑将REFS格式的硬盘转换为NTFS格式。这样可以更方便地在WSL中挂载和访问。但是,请注意在转换文件系统之前务必备份重要数据,并确保转换操作不会造成数据丢失或损坏。
尝试其他文件系统支持:
随着WSL版本的更新,未来可能会增加对更多文件系统的支持。定期检查WSL的更新日志或官方文档,看是否有新增对REFS或其他文件系统的支持。
2 WSL 挂载 U盘、SD 卡
Windows 官方文档 WSL 挂载 U盘、SD卡可以参考 https://learn.microsoft.com/zh-cn/archive/blogs/wsl/file-system-improvements-to-the-windows-subsystem-for-linux。
以磁盘 f 为例简述挂载方案:
查看 U盘/SD卡在 Windows 系统中占用盘符,方便挂载时与windows系统保持一致。
- 创建磁盘挂载点
sudo mkdir -p /mnt/f
- 挂载U盘/SD卡
- U盘/SD卡格式为 fat32
sudo mount -t drvfs F:\\ /mnt/f
- U盘/SD卡格式为 exfat
安装exfat-fuse用于挂载exFAT文件系统,exfat-utils用于管理exFAT分区
sudo apt install exfat-fuse exfat-utils
sudo mount -t exfat /dev/sdX /mnt/sdcard
/dev/sdX
应替换为你实际的SD卡设备标识,/mnt/sdcard
是创建的挂载点路径。
- U盘/SD卡格式为 ntfs
ntfs-3g是一个开源的NTFS驱动程序,允许Linux系统读取和写入NTFS分区。
sudo apt install ntfs-3g
sudo mount -t ntfs-3g /dev/sdX /mnt/ntfs
/dev/sdX
应替换为你实际的NTFS驱动器设备标识,/mnt/ntfs
是你创建的挂载点路径。
- 卸载U盘/SD卡
sudo unmount /mnt/f
3 硬盘挂载失败
- 磁盘位置不对
磁盘已附加,但装载失败: No such device。
要查看更多相关信息,请在 WSL2 中运行 'dmesg'。
若要分离磁盘,请运行 'wsl.exe --unmount \\.\PHYSICALDRIVE0'。
- 磁盘被占用或被进程锁定
The disk is in use or locked by another process
尝试强制挂载该分区,发现仍然失败。
wsl --mount \\.\PHYSICALDRIVE2 --bare
The disk is in use or locked by another process
查看分区所属硬盘,发现被挂载磁盘与系统盘或者开机引导盘属于同一硬盘。windows 保证系统完整性会禁止该磁盘被挂载,所以该分区不许挂载到 WSL。
建议增加新硬盘作为挂载存储硬盘。
结语
不枉博主详细讲解,欢迎订阅博主–炭烤毛蛋 。