WSL2Linux 子系统(九)

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格式的硬盘可以通过以下步骤完成:

  1. 确定NTFS硬盘的设备名称
    在Windows中,打开资源管理器,右键点击NTFS硬盘(比如D盘),选择“属性” -> “硬件”选项卡 -> 选择硬盘 -> 点击“属性”按钮 -> 选择“详细信息”选项卡 -> 选择“设备实例路径”。
    你会看到一个类似于\Device\HarddiskVolume5的设备路径。这就是硬盘的设备名称。

SCSI\DISK&VEN_NVME&PROD_MICRON_MTFDKBA51\5&10B1FD3F&0&000000

  1. 在WSL中创建挂载点

打开WSL终端,创建一个目录作为挂载点。比如:

sudo mkdir /mnt/d

这里假设你想将Windows的D盘挂载到WSL中的/mnt/d目录下。

  1. 挂载NTFS硬盘

使用mount命令挂载NTFS硬盘到刚刚创建的挂载点:

sudo mount -t drvfs '\\.\HarddiskVolume5' /mnt/d

这里的HarddiskVolume5应替换为你在步骤1中获得的实际设备名称。/mnt/d是你在步骤2中创建的挂载点路径。

  1. 验证挂载
    执行df -h命令可以查看所有已挂载的文件系统,确认NTFS硬盘是否成功挂载到了指定的挂载点。

  2. 自动挂载(可选):

如果希望每次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系统保持一致。

  1. 创建磁盘挂载点
sudo mkdir -p /mnt/f
  1. 挂载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 是你创建的挂载点路径。

  1. 卸载U盘/SD卡
sudo unmount /mnt/f

3 硬盘挂载失败

  1. 磁盘位置不对
磁盘已附加,但装载失败: No such device。
要查看更多相关信息,请在 WSL2 中运行 'dmesg'。
若要分离磁盘,请运行 'wsl.exe --unmount \\.\PHYSICALDRIVE0'
  1. 磁盘被占用或被进程锁定
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。
建议增加新硬盘作为挂载存储硬盘。

结语

不枉博主详细讲解,欢迎订阅博主–炭烤毛蛋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值