WSL2用にデータパーティションを作る (2)

2024年5月2日木曜日

wsl2

t f B! P L

目的

前回 作成したデータ保存用VHDXファイルだが、再起動した時に旨く自動接続できなかった。それ以外にも性能上の問題がある使い方をしていた。まとめると、以下の問題がある。

  1. VHDXファイルを直接利用していない
    • Windows経由のアクセスになっていた
  2. パーティションの自動マウントが出来ていない
  3. 番号を使うためマウントする順番で違うディスクをマウントしてしまう

これらを修正することが、今回の目的である。ただし、2はスマートな解決はできてない。

性能まとめ

wsl2環境の利用目的は、llvmの開発である。ソースとbuildディレクトリの置き場所を変えながら性能を測定する。

性能一覧

Ubuntu 24.04をインストール直後に測定した性能は以下の通り。Windows経由だと・・・っていう危惧を体現した感じ。

srcをroot srcをwin srcをbare srcをblk
buildをroot 45m2s 50m7s 44m49s 45m6s
buildをwin ? 51m2s ? ?
buildをbare ? ? 45m2s ?
buildをblk ? ? ? 44m58s

穴を埋めようと、マシンをリブート後、一通り測定してみた結果が以下の通り。性能差が見られなくなってしまった。まあ、PhysicalDrive2などと番号を使うよりいいんだと思い込むことにしようと思います。

srcをroot srcをwin srcをbare srcをblk
buildをroot 45m2s 46m56s 44m49s 45m6s
buildをwin 45m34s 46m43s 46m14s 45m49s
buildをbare 46m30s 46m20s 45m2s 46m57s
buildをblk 46m46s 47m4s 47m18s 44m58s

結論としては、以下のように考えている。

  • win経由だと不安定で遅くなる事もある
  • bareマウント経由と、bareなしマウントは差はなし
  • rootに置いてもいいが、distroを移ることを考えると別に分けたい

補足説明

以下に、表中の項目で使った独自のキーワードについてまとめる。

  • root
    • wslのubuntuなどのrootを利用
  • win
    • Windowsの「ディスクの管理」から「接続」したデバイスを、\\.\PhysicalDrive2などとして利用
  • bare
    • wslからbareマウントし、Linuxからデバイスをマウントして利用
  • blk
    • wslからbareなしでマウントして利用

bareとblockの違いは殆どない。今回は、UUIDを利用してマウントするために、Linux側からUUIDを付けてマウントできる、1) bareありでマウントし、2) そのデバイスをUUIDで指定しながらLinux側からマウントする、という方法を使う。

VHDXファイルの作成

VHDXファイルを、前回の作成方法 にそって作成する。この説明では、前回作成した物、C:\Users\jam\wsl\ext4-data.vhdx というVHDXファイルを再利用する。

VHDXファイルのアンマウント

「ディスクの管理」から作成したVHDXファイルは、Windowsにマウントした状態となっている。私の目的は、VHDXファイルをwslから直接マウントすることなので、「ディスクの管理」から「VHDの切断」でアンマウントしておく。

VHDXファイルのマウント

作成したVHDXファイルを、wslからマウントする。マウントの方法には2種類ある。

  1. VHDXファイルを、デバイスとしてマウントする方法。--bareオプションを利用するため、以下ではベアマウントと呼ぶ
  2. VHDXファイルを、ランダムアクセスデバイスとしてマウントする方法

1の場合、物理的なHDDをマウントして、パーティションを切って使うような物である。勿論、パーティションを切らずにHDDをそのまま使ってもいい。2の場合、パーティションを切ることができないが、そのままディスクをアクセスできる。性能一覧にて測定したように、性能的な差は無い。

今回は、UUIDを使うために、前者の方法で利用する。

VHDXファイルの初期化

作成したVHDXファイルを、wslからベアマウントして、初期化を行う。前回初期化済みなら、何もしない。

VHDXファイルのベアマウント

wslの--vhdオプションを利用して、VHDXファイルを、wslから直接マウントする。パーティション情報などを記入するため、ベアマウントを行う。

PS C:\Users\jam> wsl --mount --vhd C:\users\jam\wsl\ext4-data.vhdx --bare
この操作を正しく終了しました。

状態の確認

