wsl2的使用
Commentwsl2的使用
wsl1和2的区别
因为只是轻度使用,目前已知的区别如下:
- WSL2 基于Hyper-V功能的子集提供了真实的linux内核,而WSL1是一个用于访问 Linux 环境的兼容层,没有linux内核的完整功能
- WSL2 通过虚拟网卡与win10组成了局域网进行交互
另外WSL安装的linux是极简版的,很多程序都需要自己手动安装
安装wsl2
- 如果之前没有用过 WSL,那么首先需要安装 Windows 10 的 WSL 功能:
script dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- 安装 WSL2 功能模块
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart - 重启电脑
- 将 WSL 2 设置为默认版本
script wsl --set-default-version 2
- 在Microsoft Store中获取linux发行版
直接搜索linux即可 - powershell使用
wsl --list --verbose
查看是否安装成功script NAME STATE VERSION
* Ubuntu-18.04 Running 2 - 如果运行失败可能是未安装 Linux 内核更新程序包,下载安装后重新运行即可.
https://docs.microsoft.com/en-us/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package
wsl2和windows互相访问
wsl2访问windows: 在/mnt/
下存在所有的windows磁盘
windows访问wsl2: 文件浏览器输入 \\wls$
,注意有时候会卡住
迁移wsl2的vhdx文件到其他位置
- 查看已安装的linux发行版本
wsl -l --all -v
- 导出分发版为tar文件到其他盘
wsl --export Ubuntu-18.04 E:\wsl\wsl-ubuntu18.04.tar
- 注销当前分发版
wsl --unregister Ubuntu-18.04
- 重新导入并安装WSL
wsl --import Ubuntu-18.04 E:\wsl\wsl-ubuntu18.04 E:\wsl\wsl-ubuntu18.04.tar --version 2
- 设置默认登陆用户为安装时用户名
ubuntu1804 config --default-user USERNAME
- 删除tar
限制内存的使用
创建一个%UserProfile%.wslconfig文件来限制wsl使用的内存总量
若不限制,在拷贝进大文件时内存会一直增长直至内存占满系统蓝屏.
[wsl2] |
processors是核心数,不限制去除即可.
swap是交换分区大小
手动释放cache缓存
echo 3 > /proc/sys/vm/drop_caches |
扩展虚拟磁盘
WSL2 VHD使用ext4文件系统,此VHD会自动调整大小以满足存储需求,其最大大小默认为256GB
- 关闭wsl
script wsl --shutdown
- 找到自己的vhdx文件的路径,例如我的是:E:\wsl\wsl-Ubuntu-18.04\ext4.vhdx
- 管理员权限打开cmd或powershell进入diskpart
script diskpart
Select vdisk file="E:\wsl\wsl-Ubuntu-18.04\ext4.vhdx"
expand vdisk maximum="512000" # 后面的数字是最大大小,单位MB - 在wsl中运行命令,让 WSL 知道它可以扩展其文件系统的大小
script sudo mount -t devtmpfs none /dev
mount | grep ext4 $ 记录输出的结果,例如 /dev/sdb
sudo resize2fs /dev/sdX # X为上一条输出的结果,如果resize2fs没有 apt install resize2fs
释放未占用的空间
虽然vhd在需要时会自动增大,但文件删除后不会自动减小占用
wsl --shutdown |
配置能够让局域网其他电脑ssh连接
重装ssh
script sudo apt-get remove openssh-server
sudo apt-get install openssh-server编辑sshd_config文件
sudo vim /etc/ssh/sshd_config
Port 22
PermitRootLogin yes
PasswordAuthentication yes编辑hosts.allow
sudo vim /etc/hosts.allow
添加一行sshd: ALL
重启ssh服务
sudo service ssh --full-restart
(每次重新运行后不知道为何ssh的开发会失效,重启ssh服务即重新运行sudo service ssh --full-restart
后又有效)配置端口转发
- 查看wsl的IP地址
ifconfig
或ip addr show eth0
注意: 每次重启WSL2时ip地址都会改变 - windows下管理员权限打开cmd或powershell,添加端口转发
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=xxx.xxx.xxx.xxx protocol=tcp
删除端口转发:
netsh interface portproxy delete v4tov4 listenport=22 listenaddress=0.0.0.0
注意: 0.0.0.0可以换成* ,但是添加和删除的时候要对应. - 查看端口转发状态
netsh interface portproxy show all
- 查看wsl的IP地址
若对方还是无法连接成功,防火墙添加端口的入站规则
打开防火墙规则: 运行输入wf.msc
或设置–>更新和安全–>Windows安全中心–>防火墙和网络保护–>高级设置
入站规则–>新建规则–>端口–>TCP,特定本地端口 输入22–>允许连接 最后输入名称,例如我的是 wsl2ssh
通过命令行开启和关闭此规则:
开启 |
访问固定的wsl2的ip
- 在wsl2的虚拟网卡上添加一个windows的ip
netsh interface ip add address "vEthernet (WSL)" 192.168.99.1 255.255.255.0
- 在wsl2中为wsl添加一个ip
sudo ip addr add 192.168.99.2/24 broadcast 192.168.99.255 dev eth0 label eth0:1;
即通过分别为2个系统在虚拟网卡中添加固定的ip得到了2个固定的ip.
之后即可在windows上针对wsl2的固定ip指定端口转发:netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=192.168.99.2 protocol=tcp
不过每次重启WSL后添加的ip会失效,需要再次运行,可以考虑添加到.bashrc
Windows 10升级1809版本后,发现Hyper-V不能用了,管理器里是一片空白,看服务Hyper-V 主机计算服务没有启动,手动启动的话失败,报错,代码1053.
自己尝试修复,也百度了很久,没弄好,后来终于在微软的英文网站上找到了答案,分享如下。
1, Open “Window Security”
打开“WIndows安全中心 ”
2, Open “App & Browser control”
打开“应用和浏览器控制”
3, Click “Exploit protection settings” at the bottom
点击”Exploit protection settings” (在最下面)
4, Switch to “Program settings” tab
切换到“程序设置”
5, Locate “C:\WINDOWS\System32\vmcompute.exe” in the list and expand it
找到 “C:\WINDOWS\System32\vmcompute.exe”并展开