Windows11安装Linux子系统,并实现服务自启动,局域网访问,磁盘挂载

2023-10-30


环境:windows 11 专业版

一、准备工作

在安装Linux子系统之前,需要开启Windows功能,开启步骤如下:

  • 打开控制面板
  • 点击程序
  • 点击程序和功能->启用或关闭Windows功能
  • 在弹出的界面中勾选适用于Linux的Windows子系统
  • 勾选Hyper-V(如果需要桥接网络则需要开启)
  • 在这里插入图片描述

注:桥接网络可以使得Linux子系统与windows在同一个网段中,从而使得局域网站中的其他电脑可以直接访问Linux子系统中的服务。

完成后重启电脑

二、安装Linux子系统(wsl2)

  • 打开Microsoft store

  • 搜索Windows Subsystem for Linux点击获取(Windows Subsystem for Linux允许开发人员直接在Windows上运行GNU/Linux环境(包括大多数命令行工具、实用程序和应用程序),无需修改,无需传统虚拟机或双引导设置的开销。)
    在这里插入图片描述

  • 安装完成后继续搜索Linux,选择自己需要的Linux发行版安装

  • 在这里插入图片描述

等待成功安装后,在开始->所有程序中就能看到对应的Linux子系统了,初次运行需要输入用户名和密码。

三、为Linux子系统设置桥接网络

桥接网络需要安装的为wsl2,默认情况下新安装的一般都为wsl2,可通过在cmd或PowerShell中输入命令wsl -l -v来检查当前wsl的版本

检查wsl版本

若当前版本为wsl1,则需要先更新wsl

  • 更新wsl --update
  • 检查版本wsl --version
  • 输入如下内容
WSL version: 0.70.0.0
Kernel version: 5.15.68.1
WSLg version: 1.0.45
MSRDC version: 1.2.3575
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22621.675
  • 使用wsl --set-version <distro name> 2 命令将 <distro name> 替换为要更新的 Linux 发行版的名称。 例如,wsl --set-version Ubuntu-20.04 2 会将 Ubuntu 20.04 发行版设置为使用 WSL 2。
  • 关闭wslwsl --shutdown

在 Hyper-V 管理器中创建虚拟交换机

  • 运行 Hyper-V 管理器

    • 在左侧选择您的电脑
    • 在右侧选择虚拟交换机管理器
    • 在管理器中选择“新建虚拟网络交换机”
    • 在右侧选择“外部”
    • 然后单击“创建虚拟交换机”
    • 在“名称:”下输入独特的名称,例如“WSL_external”
    • 确保选择确切的物理适配器(WiFi、LAN 等),并且由于这很可能是您唯一的适配器,因此选中“允许管理操作系统共享此网络适配器”下的复选框
    • 申请、是、确定
    • 在这里插入图片描述
      在这里插入图片描述

    创建 WSL 配置文件

    • 在 PowerShell 提示符下,继续(如果出现错误,则需要以管理员方式打开)
    cd ~
    New-Item .wslconfig
    .\.wslconfig
    
    • 选择文本编辑器以打开文件
    • 如果你忘记了你的虚拟交换机的名称,请在PowerShell中运行以下命令:
    Get-VMSwitch -SwitchType External | Select Name, SwitchType, NetAdapterInterfaceDescription, AllowManagementOS
    
    • 我的电脑输出示例:
    Get-VMSwitch -SwitchType External | Select Name, SwitchType, NetAdapterInterfaceDescription, AllowManagementOS
    
    Name         SwitchType NetAdapterInterfaceDescription                                     AllowManagementOS
    ----         ---------- ------------------------------                                     -----------------
    WSL_external   External Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)              True
    
    • 现在像这样添加到您的文件文本中:.wslconfig
    [wsl2]
    networkingMode=bridged
    vmSwitch=WSL_external
    

注意,.wslconfig文件的名称一定不能错误,否则可能导致配置不生效

当然还可以在配置文件中指定分配的cpu核数和内存大小等,详细信息请见官方文档

WSL 中的高级设置配置 | Microsoft Learn

