1 一、注意事项
1.1 1.默认wsl --instal,会安装在C盘
1.2 2.注意wsl和window是有挂载关系的
2 二、先干净卸载安装在C盘上的wsl
[[wsl干净卸载wsl,从C盘]]
这个过程非常直接和推荐,因为你不需要先安装到 C 盘再迁移。
我将以 Ubuntu 22.04 LTS 为例进行说明,因为它是最常用且官方支持的发行版。如果你想安装其他发行版,只需替换下载链接和文件名即可。
太好了!很高兴这次的链接可以正常工作,并且你已经开始下载 ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz 文件。
现在,我将为你提供一个完整的教程,详细说明如何使用这个文件将 Ubuntu 22.04 LTS 安装到你的 D 盘,并为机器学习做好准备。这个教程假设你已经按照之前的指示,干净地卸载了你自己的 WSL 发行版,并保留了 Docker Desktop 所需的 WSL 组件。
2.1 步骤 1:下载 Ubuntu 22.04 LTS 根文件系统
- 文件名称:
ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz - 下载链接: https://cloud-images.ubuntu.com/wsl/jammy/current/ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz
- 保存位置: 将此文件保存到
D:\temp\文件夹中。
2.2 步骤 2:在 D 盘上创建目标安装目录
这个目录将是你的 Ubuntu 22.04 LTS 发行版实际的虚拟硬盘文件(ext4.vhdx)存放的位置。
- 打开 PowerShell 或 CMD。
- 执行命令创建目录:
mkdir D:\WSL\Ubuntu_2204
- 你可以根据自己的喜好命名
Ubuntu_2204这个文件夹,例如D:\WSL\MyUbuntuForML。
2.3 步骤 3:使用 wsl --import 命令将发行版安装到 D 盘
现在,我们将使用下载的 .tar.gz 文件,将其解压并安装到你刚刚创建的 D 盘目录中。
- 打开 PowerShell 或 CMD。
- 执行导入命令:
wsl --import ubuntu2204 D:\WSL\Ubuntu_2204_ML D:\temp\ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz --version 2
Ubuntu2204:这是你给这个新 WSL 发行版起的名称。当你运行wsl -l -v时,它将显示为这个名称。你也可以将其更改为其他名称,如MyUbuntuML。D:\WSL\Ubuntu_2204_ML:这是你在步骤 2 中创建的,发行版将实际安装到的目录。D:\temp\ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz:这是你在步骤 1 中下载的.tar.gz文件的完整路径。--version 2:强烈建议使用 WSL 2,它提供了更好的性能和功能,对于机器学习任务至关重要。- 这个命令会开始解压文件并创建虚拟硬盘。这个过程可能需要几分钟,请耐心等待,直到命令行提示符再次出现。
2.4 步骤 4:创建用户、配置 systemd 和设置默认用户
导入后,新的 WSL 实例的默认登录用户将是 root。为了安全和方便,我们需要创建一个普通用户 (zhang),并配置 /etc/wsl.conf 文件来启用 systemd 并将 zhang 设置为默认登录用户。
- 彻底关闭所有 WSL 实例:
- 在 PowerShell 或 CMD 中运行此命令,确保所有 WSL 实例都已停止。这是为了让后续对
/etc/wsl.conf文件的更改能够正确生效。
wsl --shutdown
- 以
root身份启动你的ubuntu2204发行版:
- 打开 PowerShell 或 CMD,运行:
wsl -d ubuntu2204
- 你现在应该会以
root@Z-Y7000P:/mnt/c/Windows/System32#这样的提示符登录到 Ubuntu 命令行。
- 在 Ubuntu 内部创建新用户 (
zhang) 并设置密码:
adduser zhang
- 系统会提示你输入密码,并确认密码。请务必记住这个密码。
- 之后会要求你输入一些用户信息(如全名、房间号等),这些信息可以跳过,直接按回车键即可。
- 将新用户 (
zhang) 添加到sudo组:
- 为了让你的新用户能够执行管理员命令(例如安装软件),需要将其添加到
sudo组。
usermod -aG sudo zhang
- 使用
nano编辑器创建或编辑/etc/wsl.conf文件:
- 这个文件是 WSL 的配置文件,我们将在这里启用
systemd和设置默认用户。
sudo nano /etc/wsl.conf
- 如果文件不存在,
nano会为你创建一个新文件。 - 如果文件已存在,它会打开文件进行编辑。
- 添加或修改以下内容:
- 在文件中添加以下内容。如果文件已存在,请确保这些行是正确的,并且没有冲突的设置。
[boot]
systemd=true[user]
default=zhang
[boot]部分的systemd=true明确告诉 WSL 在启动时启用systemd。[user]部分的default=zhang将zhang设置为默认登录用户。
- 保存并退出编辑器:
- 如果你使用
nano:按Ctrl + O(保存),然后按Enter确认文件名,最后按Ctrl + X(退出)。
- 退出 WSL 实例:
在 Ubuntu 命令行中输入exit:
exit
- 你将返回到 Windows 的 PowerShell 或 CMD 命令行。
为了让 /etc/wsl.conf 的更改生效,你需要再次完全关闭所有 WSL 实例,然后重新启动你的发行版。
- 打开 PowerShell 或 CMD。
- 运行关闭命令:
wsl --shutdown
- 这会关闭所有正在运行的 WSL 实例,包括 Docker Desktop 的。
- 重新启动你的
ubuntu2204发行版:
- 现在,当你再次启动
ubuntu2204时,它应该会以zhang作为默认用户登录,并且systemd应该能正常启动。
wsl -d ubuntu2204
如果一切顺利,你现在应该会看到 zhang@Z-Y7000P:~$ 这样的提示符,并且不会再看到 systemd 的错误信息了。
2.5 步骤 5:清理临时文件
安装成功并确认一切正常后,你可以删除之前下载的 .tar.gz 文件,以释放临时空间。
- 在文件资源管理器中导航到
D:\temp\文件夹。 - 删除
ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz文件。
2.6 步骤 6 :设置wsl为wsl -d ubuntu2204 直接默认用wsl就能启动自己装的2204
wsl --set-default ubuntu2204
2.7 步骤7:更改默认路径,从window路径改到linux自己的路径
我发现 进入后,默认路径其实是我window的路径 他能操作我window的文件
- 代码和数据: 将你的机器学习代码、数据集、Python 环境等都放在
/home/zhang/或其他 Linux 原生文件系统路径下。 - 访问 Windows 文件: 如果确实需要访问 Windows 文件,可以通过
/mnt/c/等路径进行,但尽量避免在这些路径下进行大量文件操作。 - VS Code Remote - WSL: 如果你使用 VS Code 进行开发,它的 Remote - WSL 扩展会自动将你的工作区映射到 WSL 内部,并提供良好的性能。
2.7.1 解决方法——修改 ~/.bashrc 文件
- 无法通过配置 Ubuntu 内部的
/etc/wsl.conf文件来"直接"指定 WSL 启动时所在的初始目录。/etc/wsl.conf文件不支持defaultCwd这个键。 - (进入wsl后,不是powershell里或者进入powershell之前)可以通过修改你 Ubuntu 用户(
zhang)的 Shell 配置文件 (~/.bashrc或~/.profile) 来实现这个效果。当你的 Shell 启动时,这些文件会被执行,你可以在其中加入cd命令。 - 编辑~/.bashrc文件
nano ~/.bashrc
- 滚动到最后一行,添加
cd ~
- 然后exit退出,wsl --shutdown 重启
3 三、其他基于wsl特性的操作建议
3.1 意外删除/修改 Windows 文件 (最直接的风险)
- 谨慎使用
sudo和rm: 在 Linux 中,sudo赋予你管理员权限,rm -rf是一个非常危险的命令。在执行任何涉及/mnt路径的删除或修改操作时,务必再三确认当前目录和目标路径。 - 将项目文件放在 WSL 原生文件系统: 强烈建议将你的所有开发项目、代码、数据集等都放在 WSL 的 Linux 原生文件系统内部(例如
/home/zhang/),而不是/mnt/c或/mnt/d。这样可以避免在 Windows 文件系统上进行大量操作,从而降低误操作的风险,同时还能获得更好的性能。 - 设置默认启动目录: 按照我们之前讨论的,通过 Windows 终端设置
startingDirectory到/home/zhang,可以减少你意外在 Windows 路径下开始操作的机会。 - 备份: 定期备份你的重要数据,无论是 Windows 上的还是 WSL 内部的。
3.2 2.资源消耗过高 (性能风险)
WSL 2 在轻量级虚拟机中运行。如果 WSL 内部的 Linux 进程出现内存泄漏、CPU 占用过高或磁盘 I/O 密集型操作失控,可能会消耗大量的 Windows 系统资源,导致 Windows 运行缓慢甚至卡死。
- 监控资源: 在 Windows 任务管理器中,你可以看到 WSL 相关的进程(例如
Vmmem进程),监控它们的资源使用情况。 - 限制 WSL 资源 (高级): 你可以通过创建
C:\Users\<你的Windows用户名>\.wslconfig文件来限制 WSL 2 虚拟机的内存和 CPU 使用。例如:
[wsl2]
memory=4GB # 限制内存为 4GB
processors=2 # 限制 CPU 核心数为 2
- 修改后需要运行
wsl --shutdown使其生效。 - 及时关闭不用的 WSL 实例: 当你不再使用 WSL 时,运行
wsl --shutdown可以释放所有资源。
3.3 内存限制:如果不限制,WSL 会使用多少内存?
- 默认行为: 如果你不通过
.wslconfig文件对 WSL 2 虚拟机进行内存限制,它会默认使用动态分配的内存。这意味着 WSL 2 虚拟机启动时只占用少量内存,然后会根据 Linux 内部运行的应用程序的需求,动态地增加其内存使用量,最高可达你 Windows 总内存的 80%。 - 示例: 如果你的 Windows 电脑有 16GB 内存,WSL 2 虚拟机理论上最高可以使用大约 12.8GB 内存。
- 影响: 这种动态分配机制通常是高效的,但如果你的机器学习任务需要大量内存,并且你同时在 Windows 上运行其他内存密集型应用程序,可能会导致 Windows 和 WSL 之间争抢内存,最终导致整个系统变慢或卡顿。
3.4 4.怎么限制CPU内存?
3.4.1 (1)打开该路径
C:\Users\738354\
3.4.2 (2)在文件中输入以下格式的配置(以纯文本保存,无需扩展名)
文件命名为:.wslconfig
[wsl2]
memory=8GB
- memory 参数指定最大内存分配,支持 GB 或 MB 单位(如 2GB 或 2048MB)。
- 您还可以添加其他参数,例如 processors=2(限制 CPU 核心数)或 swap=0(禁用交换空间),以进一步优化资源。
3.4.3 (3)文件保存后重启wsl
wsl --shutdown
3.5 机器学习场景下,有必要限制内存和 GPU 吗?
- 内存限制 (推荐考虑):
- 有必要。 对于机器学习任务,尤其是训练大型模型时,内存消耗巨大。如果你的 Windows 内存是 16GB,而你同时在 Windows 上运行浏览器、IDE 等,WSL 占用 80% 内存可能导致 Windows 卡顿。
- 建议: 如果你的 Windows 总内存是 16GB,可以考虑将 WSL 内存限制在 8GB 到 12GB 之间,具体取决于你 Windows 端需要保留多少内存。
两个系统都需要各自的组件,但它们协同工作。Windows 驱动提供底层支持,Linux CUDA Toolkit 提供开发和运行时环境。你不能直接在 WSL 中使用 Windows 安装的 CUDA Toolkit,反之亦然。
