コンテンツにスキップ

第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秒台に短縮された.