WSLシェルからWindowsディスクのボリュームラベルを取得するには?

WSLシェルからWindowsディスクのボリュームラベルを取得するには?

WSLでUbunutu 20.04を実行すると、Windowsディスクが次のようにインストールされます。

/mnt/c
/mnt/d
/mnt/e

など。

Bashシェルから/mnt/dにあるディスクのボリュームラベルを取得するには?

lsblktune2fs /mnt/dボリュームラベルを提供していません

答え1

ほとんどのものはそうですが、@ Edwardの回答本当です、あります。はいWSLの回避策を使用すると、ボリューム名を読み取ることができます。

(少なくともデフォルトでは)WSLを使用すると、コマンドラインやその他のWindows実行可能ファイルを呼び出すことができるため、WSLを介してPowerShellを簡単に使用して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ホストは、WSLインスタンスが接続されている9pサーバーを実行します。したがって、直接デバイスアクセス(ハードウェアアクセスなし)はなく、他のすべての直接デバイスユーザースペースツールにはlsblkホストtune2fsドライブが表示されません。

また見てくださいhttps://superuser.com/questions/1643551/windows-10-wsl-mount-creates-9p-filesystem-instead-of-drvfs

長すぎます。ディスクラベルを表示するには、デバイスに直接アクセスする必要があります。 WSL2(デフォルトでは仮想マシン)内ではこれは不可能です。

関連情報