# 前言

之前在自己的笔记本上安装过 WindowsLinux 子系统。最近新配置了一台台式机,又需要重新配置,在过程中也稍稍遇到了一些问题,在这里记录下来以备后续的使用。

# 安装 WSL2

这里的安装过程全程参照了这个链接的内容👉:戳此链接

这里以其教程作为主要参考,并补充安装过程中遇到的问题的解决方式。

# 开启 Hyper-VLinux 子系统服务

要安装子系统,首先需要开启相应的 Windows 系统的功能:

  • Hyper-V 服务
  • Linux 子系统服务

在管理员权限的 Powershell 中执行以下两条命令进行开启:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

如果以上指令无法成功,也可以在开始菜单搜索 启用或关闭 Windows 功能 ,并在其中勾选 Hyper-V适用于 Windows 的 Linux 子系统 服务。之后根据提示重启电脑。

# 移动 WSL2 位置

电脑重启后,运行安装好的子系统,我安装的是 Ubuntu 子系统。

子系统默认安装在 C 盘,这使得本就不宽裕的硬盘空间雪上加霜,因此这里对子系统的安装位置进行修改。这里参考的是一个问答中提供的答案[1]

第一步,使用指令导出子系统文件:

# Export Ubuntu
wsl --export Ubuntu D:\backup\ubuntu.tar

其中, Ubuntu 是子系统的名称,可以通过 wsl --list 指令进行查看。后续的路径则是子系统文件的导出位置,根据需要进行修改。

第二步,注销原来的子系统:

# Unregister the same distribution to remove it from the C: drive:
wsl --unregister Ubuntu

这里仍然需要注意不要输错了子系统的名称。

第三步,导入第一步中导出的子系统文件:

# Import Ubuntu
wsl --import Ubuntu D:\wsl\ D:\backup\ubuntu.tar

在导入之后,子系统默认是使用的 root 用户登录,如果需要修改,可以进入 cd %userprofile%\AppData\Local\Microsoft\WindowsApps 路径,运行命令:

ubuntu config --default-user <username>

%userprofile% 表示的是用户的文件路径,一般是 C:Users\<windows-log-name> 。如果找不到 AppData 文件夹,看看是否启用了隐藏文件可见。

然后指令中的 <username> 是指在第一次运行子系统时输入的用户名。执行完成之后,子系统默认使用普通用户进行登录。

# 安装 Node.js 服务

之后本想尝试在子系统下使用 Node.js 来运行博客,但是后来发现子系统的文件 I/O 速度相比原生系统还是太慢,这里还是选择在 Windows 下使用 Node.js 来运行博客的的后台服务。下文内容暂且保留以备不时之需。

# 安装 n 管理 Node.js 版本

在文章开头提到的子系统安装链接中,提到了使用 n 来管理 Node.js 的版本。由于直接使用官网[2]的命令安装无法成功获取脚本,因此仍然选择通过浏览器访问脚本文件,并在本地文件夹创建相应的脚本,在其中粘贴从浏览器复制的脚本内容。之后运行以下指令:

bash n lts

以上指令可能需要使用 sudo 权限。
运行之后使用 node --versionnpm --version 确认是否安装成功。

安装完成后, node 命令运行正常,但是 npm 命令遇到了以下错误:

/usr/bin/env: ‘bash\r’: No such file or directory

这里参考了此链接解决。按照其中被采纳的答案,创建 /etc/wsl.conf 文件,并在其中添加以下内容:

[interop]
appendWindowsPath = false

然后在 Powershell 中使用 wsl --shutdown 关闭子系统,之后重新打开,运行 bash n lts 安装命令。之后 npm --version 命令能够正常显示。

# 安装 yarn

接下来,使用 npm 安装 yarn 进行包管理。相比于原生的 npm ,该工具更加现代。使用如下命令安装 yarn

npm install -g yarn

运行 yarn --version ,成功输出版本信息则安装成功。

# 结合 yarn 安装 Hexo

之后,参考一篇博客的内容[3],使用 yarn 安装 Hexo 服务。

使用如下指令安装 hexo

yarn add hexo-cli -g

以上指令执行后,运行 hexo -v 如果返回版本等信息,则说明安装成功。

在这里,我碰到了无法运行 hexo 的问题,尝试过参考 StackOverflow 中的答案[4]使用 yarn global add hexo-cli 安装,仍然无法解决该问题。

后来发现,需要在环境变量添加 yarn 的相关路径,具体参考此链接,使用如下指令添加:

export PATH="$(yarn global bin):$PATH"

之后可以成功运行 hexo 命令。

# 卸载

由于子系统的文件 I/O 过于缓慢,因此最后还是放弃在子系统中运行 Hexo 相关的服务。对于安装的上述软件,使用以下指令删除:

# 删除 n 包管理器
sudo bash n uninstall
# 查找 yarn 和 node_modules 等残留文件
# 以下例子表示查找包含 yarn 名称的文件,过滤 /mnt/ 开头的路径,这部分是 Windows 系统中的文件
locate '*yarn*' | grep -v '/mnt/'

找到路径后,使用 rm 删除相关的文件即可。


  1. https://superuser.com/questions/1550622/move-wsl2-file-system-to-another-drive ↩︎

  2. n 的官方 GitHub 仓库 ↩︎

  3. 【Hexo】②如何使用 Hexo 和 GitHub 搭建个人博客 ↩︎

  4. Failed to install hexo-cli on mac ↩︎