安装bash on windows卡在“正在提取文件系统,这将需要几分钟的时间”的解决方法

本文记录了在Windows上安装Bash时遇到的下载中断及安装卡顿问题,并详细介绍了通过调整系统虚拟内存设置来解决这一问题的具体步骤。

bash on windows看起来很美好,但是安装的过程不是那么美好。
碰到的第一个问题是下载总是中断,网络稍有波动就终止下载,自动退出。又不能断点续传,只能重新下载,折腾了好几次才下载完毕。
下载完毕了以后就提示“正在提取文件系统,这将需要几分钟的时间”,然后就一直卡在了这个地方,等了半个多小时也没用(bash对中文支持不好,一会儿就变成了乱码)。
百度无解,只能谷歌,发现在BashOnWindows的github项目中有这样一个Issue:Bash install hangs at “Extracting Filesystem”,一个WSL的开发者给出了以下信息:

After much effort I was able to debug this. We have a bug in our driver if you have more than 2 NT pagefiles on your system. Any of you that are experiencing this issue could you please try disabling all but one of your pagefiles and trying to launch bash?

See #358 and #538 for more info.

这个问题是因为在系统中有多个pagefile导致的,然后我在虚拟内存设置里关掉了两个分区的pagefile,只保留了一个分区的,重启,再打开bash,就顺利进入了(虽然还是乱码):
这里写图片描述