启动wsl

  • 执行wsl即可启动,若系统安装了多个发行版,则需要指定发行版的名称,如wsl -d Ubuntu
  • 检查网络,在终端中输入ifconfig检查IP地址是否和Windows在同一网网段中
  • 新开一个cmd窗口,输入ping xx.xx.xx.xx其中xx.xx.xx.xx为上述命令显示的ip地址,例如192.168.1.6,检查是否能够正常连接
  • 关闭Linux子系统并重新启动,它应该保持相同的ip地址
exit
wsl --shutdown
wsl
ifconfig

四、设置Windows开机自启动Linux子系统服务

  • 进入需要自启动服务的wsl发行版中,创建并编辑/etc/init.wsl文件
sudo vim /etc/init.wsl #执行命令创建并打开文件
#输入以下内容
#! /bin/sh
/etc/init.d/ssh $1
#保存并退出

在文件中,我们启动了ssh服务,如果需要启动其他服务也可以添加到文件中,一行启动一个服务

  • 赋予文件可执行权限sudo chmod +x /etc/init.wsl

  • 使用sudo /etc/init.wsl [start|stop|restart]来验证是否能正常执行,例如

sudo /etc/init.wsl start #启动服务
sudo /etc/init.wsl stop #停止服务
sudo /etc/init.wsl restart #重启服务
  • 在Windows中设置开机启动,开始-运行,输入shell:startup

    • 在打开的文件夹中新建vsb文件,如wsl.vbs,输入以下内容

    • Set ws = CreateObject("Wscript.Shell")
      ws.run "wsl -d xxx -u root /etc/init.wsl start", vbhide
      #注意,xxx需要替换为你安装的wsl发行版名称,如Ubuntu-20.04
      
  • 保存,重启电脑,不出意外ssh服务已经启动起来了

五、挂载物理磁盘

先决条件

你需要Windows 11版本 22000 或更高版本,或者运行 WSL 的 Microsoft Store 版本。 若要检查 WSL 和 Windows 版本,请使用 命令:wsl.exe --version

挂载未分区磁盘

  1. 标识磁盘 - 要列出 Windows 中的可用磁盘,使用PowerShell请运行:

    GET-CimInstance -query "SELECT * from Win32_DiskDrive"
    

    磁盘路径位于“DeviceID”列下。 通常采用 \\.\PHYSICALDRIVE* 格式。

  2. 装载磁盘 - 使用 PowerShell,可以使用上面发现的磁盘路径装载磁盘,请运行:

    wsl --mount <DiskPath>
    #DiskPath为第一步标识出来的磁盘路径,例如wsl --mount \\.\PHYSICALDRIVE0
    

