2023

您所在的位置:网站首页 wsl2和vmware 2023

2023

2023-04-09 19:09| 来源: 网络整理| 查看: 265

2023-04-07_5分钟学会WSL2安装CentOS7(Windows下的Linux子系统即Windows Subsystem for Linux)

首先这个问答挺不错

问:为什么不买一台linux服务器?答:因为没钱,且交不起电费问:为什么不买云主机?答:因为没钱,且数据不在本地,数据不够安全问:为什么不装双系统系统?答:体验割裂问:为什么不直接装Linux系统/黑苹果?答:生态匮乏(要玩游戏)问:和虚拟机相比除了性能有什么优势答:虚拟机使用上相当于多了台服务器,开发上并不方便。 而wsl可以实现一个工程,一套源码,在Windows下开发,在linux下运行。 IDEA自带支持WSL,虽然也支持SSH,但体验上差一些

其实笔者平时有一些Linux的需求,大致梳理了以下需求

docker环境:这个是最主要的需求,虽然Windows也能装docker desktop,但使用起来还是有些割裂,日常工作中都是在Linux上使用docker开发环境:各种命令行更加方便,使用VScode远程到Linux继续开发,保持了图形界面的便利性和工具链的完整一致性,Linux上整个开发更加自动化运行一些服务:如网盘(KodeExplore)、家庭影院(Jellyfin)、vscode网页版服务端、ssh服务、任何能运行在Linux上的有价值的服务,而且可以结合之前的文章将这些服务从内网暴露到公网,在公网进行访问,相当于计算和存储资源在本地提供,所以可以部署比较大型的服务,网络资源由虚拟机主机提供批处理:写一些shell脚本对文件进行批处理,如批量改名之类的需求搭建小型 K8s环境:可使用kind搭建小型K8s环境用于开发测试

解决Linux的需求大概分为以下三个阶段,一般而言主力系统还是Windows

最开始是安装Vmware等虚拟机软件,在里面运行Linux环境,通过内网进行访问,缺点是启动太慢,而且虚拟机比较占用资源,而且和Windows的文件共享会比较麻烦,网络有三种模式,使用难度比较高,优点是比较稳定,这种方式使用了很久第二个阶段是使用裸金属虚拟化技术,如esxi,在上面同时运行Windows和Linux,Windows仍然是主力机,硬盘可以通过直通的方式挂载到Windows中,这种方式优点是十分稳定,经常几个月不关机一点事没有,备份还原简单,因为都是虚拟机,缺点使用难度比较高,需要折腾(各种硬件直通什么的),因为是esxi,所以必须还得加一台电脑通过远程的方式访问(因为笔者本来犹太台式机专门用作服务器,所以比较看使用场景),这种方式大概用了一年多,因为直通显卡失败所以后来没使用此方式第三个阶段也就是现在,使用WSL2的方式,因为就笔者而言,Linux不是主力系统,主力系统还是Windiows,而WSL2很好的满足了这个需求,而且WSL2和Windows集成度高,启动快,wsl回车就能启动,文件和网络共享十分方便,目录直接挂载在Linux的/mnt目录下,在宿主机中输入\\wsl$也能直接访问Linux中的文件,监听在Linux中的服务也能监听在Windows的环回接口上,缺点是目前不太稳定,有时候CPU利用率过高会崩掉。

WSL1还是WSL2https://learn.microsoft.com/zh-cn/windows/wsl/compare-versions

WSL1和WSL2是目前WSL的两个版本,如下为他们的对比(注意,WSL 2 仅在 Windows 11 或 Windows 10 版本 1903、内部版本 18362 或更高版本中可用)

功能WSL 1WSL 2Windows 和 Linux 之间的集成✅✅启动时间短✅✅与传统虚拟机相比,占用的资源量少✅✅可以与当前版本的 VMware 和 VirtualBox 一起运行✅✅托管 VM❌✅完整的 Linux 内核❌✅完全的系统调用兼容性❌✅跨 OS 文件系统的性能✅❌

说明如下:

WSL1 和 WSL2 都可以实现在 windows 中带来 linux 操作体验启动速度都不慢,和Windows集成度都很高内存消耗都比较小WSL 1 没有使用的 VM,WSL 2 使用了一个自动维护的 VMWSL 1 不支持,WSL2 支持可以运行例如 Docker 等程序WSL 2 支持完整的 linux 内核调用,而 WSL 1 不行WSL 2 不能与 Windows 跨操作系统文件操作,而 WSL 1 则与 windows 在同一文件系统中

什么情况下不适合使用 WSL2 ?

WSL 2 带来最大的改变就是提升文件IO性能,但这个提升仅限于WSL2根文件系统中(VHD中),并且,微软文档指出,跨操作系统文件操作时 WSL1 要快于 WSL2。因此,在以下情况是仍然建议使用 WSL 1:

你的文件必须存储在 Windows 文件系统中

从 WSL 中访问 windows 中的文件时,仍然是 WSL 1 快,当你的项目文件同时需要被 WSL 和 Windows 访问时(如交叉编译同一份源码)从 Windows 访问 WSL 中的文件时, 仍然是 WSL 1 快

如果是需要完整的内核则可以使用WSL2,因为笔者要使用docker等需要完整内核的软件,因此选择了WSL2,WSL2的其他说明,由于 WSL 1 与 WSL 2 的实现方式不同,在其他方面 WSL 2 也有与 WSL 1 不同的表现,在 WSL 2 中任务管理器中不再现在 WSL 中的进程;WSL 2 网络访问方面,微软会做一定优化,但本质上还是虚拟机的方法。