lsblkpartedを利用して状況を確認する。前回100Gで作成したVHDXファイルだが足らなくなったので、200Gに拡張している。/dev/sdgにマウントされた。

jam@JamWin10:~$ lsblk
NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
...
sdf    8:80   0   256G  0 disk
sdg    8:96   0   200G  0 disk

ext4ファイルシステムの初期化

前回の初期化方法 にそって初期化する。マウントしたデバイスに合わせてデバイス名は変更すること。

jam@JamWin10:~$ sudo mkfs -t ext4 /dev/sdg

UUIDの確認

blkidを使って確認する。

jam@JamWin10:~$ sudo blkid | grep sdg
/dev/sdg: UUID="32eea065-747b-451a-8e35-07107ddd12da" BLOCK_SIZE="4096" TYPE="ext4"

VHDXファイルの利用

今回は、wslでベアマウントしたデバイスを、Linuxからマウントして利用する。これはマウントの順番でデバイス名が変化することを嫌って、UUIDを利用するためである。

/etc/fstabに追加して利用

/etc/fstabに、以下の通りUUIDを利用したマウントを追加して、マウントする。

jam@JamWin10:~$ sudo vi /etc/fstab
# UNCONFIGURED FSTAB FOR BASE SYSTEM
UUID=32eea065-747b-451a-8e35-07107ddd12da /mnt/data ext4 defaults 0 2
jam@JamWin10:~$ sudo mount -a

自動マウント

作成したVHDXファイルを、自動的にマウントして利用するには、以下の2つの問題を解決する必要がある。

  1. /etc/fstabを参照して起動時にmountする
  2. wsl上のLinuxからUUIDで認識できるように、デバイスをbareマウントする

起動時にマウント

Ubuntu 24.04の場合、systemd/etc/fstabを読み込んで処理しているため、systemdが有効なら、何も設定する必要はない。

jam@JamWin10:~$ cat /etc/wsl.conf
[boot]
systemd=true

ただし動作が不安定なようで、失敗することもある。その場合は、手でsudo mount -aなどを実行し対応することをお薦めする。
systemdに読み込まれているかどうかは、以下のように確認できる。

jam@JamWin10:~$ sudo systemctl list-units --type mount mnt-data.mount
  UNIT           LOAD   ACTIVE SUB     DESCRIPTION
  mnt-data.mount loaded active mounted /mnt/data

Legend: LOAD   → Reflects whether the unit definition was properly loaded.
        ACTIVE → The high-level unit activation state, i.e. generalization of S>
        SUB    → The low-level unit activation state, values depend on unit typ>

1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

起動時のエラー

正しくマウントできないことがあることは上述したが、更に、/etc/fstabに設定すると、起動時に以下のエラーがでるようになる。解決さくが無さそうなので、当方では、バージョンアップを待つとして、諦めている。

Processing fstab with mount -a failed.

jam@JamWin10:~$

デバイスの自動bareマウント

本来であれば、.wslconfigなどでwsl自体の設定として登録できて然るべきと思うし、githubのwslでも散々要望として上がっているのに、一行に対応されていません。なので、参考に有るように、Terminalのコマンドラインを修正して対応します。

まず、コマンドラインから。まず、実行すべきコマンドラインを確認します。以下を修正して、各自が作成したVHDXファイルをマウントしてUnbuntuなどが起動することを確認します。

PS C:\Users\jam> pwsh.exe -Command "wsl.exe --mount --vhd C:\Users\jam\wsl\ext4-data.vhdx --bare | out-null; wsl.exe -d Ubuntu-24.04"

確認できたら、それをTerminalの設定から以下のように登録します。開始ディレクトリには、\\wsl.localhost\Ubuntu-24.04\home\ユーザ名と登録します。

参考

ラベル

AndroidTV (1) chromebook (2) DIY (4) docker (1) git (4) Ingress (4) llvm (3) MacBook (1) MVNO (1) narou (1) PS4 (2) QNAPNAS (9) SIMD (9) SmartBand (8) Ubuntu (9) VAIO (1) Windows (2) wsl (2) wsl2 (1) Xperia (20) トルネ (3) プログラム (26) ルーター (18) 音楽 (6) 家事 (2) 自炊 (2) 電子書籍 (2) 洋食 (4)

フォロワー

QooQ