第8章 WSL2
ここではWLS (Windows Subsystem for Linux) 2の使い方について記す.
PowerShell上でのWSL関連基本操作
WSLのインストール
インストール可能なディストリビューションの確認
wsl -l --online
インストール可能なディストリビューション名の一覧を取得する.
出力例を以下に示す:
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
Ubuntu-24.04 Ubuntu 24.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.6 openSUSE Leap 15.6
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
openSUSE-Tumbleweed openSUSE Tumbleweed
インストールの実行
上記の方法で確認したものから,目的の名前を引数に渡してインストールする:
wsl --install <NAME>
Ubuntuにすると,あとからUbuntuのバージョンをアップデートできる. バージョンが指定されたUbuntu-22.04などにすると, バージョンが固定されてアップデートできないようだ.
インストール状況,動作状況の確認
wsl -l -v
出力例は次のようになる:
NAME STATE VERSION
* Ubuntu Running 2
Ubuntu-24.04 Stopped 2
docker-desktop Stopped 2
wslコマンドでデフォルトで起動されるものに「*」がついている. 「Version」がWSLのバージョンである.
wslの終了
wsl -t <Distribution名>
ディストリビューション名には,wsl -l -vで表示される名前をあてはめる.
例えば「Ubuntu」を終了する場合は次のようにする:
wsl -t Ubuntu
外付けストレージのマウント
方法1: Windowsでのドライブ名を用いる方法
mount -t drvfs <ドライブのパス> <マウント先>
ドライブのパスはWindowsのエクスプローラーで表示されるものを用いる.
例えばDドライブの外部ストレージであれば,
mount -t drvfs 'D:\' /mnt/d
とする.
成功した手順
デバイスIDの確認
まずPowerShellを管理者権限で開く.HDDのデバイスIDを確認するためにPowerShellで
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
とする.
> GET-CimInstance -query "SELECT * from Win32_DiskDrive"
DeviceID Caption Partitions Size Model
-------- ------- ---------- ---- -----
.\PHYSICALDRIVE1 I-O DATA HDPH-UT USB Device 1 5000978465280 I-O DATA HDPH-UT USB Device
.\PHYSICALDRIVE0 SAMSUNG MZVL2512HCJQ-00B07 4 512105932800 SAMSUNG MZVL2512HCJQ-00B07
ここにあるマウントしたいHDD等のDeviceID(一番左に書いてあるもの)を以降のコマンドで使う. SizeやModelをもとに目的のストレージを特定するとよい.
マウント
前の節で得たデバイスIDを使って,PowerShell上で次のようにする(IDは適宜書き換え):
wsl --mount .\PHYSICALDRIVE1 --bare
続いてWSL(Ubuntu)のターミナルを開く.
そこでlsblk
を実行すると,それまではなかった新たにマウントされたデバイスが確認できる.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 365.6M 1 disk
sdb 8:16 0 2G 0 disk [SWAP]
sdc 8:32 0 4.6T 0 disk
├─sdc1 8:33 0 128M 0 part
└─sdc2 8:34 0 4.6T 0 part /mnt/d
sdd 8:48 0 256G 0 disk /mnt/wslg/distro
この場合,容量とMOUNTPOINTが空欄(まだマウントされていない)を見て sdc2が目的のHDDだとわかったので,次のコマンドでマウントした:
sudo mount /dev/sdc2 /mnt/d
すなわち/dev/sdc2を/mnt/dにマウントするということである. これで/mnt/dからHDDの中で作業できるようになった.
アンマウント
マウントしている間, エクスプローラーからはそのストレージにアクセスできないらしい(表示されなくなる). そのため再度エクスプローラーで使う際はPowerShell上でアンマウントする必要があるようだ. ここでもマウント時に用いたデバイスIDを使用する:
> wsl.exe --unmount .\PHYSICALDRIVE1
出力:
この操作を正しく終了しました。
これで再びエクスプローラー上にHDDが表示される.
※失敗した手順
参照したマイクロソフトのページ (https://learn.microsoft.com/ja-jp/windows/wsl/wsl2-mount-disk) には単に
wsl --mount <DiskPath>
とする方法も書かれていたが,これではディスクがbusyだ,みたいなエラーが出て失敗した.
WSL2の起動に時間がかかる場合の対処
接続できないネットワークが登録されている場合
事象:
WSL2の起動に数分かかる.起動してからは問題なく動作する.
原因:
エクスローラーの「PC」の画面に,既につながらないネットワークが登録されていたこと.
対処:
つながらないネットワークを右クリックし,メニューから切断を選択して削除した.
結果:
wslの起動が4秒台に短縮された.