WSLって何?
Windows 11にはLinuxを動作させるためにWSL2という仕組みをもっています。通常LinuxディストリビューションはLinuxカーネルを経由してハードウェアへアクセスしていますが、WSL2の仕組みでは間にHyper-Vが入っています。Windowsと同居して動作することができるように、このHyper-VがWindows NTカーネルとハードウェアのアクセス権について調整をしています。
WSLとはWindowsでLinuxを動かすための器です。器の中にさらにカーネルを事前に敷いているイメージです。このカーネルを使って動くLinuxをダウンロードしてくることで利用できるようになります。インストールしても基本的にはWindowsを立ち上げるたび利用するLinuxの立ち上げるという行為が必要になります。
LinuxをインストールするとWindowsのどこかにext4.vhdxという仮想ハードディスクが作成されこの中にLinuxのルートファイルシステムが作成されます。Windowsから直接見えるのはこのext4.vhdxファイルまでですが、さらにその中を見るにはネットワーク共有(P9プロトコル)を使います。実際はエクスプローラで\\wsl.localhost\ と打ち込むと自動でこのプロトコルが使われて中身が見えるようになっています。
| Linuxの世界(パス) | Windowsの世界(エクスプローラーでの見た目) |
/ (ルート) | \\wsl.localhost\AmazonLinux2023\ |
/usr/bin/ | \\wsl.localhost\AmazonLinux2023\usr\bin\ |
/home/sooni/ | \\wsl.localhost\AmazonLinux2023\home\sooni\ |
仮想ハードディスクの所在を確認する
Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\*" `
| Select-Object @{Name="Linux名"; Expression={$_.DistributionName}}, `
@{Name="ext4.vhdxの場所"; Expression={$_.BasePath}} `
| Format-Table -AutoSize
docker-disk >> Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\*" `
>> | Select-Object @{Name="Linux名"; Expression={$_.DistributionName}}, `
>> @{Name="ext4.vhdxの場所"; Expression={$_.BasePath}} `
>> | Format-Table -AutoSize
Linux名 ext4.vhdxの場所
------- ---------------
AmazonLinux2023 d:\WSL\AmazonLinux2023\
rancher-desktop-data C:\Users\atsushi\AppData\Local\rancher-desktop\distro-data
rancher-desktop C:\Users\atsushi\AppData\Local\rancher-desktop\distro
docker-disk >>
現在インストールしてあるLinux一覧の確認
wsl -l -v
tmp $ wsl -l -v
NAME STATE VERSION
* AmazonLinux2023 Stopped 2
tmp $
Linuxの起動と停止
wsl -d AmazonLinux2023
* AmazonLinux2023 Stopped 2
tmp $ wsl -d AmazonLinux2023
[sooni@amzn2023-local tmp]$ exit ← これだけで抜ける事ができて停止までする。
logout
tmp $ wsl -l -v
NAME STATE VERSION
* AmazonLinux2023 Running 2 ← この通り抜けてすぐはまだ動作中
tmp $ wsl -l -v
NAME STATE VERSION
* AmazonLinux2023 Running 2
tmp $ wsl -l -v
NAME STATE VERSION
* AmazonLinux2023 Stopped 2 ← 数十秒かな、、すると停止する。
tmp $
WSLからCドライブを表現するには
ls /mnt/c

