目的
前回 作成したデータ保存用VHDXファイルだが、再起動した時に旨く自動接続できなかった。それ以外にも性能上の問題がある使い方をしていた。まとめると、以下の問題がある。
- VHDXファイルを直接利用していない
- Windows経由のアクセスになっていた
- パーティションの自動マウントが出来ていない
- 番号を使うためマウントする順番で違うディスクをマウントしてしまう
これらを修正することが、今回の目的である。ただし、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
などとして利用
- Windowsの「ディスクの管理」から「接続」したデバイスを、
- 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種類ある。
- VHDXファイルを、デバイスとしてマウントする方法。
--bare
オプションを利用するため、以下ではベアマウントと呼ぶ - 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
この操作を正しく終了しました。
状態の確認
lsblk
やparted
を利用して状況を確認する。前回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つの問題を解決する必要がある。
- /etc/fstabを参照して起動時にmountする
- 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\ユーザ名
と登録します。
0 件のコメント:
コメントを投稿