get.ipc
我在 Ubuntu 20 子系统上运行一些软件,在主目录中创建一些数据文件和套接字文件:
但是,如果我使用另一个数据位置/mnt/i
(例如,I:
另一个 NTFS 卷在哪里)运行该软件,该软件会创建其数据文件,但无法创建显示错误消息的“get.ipc”文件
Fatal: Error starting protocol stack: listen unix /mnt/i/.ethereum/geth.ipc: bind: invalid argument
我/mnt/c
得到了同样的结果。
主文件夹(即C:\Users\D-Ef\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\def
)和I:
文件夹之间有什么区别?
例如,主文件夹是否有可能具有一些允许创建套接字文件的特殊权限?如何检查这个?
我尝试/mnt/i/.ethereum
使用类似的命令从我的主目录创建一个符号链接
ln -s /mnt/i/.eth/ /home/def/.eth
但这无济于事。
LocalState
具有以下附加权限,但尚不清楚它是什么:
您尝试创建的文件类型称为 Unix 套接字(类型
AF_UNIX
或AF_LOCAL
)。那是位于文件系统中的套接字。WSL 支持 Unix 套接字。它必须这样做,因为许多 Linux 程序都需要它们才能工作。在最近的版本中,Windows也支持 Unix 套接字。但是,这两种类型是不兼容的。
如果您使用带有 WSL 程序的 Unix 套接字,则需要在 Linux 文件系统区域中创建它。这意味着它不应该在
/mnt/<drive>
. 如果您在 Windows 程序中使用 Unix 套接字,则该 Windows 程序应在 WSL 区域之外创建它。不同之处在于 WSL 使用的 Linux 文件系统区域支持正确的 POSIX 语义:区分大小写、任意字节文件名、Unix 套接字、POSIX 权限、悬空符号链接等。Windows 使用的标准 NTFS 区域不支持这些东西,因此不能用于存储 WSL 创建和使用的 Unix 套接字。WSL 中指定的所有驱动器
/mnt/<drive>
都是 Windows 驱动器,因此不适合 WSL Unix 套接字。