2023-05-13

WSL shrink maximum image size

WSL がディスクを食い尽くすのをの何とかしたい。vhdx のサイズが 1TB 決め打ちで変更できないとか、Microsoft のそういう所ほんと嫌い。

基本戦略は上記に従う。ちなみに老人なのでパワーシェルとかは知らない。

まず Ubuntu をクリーンインストールした後、即終了。(初回インストール時は管理者で wsl --install を実行する必要あり)

C:\Users\user>wsl --version
WSL バージョン: 1.2.5.0
カーネル バージョン: 5.15.90.1
WSLg バージョン: 1.0.51
MSRDC バージョン: 1.2.3770
Direct3D バージョン: 1.608.2-61064218
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.22621.1555

C:\Users\user\Documents>wsl -l -v
Linux 用 Windows サブシステムにディストリビューションがインストールされていません。

'wsl.exe --list --online' を使用して利用可能なディストリビューション
を一覧表示し、'wsl.exe --install <Distro>' を使用してインストールします。

また、Microsoft Store にアクセスしてディストリビューションをインストールすることもできます:
https://aka.ms/wslstore
Error code: Wsl/WSL_E_DEFAULT_DISTRO_NOT_FOUND

C:\Users\user\Documents>wsl --install
インストール中: Ubuntu
Ubuntu がインストールされました。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: user
New password:
Retype new password:
passwd: password updated successfully
この操作を正しく終了しました。
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


This message is shown once a day. To disable it please create the
/home/user/.hushlogin file.

user@MY-PC:~$
logout

C:\Users\user\Documents>wsl --shutdown

C:\Users\user\Documents>wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Stopped         2

Ubuntu の vhdx をコピー。ファイルの場所は臨機応変に探す。

C:\Users\user\Documents>copy "%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx" ubuntu.vhdx
        1 個のファイルをコピーしました。

新しい vhdx を作る(ここでは 10GB)。

C:\Users\user\Documents>diskpart

Microsoft DiskPart バージョン 10.0.22621.1

Copyright (C) Microsoft Corporation.
コンピューター: MY-PC

DISKPART> create vdisk file="C:\Users\user\Documents\ext4.vhdx" maximum=10000 type=expandable

  100% 完了しました

DiskPart により、仮想ディスク ファイルが正常に作成されました。

DISKPART> exit

Ubuntu を起動し、新旧 vhdx をアタッチ。

C:\Users\user\Documents>wsl
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


This message is shown once a day. To disable it please create the
/home/user/.hushlogin file.

user@MY-PC:/mnt/c/Users/user/Documents$ wsl.exe --mount --vhd --bare ubuntu.vhdx
この操作を正しく終了しました。

user@MY-PC:/mnt/c/Users/user/Documents$ wsl.exe --mount --vhd --bare ext4.vhdx
この操作を正しく終了しました。

user@MY-PC:/mnt/c/Users/user/Documents$ lsblk
NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda    8:0    0 363.3M  1 disk
sdb    8:16   0     1G  0 disk [SWAP]
sdc    8:32   0     1T  0 disk /snap
                               /mnt/wslg/distro
                               /
sdd    8:48   0     1T  0 disk
sde    8:64   0   9.8G  0 disk

旧 vhdx が sdd、新 vhdx が sde だと分かるので、新 vhdx (/dev/sde)をフォーマット。

user@MY-PC:/mnt/c/Users/user/Documents$ sudo mkfs.ext4 /dev/sde
[sudo] password for user:
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 2560000 4k blocks and 640848 inodes
Filesystem UUID: 0d215fd7-0556-4259-8854-54fa8768d86c
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

新旧 vhdx をマウント、中身をコピーした後、Ubuntu を終了。

user@MY-PC:/mnt/c/Users/user/Documents$ sudo mkdir /mnt/vdisk-src /mnt/vdisk-dst

user@MY-PC:/mnt/c/Users/user/Documents$ sudo mount -r /dev/sdd /mnt/vdisk-src

user@MY-PC:/mnt/c/Users/user/Documents$ sudo mount /dev/sde /mnt/vdisk-dst

user@MY-PC:/mnt/c/Users/user/Documents$ ls /mnt/vdisk-src /mnt/vdisk-dst
/mnt/vdisk-dst:
lost+found

/mnt/vdisk-src:
bin   dev  home  lib    lib64   lost+found  mnt  proc  run   snap  sys  usr
boot  etc  init  lib32  libx32  media       opt  root  sbin  srv   tmp  var

