Windows Server 2019 の WSL で wslpath: Invalid argument が出る場合の暫定対処法

Windows Server 2019 (17763.6189)上の WSL で wslpath: Invalid argument が出て困るので対策しました。

WSL のディストリビューションの一つ、Fedora Remix for WSL を利用しています。

暫定対策

後半で調査はしていますが、現状エラーメッセージが表示される以外に影響が出ていないため、wslpath のエラー出力を /dev/null にリダイレクトするようなスクリプトを配置しました。

$ mkdir ~/bin/
$ vim ~/bin/wslpath
#!/bin/bash
/usr/bin/wslpath ${1} "${2}" 2> /dev/null
$ chmod 700 ~/bin/wslpath

wslpath の実態

確認すると、/usr/bin/wslpath から /init にリンクする形で WSL 側のコマンドを実行しているようでした。

$ which wslpath
/usr/bin/wslpath
$ ls -l /usr/bin/wslpath
lrwxrwxrwx 1 root root 5 Aug 18 23:30 /usr/bin/wslpath -> /init

また、wslpath コマンドのヘルプは下記の通りです。
内容は Windows Server 2019 も Windows 11 も同一でした。

$ /usr/bin/wslpath
/usr/bin/wslpath: Invalid argument
Usage:
    -a    force result to absolute path format
    -u    translate from a Windows path to a WSL path (default)
    -w    translate from a WSL path to a Windows path
    -m    translate from a WSL path to a Windows path, with '/' instead of '\'

EX: wslpath 'c:\users'

原因調査のためのスクリプト設置

パスが分かったので、ユーザーのホームディレクトリに wslpath をラップするスクリプトを置いてみます。

$ cat ~/bin/wslpath
#!/bin/bash
/usr/bin/wslpath ${1} "${2}"
echo wslpath ${1} "${2}" >> /var/log/wslpath.log

~/bin/wslpath と /var/log/wslpath.log に適切なパーミッションを付与するとログが出力されます。

$ sudo touch /var/log/wslpath.log
$ sudo chmod 666 /var/log/wslpath.log

wslpath の挙動の調査

上記のスクリプトで出力されたログより、

wslpath -w /var/log

が実行されているようですので、Windows Server 2019 と Windows 11 で挙動の違いを見てみます。

Windows 11

$ wslpath -w /var/log
\\wsl.localhost\fedoraremix\var\log

Windows Server 2019

$ /usr/bin/wslpath -w /var/log
/usr/bin/wslpath: /var/log: Invalid argument

また、wslpath -w が全く使えないというわけではなく、/mnt/c など Windows のパスについては Server 2019 でも正しい結果を返してきます。

$ /usr/bin/wslpath -w /mnt/c
C:\

まとめ

以前のバージョンの wslpath コマンドでは実装されていない機能を Fedora Remix for WSL 側で実行されているのが原因のようです。

本件については、Fedora Remix for WSL 側にも Issue を立てています。

根本解決がされるまではこの暫定スクリプトを仕込むしかなさそうです。

Comments

comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)