WSL 2のLinux kernelがLUKSに対応
「WSL 2」の「Linux kernel」が「LUKS」に対応し、「LUKS」で暗号化されたボリュームを復号化してマウントできるようになりました。Linux kernel 5.10.16.3
「LUKS」のサポートは、2021年4月16日にリリースされた「Linux kernel 5.10.16.3」で実装されました。不具合の修正も
本バージョンではPCのスリープから復帰した時に日時がおかしくなる不具合も修正されています。Linux kernelをアップデートするには
「WSL 2」の「Linux kernel」をアップデートする方法は、以下を参照してください。WSLでボリュームをマウントする方法について
「WSL」でボリューム(ファイルシステム)をマウントする方法は、以下で紹介しています。基本的な手続きの流れは変わらないため、以下も参考にしてください。
例で使用するWSLの環境について
ここでは以下の「WSL」環境で「LUKS」で暗号化されたボリュームをマウントします。「Windows」のバーションは「Windows 10 Insider Preview Build 21364」です。
デフォルトのLinuxディストリビューションは「Ubuntu 20.04 LTS」です。
「Ubuntu」から見た「Linux kernel」のバージョンは「5.10.16.3-microsoft-standard-WSL2」です。
1.cryptsetupのインストール
「Ubuntu」で「cryptsetup」パッケージをインストールします。「cryptsetup」パッケージは「LUKS」ボリュームを操作するために必要です。
1-1.cryptsetupがインストールされているかどうか調べるには
すでに「cryptsetup」パッケージがインストールされているかどうか調べるには、以下のコマンドを実行します。apt-cache policy cryptsetup
すでに「cryptsetup」パッケージがインストールされている場合、上記のように「Installed:」の行にインストール済みのパッケージのバージョンが表示されます。
1-2.cryptsetupのインストール
「cryptsetup」パッケージがインストールされていない場合、以下のコマンドを実行して「cryptsetup」パッケージをインストールします。sudo apt install cryptsetup
2.ストレージのアタッチ
「LUKS」ボリュームを復号化する前に、「LUKS」ボリュームが含まれているストレージを調べアタッチします。ここでは例として以下のストレージ(ディスク2)の1番目のパーティションを「LUKS」で暗号化しています。
「LUKS」ボリュームをマウントするにあたり、そのボリュームが含まれているストレージを一意に特定するデバイスID(識別子)が必要になります。
2-1.ストレージのデバイスIDを調べる
以下のコマンドを実行し、ストレージの情報を出力します。
wmic diskdrive list brief
以下のようにストレージの情報を出力されるので、該当するディスクの情報を探します。
Caption DeviceID Model Partitions Size
...(省略)...
VMware Virtual NVMe Disk \\.\PHYSICALDRIVE2 VMware Virtual NVMe Disk 1 107372805120
...(省略)...
...(省略)...
VMware Virtual NVMe Disk \\.\PHYSICALDRIVE2 VMware Virtual NVMe Disk 1 107372805120
...(省略)...
「DeviceID」の列に表示されている識別子が、今回必要になるデバイスIDです。
今回の例では「\\.\PHYSICALDRIVE2」がマウントするストレージのデバイスIDになります。
2-2.ストレージのアタッチ
以下のコマンドを実行し、ストレージをアタッチします。アタッチするストレージの識別子は、「2-1.」で調べたデバイスIDを指定します。
wsl --mount \\.\PHYSICALDRIVE2 --bare
3.マウントするボリュームを調べる
次にマウントするボリュームのブロックデバイス(デバイスファイル)を特定します。デバイスファイルを特定する
ストレージのアタッチにより「Ubuntu」側で「LUKS」ボリュームに対応したデバイスファイルが生成されるため、このデバイスファイルを特定します。いくつか方法がありますが、「lsblk」や「parted」を利用してデバイスファイルを調べる方法を紹介します。
Ubuntu側で作業してもOK
ここでは「wsl」コマンドを使用して作業しますが、ここから先の作業は「Ubuntu」側で作業しても良いです。またここではとりあえず復号化したボリュームのマウントを目標に作業します。
3-1.lsblkで調べる
以下のように「lsblk」コマンドを実行すると、ブロックデバイスの一覧が表示されます。
wsl lsblk
表示される情報が少ないため分かりにくいかもしれません。
ストレージをアタッチする前と後でこのコマンドを実行し出力内容を比較すれば、分かりやすいかと思います。
今回の例では「/dev/sdd1」が「LUKS」ボリュームに対応したデバイスファイルになります。
3-2.partedで調べる
以下のように「parted」コマンドを実行すると、ブロックデバイスの一覧が表示されます。
wsl -- sudo parted -l
各ブロックデバイスごとに詳細な情報が表示されます。
今回の例では「/dev/sdd1」が「LUKS」ボリュームに対応したデバイスファイルになります。
ちなみに「/dev/sdd」の情報は以下のようになっています。
4.LUKSボリュームを復号化する
「cryptsetup」コマンドを利用して「LUKS」ボリュームを復号します。cryptsetupコマンドの使い方について
「cryptsetup」コマンドの使い方や詳細は、以下を参照してください。4-1.ボリュームの復号
「cryptsetup」コマンドでは復号化したボリュームのデバイス名を指定して復号化します。復号化したボリュームのデバイスファイルは、「/dev/mapper」内に配置されます。
この時コマンドで指定したデバイス名がファイル名に使用されます。
ここでは例としてデバイス名に「decryptDevice」を指定します。
wsl sudo cryptsetup open /dev/sdd1 decryptDevice
4-2.パスフレーズの入力
暗号化した時に指定したパスフレーズを入力します。特に問題なければ以下のように復号化が完了します。
4-3.復号化ボリュームの確認
復号化したボリュームのデバイスファイルは、「/dev/mapper」内に配置されます。以下のように「/dev/mapper」内に「decryptDevice」が生成されています。
5.復号化ボリュームのマウント
後は他のボリュームと同様にマウントします。ここでは例として「/mnt/wsl/decryptVolume」に復号化したボリュームをマウントします。
5-1.ディレクトリーの作成
以下のコマンドを実行し、マウントポイントとなるディレクトリーを作成します。
wsl mkdir /mnt/wsl/decryptVolume
5-2.復号化したボリュームのマウント
以下のコマンドを実行し、復号化したボリュームのデバイスファイルである「/dev/mapper/decryptDevice」を「/mnt/wsl/decryptVolume」にマウントします。
wsl sudo mount /dev/mapper/decryptDevice /mnt/wsl/decryptVolume
これでマウント完了です。
マウント先を見てみると、復号化されたボリュームがマウントされていることが分かります。
また「lsblk」コマンドで見てみると、以下のようにマウントされていることが分かります。
6.エクスプローラーからアクセスしてみる
他のボリュームと同様に、エクスプローラーから復号化されたボリュームにアクセスできます。ファイル操作も可能です。
ファイル操作の結果が反映されていますね。
7.復号化したボリュームを閉じるには
いわゆる後片付けですね。復号化したボリュームを閉じる方法です。
7-1.復号化したボリュームのアンマウント
復号化したボリュームをマウントしている場合、まずそのボリュームをアンマウントします。上記の例では「/mnt/wsl/decryptVolume」にマウントしているので、以下のコマンドを実行しアンマウントします。
wsl sudo umount /mnt/wsl/decryptVolume
7-2.復号化したボリュームを閉じる
「4-1.」で指定したデバイス名を指定して、復号化したボリュームを閉じます。今回の例ではデバイス名に「decryptDevice」を指定します。
wsl sudo cryptsetup close decryptDevice
以下のように「decryptDevice」デバイスファイルが削除されています。
以上で完了です。