user@MY-PC:/mnt/c/Users/user/Documents$ sudo cp -axT /mnt/vdisk-src /mnt/vdisk-dst

user@MY-PC:/mnt/c/Users/user/Documents$ ls /mnt/vdisk-dst
bin   dev  home  lib    lib64   lost+found  mnt  proc  run   snap  sys  usr
boot  etc  init  lib32  libx32  media       opt  root  sbin  srv   tmp  var

user@MY-PC:/mnt/c/Users/user/Documents$ wsl.exe --shutdown

Ubuntu の vhdx を新 vhdx にすり替え、Ubuntu を起動してディスクサイズを確認。

C:\Users\user\Documents>move ext4.vhdx "%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
C:\Users\user\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx を上書きします か? (Yes/No/All): y
        1 個のファイルを移動しました。

C:\Users\user\Documents>wsl
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


This message is shown once a day. To disable it please create the
/home/user/.hushlogin file.

user@MY-PC:/mnt/c/Users/user/Documents$ df -h | grep /dev/sd
/dev/sdc        9.6G  1.1G  8.0G  12% /

2023-05-04

WSL install error 0x80370114

ある PC で、何度やっても WSL インストールが失敗する。

C:\Windows\System32>wsl --install
インストール中: Ubuntu
Ubuntu がインストールされました。
Ubuntu を起動しています...
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x80370114
Error: 0x80370114 ???????????????????????????????????

Press any key to continue...
ディストリビューション 'Ubuntu' のインストール プロセスが次の終了コードで失敗しました: 1。
Error code: Wsl/InstallDistro/WSL_E_INSTALL_PROCESS_FAILED

事前に Ubuntu をアンインストールしてもしなくても、同じエラーコードで失敗する。心当たりとしては、最初に管理者にならずに wsl --install を実行してしまったこと。当然インストールは失敗し、以降は管理者で実行しても失敗するようになった。

別の PC で wsl --install して成功した時の様子。こちらは Ubuntu インストール前に幾つかインストールが実行されている。

C:\WINDOWS\system32>wsl --install
インストール中: 仮想マシン プラットフォーム
仮想マシン プラットフォーム はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム  はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム  はインストールされました。
インストール中: Ubuntu
Ubuntu はインストールされました。
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。

失敗する PC の方で OptionalFeatures.exe を確認すると、「仮想マシン プラットフォーム」「Linux 用 Windows サブシステム」のどちらも無効になっていた。一方、「設定 > アプリ > インストールされているアプリ」には「Linux 用 Windows サブシステム」が存在した。これをアンインストールして再度 wsl --intall を管理者で実行すると、ようやくインストールが成功した。

恐らく、「仮想マシン プラットフォーム」の有効化は管理者でなかったために失敗し、「Linux 用 Windows サブシステム」はユーザーアプリなのでインストールに成功していたのだろう。そして wsl --install は「Linux 用 Windows サブシステム」の存在だけをチェックしているのではないだろうか。管理者にならずに実行してしまうミスは普通にあり得るし、それで WSL がインストール不能になるというのは結構な重大バグなのでは。

2023-05-03

Lenovo X280 petit freeze

Lenovo X280 を使っていて、長らくプチフリーズに悩まされていた。大体は 1 秒程度、たまに酷い時は固まったままになる。そういう時は sleep & resume すると回復する。

フリーズといっても固まっているのは画面だけで、その他は正常に動いている。例えば動画視聴時に固まった場合でも、音声は流れ続けている。恐らくディスプレイの同期周りが上手くいっていないのだろうな、と心当たりを調べるも、ずっと解決できずに居た。

やはりグラフィックスドライバーか。当然疑ってはいたが、それらしい設定画面を見つけられなかったのだった。まさか右クリックメニューにしか導線がないとは。ただし最初はタスクトレイにあったかも知れない(覚えてない)。それを私が無効にした可能性は大いにある。

パネル・セルフリフレッシュを無効にすると、問題は完全に解消した。心なしかマウスポインターやスクロールまでも滑らかになったような気がする。フォーラムの投稿日は 2019-07、もっと早くにググっておけば良かった。

改めてパネル・セルフリフレッシュでググってみると、これの弊害は様々にあるようだ。現在困っている・いないに関わらず、こんなものは今すぐ無効にすべき。