总结,如何选择 WSL 1 还是 WSL 2:

如果你看中 WSL 与 Windows 文件互通和互操作性,还是 WSL 1 更适合如果你常在 VM 里开发,工作环境基本都在 Linux 中,那么 WSL 2 会带来更加完美的体验如果你需要内核功能,如安装docker,那只能是 WSL 2 了从网络,与其他软件兼容性等方面考虑

开启WSL2特性

打开控制面板 > 程序 > 程序和功能 > 启动和安装Windows功能,勾选里面的Hyper-V、适用于Windows的Linux子系统、虚拟机平台,然后按照提示重启电脑

重启后打开PowerShell,执行如下命令切换到WSL2

wsl --set-default-version 2

成功返回如下

有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2 操作成功完成。安装CentOS

官方没有提供CentOS7,可以在下面这个仓库下载,选择对用的版本下载,也可以使用其他的CentOS版本

https://github.com/mishamosher/CentOS-WSL

下载完成后解压是两个文件,注意此时放在哪个目录下则会在对应的目录下创建ext4.vhdx虚拟磁盘,不建议放到C盘,这个文件随着时间增长会变得很大

CentOS7.exerootfs.tar.gz

双击CentOS7.exe即可安装,第一次安装可能会报错,需要先升级内核,下载wsl_update_x64.msi文件安装即可

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi安装其他发行版

使用如下命令可查看在线的发行版

wsl --list --online 以下是可安装的有效分发的列表。 请使用“wsl --install -d ”安装。 ​ NAME FRIENDLY NAME Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling Ubuntu-18.04 Ubuntu 18.04 LTS Ubuntu-20.04 Ubuntu 20.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS OracleLinux_8_5 Oracle Linux 8.5 OracleLinux_7_9 Oracle Linux 7.9 SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4 openSUSE-Leap-15.4 openSUSE Leap 15.4 openSUSE-Tumbleweed openSUSE Tumbleweed

比如安装Ubuntu-22.04使用下面命令即可,会自动下载并安装对应的发行版

wsl --install -d Ubuntu-22.04 正在安装: Ubuntu 22.04 LTS [========== 18.0%

这样安装的缺点是只能安装在C盘,如果需要迁移可以参考下面的说明,安装完整后可以看到有两个发行版

wsl -l 适用于 Linux 的 Windows 子系统分发版: CentOS7 (默认) Ubuntu-22.04

安装完成后不能使用root用户,会提示用户已存在,可以使用下面命令手动调整为root,注意去除掉特殊符号,如Ubuntu-22.04去后后变为Ubuntu2204

Ubuntu2204 config --default-user root

进入非默认发新版也是同样的命令,如Ubuntu2204回车即可进入终端

使用进入Linux:在Powershell中输入wsl命令回车即可进入Linux子系统,也可以在Linux中安装sshd服务通过ssh的方式登录上去关于应用启动:在WSL2中最大的不同是没法使用systemd启动服务,因此一般是手动启动服务,如docker,安装完docker后可通过如下命令启动,其他服务也是类似的启动方式nohup /usr/bin/dockerd &关于网络:在Linux中,可通过如下命令查看Windows的IP,比如在Windows上监听了7680端口,那么在Linux中telnet 172.22.0.1 7680可以发现是监听的cat /etc/resolv.conf | grep nameserver nameserver 172.22.0.1

同时在Linux中监听的端口会在Windows的127.0.0.1上监听,比如ssh服务,会监听在Windows的127.0.0.1端口上,如果能监听在Windows的0.0.0.0上,那么就可以在局域网中访问Windows的IP + 22端口访问到位于该Windows中的WSL2系统,可以通过ssh本身的网络转发(在Windows上执行)

ssh -fN -L 0.0.0.0:22:127.0.0.1:22 [email protected]

当然其他服务也可以通过这种方式转发出去

ssh -fN -L 0.0.0.0:8000:127.0.0.1:8000 [email protected]关于存储:在Linux中/mnt目录下就可以直接访问Windows的文件系统,在Windows的文件管理器中输入\\wsl$可以进入Linux的文件系统中,文件共享还是比较方便Windows、Linux命令混用:若要使用 Linux 命令 ls -la 列出文件,并使用 PowerShell 命令 findstr 来筛选包含“git”的单词的结果,请组合这些命令wsl ls -la | findstr "git" wsl ls -la /proc/cpuinfo wsl lscpu ​

wsl存储位置迁移# 关闭wsl wsl --shutdown # 确保为stop状态 wsl -l -v # 文件夹需提前创建 wsl --export CentOS7 E:\CentOSWSL\centos7.tar # 注销 wsl --unregister CentOS7 # 确定已注销 wsl -l -v # 执行导入(如果失败可再次尝试执行) wsl --import CentOS7 E:\CentOSWSL\ E:\CentOSWSL\centos7.tar wsl -l -v

磁盘空间回收

问题描述: 当需要更多空间(达到一定限度)时,这个虚拟硬盘文件会自动增长。不幸的是,如果回收一些空间,即通过删除未使用的文件,vhdx 不会自动缩小。

处理方法: 暂时没有好的处理方法,得手动执行命令,或者利用Docker Desktop的

执行命令前注意先停止WSL2 windows专业版执行命令:

wsl --shutdown optimize-vhd -Path F:\WSL2CentOS7\ext4.vhdx -Mode full

如果不知道磁盘文件在哪里,可以使用下面的命令获得,注意将其中Ubuntu-20.04换成发行版的名字

(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq 'Ubuntu-20.04' }).GetValue("BasePath") + "\ext4.vhdx" ​



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3