docs/zh_cn/tutorials/juicefs_on_wsl.md
WSL 全称 Windows Subsystem for Linux,即适用于 Linux 的 Windows 子系统。它可以让你在 Windows 系统环境下运行大多数 GNU/Linux 原生命令、工具和程序,且不必像用虚拟机或双系统那样产生额外的硬件开销。
使用 WSL 要求必须是 Windows 10 2004 以上或 Windows 11。
查看当前系统的版本,可以通过组合键 <kbd>Win</kbd> + <kbd>R</kbd> 唤出运行程序,输入并运行 winver。
确认 Windows 版本以后,以管理员身份打开 PowerShell 或 Windows 命令提示符,运行安装命令:
wsl --install
该命令会下载最新的 Linux 内核,安装并将 WSL 2 作为默认版本,并安装 Linux 发行版(默认为 Ubuntu)。
也可以直接指定要安装的发行版:
wsl --install -d ubuntu
:::tip 提示
wsl --list --online 命令可以查看所有可选的发行版。
:::
WSL 安装完成以后,即可在开始菜单找到新安装的 Linux 发行版。
点击 Ubuntu 子系统的快捷方式,WSL 会打开 Linux 子系统的终端。初次运行会要求设置管理 Linux 子系统的用户和密码,根据提示设置即可。
这里设置的用户名和密码有以下几点需要注意:
sudo 命令;在 WSL 中使用 JuiceFS,即是在 Linux 系统中使用 JuiceFS,这里以社区版为例进行介绍。
执行命令,在 Linux 子系统中安装 JuiceFS 客户端:
curl -sSL https://d.juicefs.com/install | sh -
JuiceFS 是数据与元数据分离的分布式文件系统,通常用对象存储作为数据存储,用 Redis、PostgreSQL 或 MySQL 作为元数据存储。这里假设已经准备了如下材料:
查看「JuiceFS 支持的数据存储」
https://myjfs.oss-cn-shanghai.aliyuncs.comABCDEFGHIJKLMNopqXYZZYXwvutsrqpoNMLkJiHgfeDCBA查看「JuiceFS 支持的元数据引擎」
myjfs-sh-abc.redis.rds.aliyuncs.com:6379mypassword将私密信息写入环境变量:
export ACCESS_KEY=ABCDEFGHIJKLMNopqXYZ
export SECRET_KEY=ZYXwvutsrqpoNMLkJiHgfeDCBA
export REDIS_PASSWORD=mypassword
创建名为 myjfs 的文件系统:
juicefs format \
--storage oss \
--bucket https://myjfs.oss-cn-shanghai.aliyuncs.com \
redis://myjfs-sh-abc.redis.rds.aliyuncs.com:6379/1 \
myjfs
把数据库密码写入环境变量:
export REDIS_PASSWORD=mypassword
:::note 注意 对象存储的 API 密钥信息仅在创建文件系统时需要设置,一旦文件系统创建成功,相应的密钥信息会被写入数据库,JuiceFS 客户端会在挂载文件系统时自动从数据库中读取,无需重复设置。 :::
挂载文件系统到用户家目录下的 mnt:
sudo juicefs mount -d redis://myjfs-sh-abc.redis.rds.aliyuncs.com:6379/1 $HOME/mnt
如果需要从 Windows 系统访问 Linux 子系统中挂载的 JuiceFS 文件系统,在资源管理器左侧列表中找到 Linux 子系统,然后找到并打开挂载点路径即可。
有关 JuiceFS 使用方面的更多内容请查阅官方文档。
WSL 打通了 Windows 与 Linux 子系统,允许二者相互访问彼此系统中存储的文件。
但需要注意,从 Windows 访问 Linux 子系统或从 Linux 子系统访问 Windows 势必会因系统之间的转换而产生一定的性能开销。因此,推荐的做法是根据程序所在的系统来决定文件存储的位置,对于 Linux 子系统中的程序,它要处理的文件也应该存储在 Linux 子系统中性能才更理想。
在 Linux 子系统中,WSL 将 Windows 的各个盘符挂载到了 /mnt,比如 C: 盘在 Linux 子系统中的挂载点是 /mnt/c。
为了保证性能最优,在 WSL 中使用 JuiceFS 时,不论存储还是缓存路径都应设置在 Linux 子系统中。换言之,应该避免把存储或缓存设置在 /mnt/c 类似的 Windows 分区挂载点上。
通过使用 JuiceFS 自带的 bench 基准测试工具,结果显示,将文件系统挂载到 Windows(如 /mnt/c)的性能要比挂载到 Linux 子系统内部(如 $HOME/mnt)低 30% 左右。
当通过 Windows 资源管理器拷贝文件到 Linux 子系统时,WSL 会自动为每个文件附加一个带有 Zone.Identifier 标识的同名文件。这是 NTFS 文件系统的一种安全防护机制,意在对外部文件的来源进行跟踪,但对于 WSL 来说,这个功能应该属于 bug 且已经有人在 GitHub 上向微软开发团队反馈 #7456。
受此问题影响,通过 Windows 资源管理器向 Linux 子系统中挂载的 JuiceFS 文件系统存入文件时也会出现同样的问题。但在 Linux 子系统内部读写 JuiceFS 文件系统不受该 bug 的干扰。