![如何在 WSL shell 中获取 Windows 磁盘的卷标?](https://linux22.com/image/213998/%E5%A6%82%E4%BD%95%E5%9C%A8%20WSL%20shell%20%E4%B8%AD%E8%8E%B7%E5%8F%96%20Windows%20%E7%A3%81%E7%9B%98%E7%9A%84%E5%8D%B7%E6%A0%87%EF%BC%9F.png)
在 WSL 中运行 Ubunutu 20.04,Windows 磁盘安装为
/mnt/c
/mnt/d
/mnt/e
等等。
在 bash shell 中,如何获取 /mnt/d 处磁盘的卷标?
lsblk
并且tune2fs /mnt/d
不给出卷标
答案1
虽然大多数东西都在@爱德华的回答是真的,有是WSL 中的解决方法允许您读取卷名称。
由于(至少默认情况下)WSL 允许您调用命令行(和其他)Windows 可执行文件,因此可以轻松使用 PowerShell(通过 WSL)读取特定于 Windows 的数据。
$ powershell.exe -c "(Get-Volume d).FileSystemLabel"
Crucial SSD 2TB
当然,您可以使用类似的脚本(WSL2 特定,由于安装):
mount |
grep "^drvfs on .* 9p" |
awk '{print $3}' |
xargs -I{} bash -c '''
mnt={}
drv="${mnt:0-1}"
echo -en "${mnt}\t"
powershell.exe -c "(Get-Volume $drv).FilesystemLabel"
'''
答案2
WSL2 实际上是一个运行 Microsoft 内核的 VM:
root@test-ubuntu-wsl2:/home/edward# uname -a
Linux test-ubuntu-wsl2 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
您可以使用 Windows 端用户空间连接磁盘wsl.exe
,例如,请参阅https://learn.microsoft.com/en-us/windows/wsl/wsl2-mount-disk或者https://devblogs.microsoft.com/commandline/access-linux-filesystems-in-windows-and-wsl-2/。
Windows 文件系统似乎是使用以下9p
协议挂载的:
root@test-ubuntu-wsl2:/home/edward# mount | grep '\\'
C:\ on /mnt/c type 9p (rw,noatime,dirsync,aname=drvfs;path=C:\;uid=1000;gid=1000;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=8,wfd=8)
M:\ on /mnt/m type 9p (rw,noatime,dirsync,aname=drvfs;path=M:\;uid=1000;gid=1000;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=8,wfd=8)
Windows 主机运行 9p 服务器,WSL 实例连接到该服务器。因此,没有直接设备访问(没有硬件访问):lsblk
并且tune2fs
所有其他直接设备用户空间工具将看不到主机驱动器。
另请参阅https://superuser.com/questions/1643551/windows-10-wsl-mount-creates-9p-filesystem-instead-of-drvfs。
太长了;您需要直接设备访问才能查看磁盘标签。从 WSL2 内部(本质上是一个虚拟机)来看,这是不可能的。