首页 > 系统相关 >WSL2Linux 子系统(九)

WSL2Linux 子系统(九)

时间:2024-08-06 21:53:41浏览次数:10  
标签:Windows WSL WSL2Linux VHD 挂载 磁盘 子系统 硬盘

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。
建议增加新硬盘作为挂载存储硬盘。

结语

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

标签:Windows,WSL,WSL2Linux,VHD,挂载,磁盘,子系统,硬盘
From: https://blog.csdn.net/weixin_35723192/article/details/140806750

相关文章

  • 嵌入式Linux中的LED驱动控制(使用Pinctrl和GPIO子系统)
    在前面驱动LED的所有案例中,都是在驱动程序中去设置每个引脚的复用功能,这会导致所编写的驱动程序移植困难,可重用性差,缺乏对引脚的统一管理,容易出现引脚的重复定义等等弊病。为此,Linux内核引入了pinctrl子系统和GPIO子系统的概念。pinctrl子系统主要用于芯片引脚功能的管理,它基本上......
  • 表面贴装型晶体振荡器(汽车电子用)DSO221SX/DSO211SX:汽车电子系统的精准时间之源
    在现代汽车电子领域,精确的时间同步和稳定的频率控制是确保各种系统高效、可靠运行的关键。表面贴装型晶体振荡器DSO221SX/DSO211SX凭借其卓越的性能和出色的特性,成为了汽车电子系统中不可或缺的重要组成部分。一、汽车电子中晶体振荡器的重要性随着汽车技术的不断发展,汽......
  • 0730_驱动1 gpio子系统
    一、介绍gpio子系统1.1基于gpio子系统框架1.2基于gpio子系统API接口#include<linux/of_gpio.h>intof_get_named_gpio(structdevice_node*np,constchar*propname,intindex)函数功能:获取gpio编号参数:np:节点结构体指针......
  • win10下WSL2子系统与winnfsd使用
    1安装WSL2子系统1.1下载安装进入windowsStore,搜索Ubuntu,下载:1.2开启依赖右键windows左下角->应用和功能->相关设置-程序和功能->启用或关闭windows功能。勾选适用于Linux的windows子系统和虚拟机平台(WSL2需要)选项:也可以直接在powershell中输入如下两条指令开启:dism......
  • 探索Cinema 4D粒子系统与Arnold
    ​Cinema4D结合Arnold是艺术家和工作室在许多领域经常使用的最著名的3D软件和渲染引擎之一,因为它的便利性和多功能性。在Cinema4D2024.4中,我们看到了粒子系统的发布,它可以帮助您在Arnold中生成粒子。工作流程粒子组默认情况下,您需要渲染场景中的所有粒子组,它们以球体的形式......
  • Android低功耗子系统的投票机制以及触发进入系统休眠的过程
    从kernel角度看,系统是否进入休眠应该由内核来控制,因此Linux引入了wakeupsource以及autosleep机制关于wakeupsource的介绍,请参考:WakeupSource框架设计与实现关于autosleep机制,请参考:autosleep框架设计与实现在内核中,使用wakeupsource提供投票机制,让各个系统模块投票......
  • 泰山派学习14--pinctr、gpio子系统控制设备树LED
    1、在泰山派设备树的/根节点上添加zbl_led子节点(路径:Z:\sdk\linux\kernel\arch\arm64\boot\dts\rockchip)打开tspi-rk3566-user-v10-linux.dts设备树源文件    在根目录下添加gpioled子节点     2、在SDK上编译kernel(./build.shkernel)执行内核......
  • Linux hwspinlock子系统(STM32MP157 HSEM)
    hwspinlock(硬件自旋锁)是Linux内核中的一个同步机制,它提供了一种在多核处理器系统中保护共享资源的方法。hwspinlock分为三部分:hwspinlockcore提供注册注销以及对hwspinlock获取和释放接口。hwspinlockController驱动。hwspinlockClient驱动,使用hwspinlock提供的同步机制......
  • Linux下IIO子系统驱动
    1引入IIO子系统随着手机、物联网、工业物联网和可穿戴设备的爆发,传感器的需求越来越多。比如手机或者手环里面的加速度计、光传感器、陀螺仪、气压计、磁力计等,这些传感器本质上都是ADC。这些传感器对外通过IIC或者SPI接口来发送ADC转换后的原始数据。Linux内核为了管理......
  • Linux下PWM子系统
    1pwm子系统框架内核态分为:pwmcore:pwm_chip的添加删除,pwm_class类pwm_chip/pwm_device的sysfs创建。pwmdriver:pwm_chip对象实例,注册添加到pwmcore。 pwm_chip可以包含一个或多个pwm_device,每个pwm_device通过设置不同pwm_state来达到目的。1.1源码结构drivers/pwm/......