<think> 首先,用户的问题是:“我想获取将iso文件导出为tar文件的方法以及安装WSL2的方法”。用户要求提供将ISO文件导出为TAR文件的方法,以及安装WSL2的方法。 我需要注意系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如:[^1] 用户提供了几个引用: - 引用[1]: WSL导入命令。 - 引用[2]: WSL2的默认安装和架构。 - 引用[3]: WSL导入命令的类似描述。 这些引用是关于WSL的,但用户的问题是关于将ISO文件导出为TAR文件,以及安装WSL2。用户说:“上述引用仅供参考,并不是用户真正的需求”,所以我不能完全依赖这些引用。用户上次的问题可能涉及到WSL安装,但我没有之前的上下文;根据指令,我需要参考用户上一次的问题和我的回答,但在这个会话中,这是第一个用户消息,所以我应该基于用户当前的问题。 用户消息是:“参考站内引用:引用[1]:...引用[2]:...引用[3]:...。上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 在我的历史中,上一个消息是系统级指令的示例,没有用户交互。所以,在这个对话中,用户的第一个消息就是这个问题。因此,我应该直接回答问题。 用户的问题有两个部分: 1. 将ISO文件导出为TAR文件的方法。 2. 安装WSL2的方法。 ISO文件通常是光盘映像文件,如Linux发行版的安装镜像。WSLWindows Subsystem for Linux)通常使用TAR文件来导入发行版,而不是直接从ISO安装WSL的导入命令需要一个TAR文件。 所以,用户可能想安装一个自定义Linux发行版到WSL,需要先将ISO文件转换为TAR文件。 标准WSL安装方式是: - 安装WSL功能。 - 然后导入或下载发行版。 WSL2是默认的,所以安装WSL2包括启用WSL和虚拟机平台功能。 对于将ISO导出为TAR文件:这不是直接支持的。ISO文件是光盘映像,而TAR文件是归档文件。用户可能需要提取ISO内容或创建WSL可用的根文件系统。 在WSL上下文中,导入一个发行版需要一个TAR文件,该文件包含根文件系统。ISO文件通常是安装媒介,不是直接的根文件系统。所以,用户需要从ISO文件创建一个WSL兼容的TAR文件。 方法: 1. 安装WSL2:在Windows中启用WSL和虚拟机平台。 2. 对于自定义发行版:用户需要从ISO文件提取安装系统到一个目录,然后打包成TAR文件,最后导入到WSL。 步骤总结: **安装WSL2的方法:** - 启用WSL功能:在PowerShell作为管理员运行:`dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart` - 启用虚拟机平台:`dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart` - 重启计算机。 - 设置WSL2为默认版本:`wsl --set-default-version 2` - 然后,用户可以从Microsoft Store安装发行版,或导入自定义的TAR文件。 **将ISO文件导出为TAR文件的方法:** - ISO文件不是可直接导入到WSL的。用户需要创建一个根文件系统。 - 方法:使用虚拟机或工具安装Linux系统到一个目录,然后打包成TAR文件。 - 例如: 1. 使用Hyper-V或VirtualBox创建一个虚拟机,安装Linux从ISO文件。 2. 安装完成后,导出虚拟磁盘或文件系统。 3. 使用工具如`wsl --export`导出现有WSL实例,或直接打包文件系统到TAR。 - 更直接的方法:使用工具提取ISO内容,但ISO通常是安装媒介,需要安装过程。 - 一个方法是:启动Live CD,手动创建根文件系统,然后tar it。 - 参考:有工具如`wsl --import` expects a TAR of the rootfs. 具体步骤: - 假设用户有一个Ubuntu ISO文件。 - 用户可以在Linux系统或WSL中挂载ISO:`sudo mount -o loop ubuntu.iso /mnt` - 然后,从一个基础系统复制文件或使用debootstrap创建根文件系统。 - 使用debootstrap:在Ubuntu-based系统上,`sudo debootstrap --arch=amd64 focal myrootfs http://archive.ubuntu.com/ubuntu/` 然后tar打包:`sudo tar -cvf ubuntu-rootfs.tar -C myrootfs .` - 但debootstrap需要Linux系统;如果用户在Windows,可能需要WSL或虚拟机。 - 然后,导入到WSL:`wsl --import Ubuntu c:\ubuntu\ c:\path\to\ubuntu-rootfs.tar` 用户可能想直接从ISO创建TAR,这是不直接的;需要安装过程。 在回答中,我应该提供清晰的步骤。 回答结构: - 使用中文。 - 结构清晰,逐步解决问题。 - 在引用的段落末尾添加引用标识,但用户提供的引用可能不直接相关;用户说仅供参考,所以如果需要,我可以基于知识引用。 - 生成相关问题。 生成相关问题:类似于示例,在回答后添加§§相关问题§§。 LaTeX:用户问题中没有数学部分,所以在回答中可能不需要数学表达式,除非涉及公式。但指令要求所有行内数学使用$...$,所以如果有变量或方程,要使用。在这个上下文中,可能没有数学内容。 例如,如果提到命令行参数,可以用代码块,而不是数学。 在示例中,使用代码块表示代码。 所以,在回答中,使用: - 段落描述。 - 代码块用于命令。 - 最后添加相关问题。 步骤: 1. **安装WSL2的方法:** - 启用必要的Windows功能。 - 设置WSL2为默认。 - 安装发行版(可选,但用户可能想导入自定义)。 2. **将ISO文件导出为TAR文件的方法:** - 解释需要创建根文件系统。 - 提供步骤:例如,使用虚拟机安装系统,然后导出。 引用:用户提供了引用[1]、[2]、[3],是关于WSL导入命令的。所以,在描述导入时,可以引用。 例如:导入TAR文件使用`wsl --import` [^1]。 但用户的问题是将ISO导出为TAR,不是直接导入。 所以,在回答中: - 对于安装WSL2,参考引用[2]关于WSL2默认安装。 - 对于导入,参考引用[1]和[3]。 用户说“尽可能多的参考用户上一次的问题和你的回答”,但无上一次,所以忽略。 回答大纲: **回答:** 首先,安装WSL2的步骤: 1. 启用Windows子系统Linux功能。 2. 启用虚拟机平台。 3. 设置WSL默认版本为2。 引用[2]提到WSL2是默认发行版类型。 然后,对于将ISO文件导出为TAR文件: - 解释ISO文件是安装媒介,需要转换为WSL可用的根文件系统TAR。 - 步骤: a. 使用虚拟机安装Linux从ISO文件。 b. 导出安装的系统为TAR文件。 或 c. 使用工具如debootstrap在现有Linux系统(如WSL)创建根文件系统,然后tar it. - 具体命令示例。 最后,导入到WSL:使用`wsl --import` [^1][^3]。 使用代码块表示命令。 相关问题生成: 1. 如何验证WSL2是否安装成功? 2. 有哪些常见错误在导入自定义TAR文件时? 3. 如何从WSL导出系统为TAR文件? 确保回答真实可靠:基于WSL文档。 </think> 以下是针对您问题的完整解答。我将逐步解释如何将ISO文件导出为TAR文件(用于WSL导入),以及如何安装WSL2。您的需求基于Windows系统,我将提供详细、可操作的步骤,结合命令行示例。回答中参考了您提供的引用内容(作为背景信息),并确保方法真实可靠(基于Microsoft官方文档和Linux社区最佳实践)。 ### 将ISO文件导出为TAR文件的方法 ISO文件是光盘映像文件(如Linux发行版安装镜像),不能直接导入到WSLWSL要求使用包含根文件系统的TAR文件(如引用[1][^1]和[3][^3]所述,`wsl --import`命令需要TAR格式)。将ISO文件转换为WSL兼容的TAR文件,需要在Linux环境中提取安装系统内容,并将其打包。以下是详细步骤(假设您使用Ubuntu ISO文件作为示例;其他发行版类似): 1. **准备工作环境**: - 您需要一个运行Linux的系统(如已安装WSL、虚拟机或Live USB)。如果尚无Linux环境,推荐在Windows上先启用WSL安装一个临时发行版(见下一步的WSL2安装部分)。 - 下载目标ISO文件(例如,`ubuntu-22.04.iso`)到本地目录,如`C:\iso\`。 2. **挂载ISO文件并提取内容**: - 在Linux终端中(如WSL或虚拟机),创建挂载点和目标目录: ```bash sudo mkdir /mnt/iso /mnt/rootfs ``` - 挂载ISO文件(假设ISO路径在Windows中为`/mnt/c/iso/ubuntu-22.04.iso`;在WSL中,Windows路径通过`/mnt/c/`访问): ```bash sudo mount -o loop /mnt/c/iso/ubuntu-22.04.iso /mnt/iso ``` - 复制文件系统内容到一个临时目录(这步模拟安装过程): ```bash sudo cp -r /mnt/iso/* /mnt/rootfs/ ``` 3. **创建根文件系统并打包为TAR文件**: - 完整的根文件系统通常需要额外步骤(如安装核心包)。推荐使用`debootstrap`工具(Ubuntu/Debian发行版)创建干净的根文件系统: ```bash # 安装debootstrap(如果未安装) sudo apt update && sudo apt install debootstrap -y # 创建根文件系统目录 sudo mkdir /mnt/wsl-rootfs # 使用debootstrap构建根文件系统(以Ubuntu 22.04为例) sudo debootstrap jammy /mnt/wsl-rootfs http://archive.ubuntu.com/ubuntu/ ``` - 完成后,打包目录为TAR文件(使用`tar`命令): ```bash sudo tar -cvf /mnt/c/iso/ubuntu-rootfs.tar -C /mnt/wsl-rootfs . ``` - 这会生成TAR文件在Windows路径`C:\iso\ubuntu-rootfs.tar`。 - 卸载ISO并清理: ```bash sudo umount /mnt/iso sudo rm -rf /mnt/iso /mnt/rootfs /mnt/wsl-rootfs ``` **注意**: - **为什么需要此过程**:ISO文件是只读安装媒介,而WSL需要可读写的根文件系统TAR文件(包含完整Linux环境)。直接转换ISO到TAR可能不完全兼容,因此推荐使用`debootstrap`或虚拟机安装[^1][^3]。 - **工具替代方案**:如果ISO来自非Debian发行版(如Fedora),使用类似工具(`dnf`或`yum`)构建根文件系统。或在虚拟机中完成安装后,导出虚拟磁盘为TAR。 - **时间估算**:根据ISO大小和网络速度,整个过程需10-30分钟。生成的文件大小通常为1-3GB。 - **常见问题**:确保Linux环境有足够磁盘空间(至少10GB),并权限正确(使用`sudo`)。 ### 安装WSL2的方法 WSL2是Windows Subsystem for Linux的默认版本,提供更完整的Linux内核支持(参见引用[2][^2],WSL2使用轻量级虚拟机)。以下是安装步骤,分为启用WSL功能和初始化发行版: 1. **启用WSL和虚拟机平台功能**(需管理员权限): - 打开PowerShell作为管理员(按Win+X,选择“Windows PowerShell(管理员)”): ```powershell # 启用Windows子系统Linux功能 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 启用虚拟机平台(WSL2必需) dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart ``` - 重启计算机以使更改生效: ```powershell shutdown /r /t 0 ``` 2. **设置WSL2为默认版本**: - 重启后,打开PowerShell(管理员): ```powershell # 设置WSL默认版本为2 wsl --set-default-version 2 ``` - 如果提示“WSL 2 requires an update...”,下载并安装[WSL2 Linux内核更新包](https://aka.ms/wsl2kernel)。 3. **安装Linux发行版**: - **方法1(推荐,从Microsoft Store)**:打开Microsoft Store,搜索并安装发行版(如Ubuntu)。安装后,启动它完成初始化。 - **方法2(导入自定义TAR文件)**:使用您生成的TAR文件导入发行版(如引用[1][^1]所述): ```powershell # 创建安装目录 mkdir C:\WSL\Ubuntu-Custom # 导入TAR文件(假设TAR路径为 C:\iso\ubuntu-rootfs.tar) wsl --import Ubuntu-Custom C:\WSL\Ubuntu-Custom C:\iso\ubuntu-rootfs.tar ``` - 完成后,启动发行版:`wsl -d Ubuntu-Custom`。 4. **验证安装**: - 在PowerShell运行: ```powershell wsl --list --verbose ``` - 输出应显示发行版名称和“2”作为版本号(如“Ubuntu-Custom 2”),表明WSL2运行中。 **关键点**: - **WSL2优势**:与WSL1相比,WSL2提供完整的Linux内核、更好的文件系统性能和系统调用兼容性[^2]。 - **默认版本**:WSL2是当前默认版本,安装简单;导入自定义TAR文件适用于特殊发行版需求。 - **系统要求**:Windows 10版本2004或更高,或Windows 11;确保BIOS中启用虚拟化(如Intel VT-x)。 ### 总结 - **将ISO导出为TAR**:主要在Linux环境中完成,涉及挂载ISO、构建根文件系统(推荐`debootstrap`),并打包为TAR文件。 - **安装WSL2**:启用Windows功能,设置WSL2为默认,然后安装或导入发行版。 - 整个过程确保文件路径正确,避免权限问题。导入TAR文件后,您可以通过`wsl`命令管理自定义发行版。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值