挂载分区磁盘

  1. 标识磁盘 - 要列出 Windows 中的可用磁盘,请运行:

    GET-CimInstance -query "SELECT * from Win32_DiskDrive"
    

    磁盘路径列在“DeviceID”之后,通常采用 \\.\PHYSICALDRIVE* 格式。

  2. 列出并选择要在 WSL 2 中装载的分区 - 确定磁盘后,运行:

    wsl --mount <DiskPath> --bare
    

    这将使磁盘在 WSL 2 中可用。 (在我们的示例中,<DiskPath>\\.\PHYSICALDRIVE*

  3. 附加后,可以通过在 WSL 2 中运行以下命令来列出分区:

    lsblk
    

    这会显示可用的块设备及其分区。

    在 Linux 中,块设备被标识为 /dev/<Device><Partition>。 例如,/dev/sdb3 是磁盘 sdb 的分区号 3。

装载所选分区

wsl --mount <DiskPath> --partition <PartitionNumber> --type <Filesystem>
#DiskPath 为磁盘标识  PartitionNumber 为分区号 Filesystem为磁盘类型
#例如 wsl --mount \\.\PHYSICALDRIVE0 --partition 1 --type ext4

其他挂载方式请查看官方文档

关于在 WSL 2 中安装 Linux 磁盘的入门 | Microsoft Learn

设置Windows开机自动挂载磁盘

挂载磁盘需要管理员权限,因此不能像自动启动服务一样,在启动菜单shell:startup中添加脚本来挂载,但是可以使用Windows任务计划程序来完成

  • 新建bat脚本,例如wsl-mont.bat放在任意位置,但需要保证不被删除,填入以下内容
wsl --mount \\.\PHYSICALDRIVE0 --partition 1 --type ext4
#这里以挂载分区磁盘举例
  • 开始-搜索,任务计划程序,点击进入
  • 左侧选择任务计划程序库,右侧选择创建任务
  • 名称随意,描述随意,勾选不管用户是否登录都要运行使用最高权限运行
  • 点击触发器选项卡,新建-开始任务-启动时-确定
  • 点击操作选项卡,新建-操作-启动程序,点击浏览,选择上述保存的脚本,点击确定
  • 点击确定,计划任务创建完成

重启电脑,进入wsl发行版,即可查看到挂载的磁盘

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows11安装Linux子系统,并实现服务自启动,局域网访问,磁盘挂载 的相关文章

  • Web 应用程序的带宽和流量模拟器?

    您能否建议如何创建一个测试环境来模拟 Web 应用程序中的各种类型的带宽和流量 或者也许是一个针对本地主机执行此操作的开源程序 我认为在编写网络应用程序时这是一个非常重要的主题 但这不是一个常见的主题 我能想象创建这种环境的唯一方法是在本地
  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • 即插即用 ID (PNPID) 对于每个设备来说都是唯一的吗?

    我使用 Windows 并希望为通过 USB 连接的外部硬盘找到唯一 ID 我发现 PnpID 0010101D400000000 这是独一无二的吗 如果我将其连接到其他 Windows 和 PC 这不会改变吗 还有其他硬盘不能有这个 Pn
  • 谷歌基准迭代的意义是什么?

    我正在使用 Google Benchmark 来测量某些代码的执行时间 例如 我编写了以下代码来测量其执行时间性能 include
  • 批量获取当前目录,不带盘符

    如何获取当前工作目录并获取没有驱动器号的路径 例如 C testing test test I would like to get in a variable testing test test 如何修剪驱动器盘符 我可以使用获取完整路径
  • 为什么非交互式批处理脚本认为我按下了 Control-C?

    因此 当输出日志中突然出现以下内容时 我的批处理脚本运行得很好 21 27 13 99 c apps w7lab scripting gt some command Error 3221225786 CTerminate batch job
  • Excel的解析路径

    其实我想问以下问题 对于位于 目录中定义的 PATH 怎么能 我找出这些目录中的哪个 找到了 因为我需要使用 Process Run 从 C 运行 Excel 并且只需指示 Excel 即可正常工作 Windows 似乎知道在哪里可以找到它
  • 发送/捕获 SIGTERM 的 Win32 API 模拟

    在 POSIX OS 下 有信号 API 允许向进程发送信号以将其关闭 使用kill 您可以使用sigaction捕获它并执行您需要的操作 然而 Win32不是POSIX系统 所以 如何处理可能出现的关闭事件 例如来自 任务管理器 中的 结
  • 如何从图像生成 tiff/box 文件以在 Windows 中训练 Tesseract

    我正在尝试在 Windows 中训练 Tesseract 为此我需要一对 tiff box 文件 并且我正在尝试使用 jTessBoxEditor 创建它 但它不接受图像作为输入 我也尝试过 boxFactory 但它无法正常运行 有谁知道
  • 如何获取subprocess.run启动的进程的pid并杀死它

    我使用的是 Windows 10 和 Python 3 7 我运行了以下命令 import subprocess exeFilePath C Users test test exe subprocess run exeFilePath 使用
  • 如何从系统属性获取Windows操作系统环境变量

    我遇到一个关于系统属性环境变量的奇怪问题 如你所知 我们可以打开Computer gt Property gt Advanced System Settings gt Advanced gt System Environment Varia
  • Hadoop Windows 设置。运行 WordCountJob 时出错:“任何本地目录中都没有可用空间”

    我正在按照此视频教程尝试在我的计算机上设置 hadoop 如何在 Windows 10 上安装 Hadoop https www youtube com watch v zujpglKP0Nw 我已经成功设置它 从 sbin 目录执行 st
  • R 控制台是我的母语,如何将 R 设置为英语?

    我在 Windows 7 上使用 R 显然 R 不知何故发现了我说英语以外的语言的证据 并且顽固地坚持在控制台中以我自己的语言提供输出 由于多种原因 这是不可取的 我希望 R 是英语 什么有效 我能够使用LANGUAGE en作为 R 控制
  • Visual C++ free 和 malloc 的线程安全性?

    有谁知道 free 和 malloc 在 Visual C 2010 上是否是线程安全的 我遇到了奇怪的问题 内存被损坏 我几乎认为这是唯一的可能性 有谁知道安全装置是否可以打开和关闭以及如何打开和关闭 前提是您链接的是线程安全库 http
  • 如何在 Windows 上检查子进程是否被信号杀死

    问题 给定一个在 python 中启动的子进程 其代码类似于 import subprocess p subprocess Popen command stdout subprocess PIPE stderr subprocess PIP
  • WMI 不返回 Windows 7 64 上的所有安装程序

    今天 我们尝试使用以下脚本列出每个虚拟机上所有已安装的程序来查询 WMI 我们发现它会列出所有 64 位应用程序 以及一些 32 位应用程序 但并非所有应用程序 32 位 64 位 都会列出 param string ExportPath
  • 在VB.net中动态添加用户控件

    我在 Vb net Windows 应用程序 中制作了自定义 UserControl 如何将其动态添加到表单中 UserControl 本质上只是另一个类 它继承自 Control 因此您可以使用控件执行各种操作 但除此之外它只是一个类 因
  • 无法启动 Windows 快捷方式

    我正在尝试使用 python 启动 Windows 我已经尝试了 os system subprocess call os startfile 等多种方法 但总是收到错误消息 指出路径不存在 我知道路径是正确的 因为我尝试在 CMD EXE
  • 有关 CredEnumerate 的帮助

    作为后续this https stackoverflow com questions 199518 how to programatically add mapped network passwords winxp我希望有人可以帮助解决这个
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您

随机推荐

  • 【测试开发】基于 MeterSphere 的接口测试流程

    基于 MeterSphere 的接口测试流程 MeterSphere 接口测试模块提供了 接口定义 接口自动化 等接口测试相关功能 用户可以使用树状多级模块来分级分组管理项目下的接口列表 创建执行接口用例测试接口 组合编排多个接口用例进行场
  • 电子产品推荐系统的设计与实现

    其他项目 点击作者主页 目录 1 系统简介 2 系统相关技术 2 1 JSP技术 2 2 B S架构 2 3 MySQL数据库技术 2 4 SSM 3 需求分析 3 1 系统功能需求分析 3 2 系统非功能需求分析 4 系统设计 4 1 系
  • websocket协议

    WebSocket是一种在Web应用程序中实现实时双向通信的协议 一种在单个TCP连接上进行全双工通信的协议 它使得客户端和服务器之间的数据交换变得更加简单 允许服务端主动向客户端推送数据 WebSocket 与 HTTP 2 一样 其实都
  • Java如何对一个对象进行深拷贝?

    深拷贝实现代码 https github com wudashan java deep copy 介绍 在Java语言里 当我们需要拷贝一个对象时 有两种类型的拷贝 浅拷贝与深拷贝 浅拷贝只是拷贝了源对象的地址 所以源对象的值发生变化时 拷
  • 【Transformers】第 1 章 :Hello Transformers

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • QWidget: Must construct a QApplication before a QWidget 请按任意键继续. . .

    系列文章目录 文章目录 系列文章目录 前言 一 错误原因 前言 一 错误原因 在调试examples工程时 遇到编译报错 QWidget Must construct a QApplication before a QWidget 根据字面
  • 打开软件或游戏出现找不到d3dcompiler_43.dll文件如何解决?

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个d3dcompiler 43 dll文件进行安装
  • SpringBoot的日志配置 logging.file.path和logging.file.name不能同时生效

    这里写自定义目录标题 logging file path和logging file name logging file path和logging file name logging file path data logs lra sdk l
  • day20 网络编程(上)

    day20 网络编程 上 课程目标 掌握网络相关的基础知识并可以基于Python开发程序 基于网络进行数据传输 课程概要 网络必备基础 网络编程 Python代码 B S和C S架构 1 必备基础 你必须了解的网络相关设备和基础概念 1 1
  • Caffe学习之自定义创建新的Layer层

    caffe源码中已经帮我封装好了各种各样的layer 但是有时候现有的layer不能满足设计的网络要求 这个时候需要自己定义一个新的layer 本文参考here 进行简单讲解 具体方式如下 一 创建 hpp文件 1 添加你的layer头文件
  • 利用PIFU-HD生成自己的三维人体图像

    这个小项目本身是在研一的时候调的 记录一下过程 以后在别的电脑上配置就容易点 我是在windows系统下配置的 gpu贼拉跨 报错很多 欢迎借鉴 总有一款错误适合你 然后友情提示 跑项目就是会遇到各种各样的错误 请需要的小伙伴耐心看 遇到问
  • 简析区块链的特点和每个分层的作用

    区块链技术在这几年不停的发展更新 相应的区块链服务应用和技术也逐渐走向成熟 区块链技术相对于行业内的内来说就相对熟悉一些 但对于那些还未接触这些技术知识的人来说就相当陌生 区块链技术有什么特点 区块链底层系统有哪些分层 对应的作用分别是什么
  • 设备树学习之(二)点灯

    开发板 tiny4412SDK S702 4GB Flash 要移植的内核版本 Linux 4 4 0 支持device tree u boot版本 友善之臂自带的 U Boot 2010 12 busybox版本 busybox 1 25
  • 获取当天,本周,本月,本季度,本半年,本年时间

    1 使用场景 elemet plus 组件库 日期选择器快捷使用选择本月 本季度时间 2 方法 const useDate gt const now new Date 当前日期 const nowYear now getFullYear 当
  • 光照贴图教程

    http www alsprogrammingresource com lightmapping tutorial html 光照贴图教程 作者 Alan Baylis 19 12 2001 在大多数游戏中 光照贴图仍然是首选的照明方法 也
  • CMake应用:核心语法篇

    本文是深入CMakeLists txt之前的前导文章 介绍CMake语言的核心概念 以及常用的CMake脚本命令 以期对CMake的语法能有比较好的认知和实践基础 在前一篇文章中介绍了CMake的核心概念 使用的一般流程 并通过一个实例讲解
  • 迁移学习(Transfer Learning)

    1 迁移学习概念 机器学习和数据挖掘的基本假设 1 用于学习的训练样本与新的测试样本满足独立同分布的条件 2 必须有足够多的训练样本才能学习得到一个好的分类模型 然而 由于系统的特征往往会随时间改变 因此数据的特征空间和分布规律也会发生变化
  • pytorch 构造读取数据的工具类 Dataset 与 DataLoader (pytorch Data学习一)

    基本思路 所有的数据都叫Dataset 加载数据的叫DataLoader 每次加载多少条数据叫batch size 所以构造训练数据的步骤是 首先把数据加载为Dataset 然后用DataLoader依次把数据传递到模型中即可 全部代码 i
  • 精选程序员面试常问的逻辑题

    前言 大家在面试的时候 难免会遇到让人摸不着头脑的逻辑题 这类题目让同学们往往连答案应该回答些什么都摸不清楚 只能和面试官四目相对 非常尴尬 其实 很多面试的考官 都是从题库随机挑选逻辑题来考验同学们 面试官有时候自己也未必完全摸透这类题目
  • Windows11安装Linux子系统,并实现服务自启动,局域网访问,磁盘挂载

    Windows11安装Linux子系统 并实现服务自启动 局域网访问 磁盘挂载 一 准备工作 二 安装Linux子系统 wsl2 三 为Linux子系统设置桥接网络 检查wsl版本 在 Hyper V 管理器中创建虚拟交换机 创建 WSL