概述
文章目录
- 开启必要的功能
- 下载并安装到任意位置
- 扩展Linux发行版所在的虚拟磁盘映像的大小
- 装载其他位置的磁盘映像文件
- 设置Windows开机自动附加虚拟磁盘
开启必要的功能
本部分参考:https://learn.microsoft.com/zh-cn/windows/wsl/install-manual
控制面板——程序和功能——启用或关闭Windows功能,
勾选【适用于Linux的Windows子系统】和【虚拟机平台】。
或在Powershell中运行如下命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
下载适用于 x64 计算机的 WSL2 Linux 内核更新包并运行,直到安装完成。
如果你确认使用WSL2,可以在微软商店下载新版本的wsl,
然后在powershell中将WSL2设置为默认版本:
wsl --set-default-version 2
注意:不勾选【虚拟机平台】不能使用WSL2,但可使用WSL1;
将其勾选后可以使用WSL2,但无法使用VMWare等虚拟机软件。
即安装WSL1需要:启用【适用于Linux的Windows子系统】但不起用【虚拟机平台】,【不】设置WSL2为默认版本。
下载并安装到任意位置
微软商店提供了直接下载,但直接安装后默认安装在C盘,且难以找到磁盘映像文件的位置,
如果只需要使用部分功能,且受C盘空间被占用影响较小,建议直接下载。
如果要安装到指定位置,则需要在这里选择一个需要的发行版下载,
如Ubuntu 22.04 LTS。
下载后得到这个文件:Ubuntu2204-221101.AppxBundle
。
如果直接运行这个文件,则相当于在微软商店中安装,即安装到默认位置。
在这里我们将其解压,解压后得到若干个以.Appx
结尾的文件,选择没有后缀的一个再进行解压。
得到ubuntu.exe
,双击运行,
此时会在当前目录生成一个ext4.vhdx
的磁盘映像文件,这就是子系统的安装位置。
因此,.Appx
文件解压后的目录,就是子系统的安装位置。
建议在运行ubuntu.exe
前就确定好安装位置,避免出现问题。
安装完成后,会提示输入用户名和密码,此后就可以在Windows终端中直接选择Linux发型办启动
扩展Linux发行版所在的虚拟磁盘映像的大小
如果使用默认的WSL,只能使用256G的虚拟磁盘空间,
如果使用了新版的WSL,则默认就会有1T的虚拟空间。
但这两种方式都不会一次性占用这么大的空间,只会随着使用量的增加逐步增大磁盘映像文件(ext4.vhdx
)的大小。
如果一块硬盘足够大,则更建议只对这个虚拟磁盘空间进行拓展。
参考如何扩展 WSL 2 虚拟硬盘的大小:
- 在powershell中使用
wsl.exe --shutdown
命令终止所有WSL实例。 - 记住
ext4.vhdx
的绝对路径,如D:Ubuntuext4.vhdx
。 - 用管理员权限打开CMD,通过
diskpart
扩展磁盘映像文件的虚拟大小,
如扩展到512000M(GB、TB同理计算)。
C:Usersme> diskpart
DISKPART> Select vdisk file="D:Ubuntuext4.vhdx"
expand vdisk maximum=512000
exit
- 在Linux中扩展分区大小。
mount | grep ext4
执行后会产生一个名称,
这个表示系统盘所在分区,也可以用df
来查询根目录的分区名称。
sudo apt install resize2fs # 如果已安装resize2fs则忽略本步
sudo mount -t devtmpfs none /dev
mount | grep ext4
sudo resize2fs /dev/sdb 512000M # 大小和第3步中相同。
装载其他位置的磁盘映像文件
首先需要创建一个磁盘映像文件。
右键开始菜单——磁盘管理——操作——创建VDH,在位置中输入磁盘映像的文件路径和文件名,
虚拟硬盘大小填写需要使用的最大大小,虚拟硬盘格式选择VDHX,虚拟硬盘类型选择动态扩展。
此时,右侧的磁盘多了一个新磁盘,右键选择初始化,分区格式选择为GPT,
然后右键这个磁盘名称选择【分离VDH】,此时磁盘管理中看不到这一块虚拟磁盘,
但新建的磁盘映像文件依然存在,记住它的路径(如:E:new.vhdx
)。
注:如果不分离VHD有时会报错
在管理员权限的Powershell中装载VHD:
wsl --shutdown # 终止所有的WSL实例
wsl --mount --vhd --bare E:new.vhdx
--bare
表示只将磁盘附加到WSL但不装载,如果不加此参数会报错。
然后启动WSL实例,查看已附加的硬盘:
$ sudo apt-get install fdisk # 如已安装fdisk则忽略
$ sudo fdisk -l # 展示分区信息
如果是先附加磁盘,再启动WSL实例,那么新附加的磁盘映像为/dev/sdc
,
然后给这一块磁盘分区。注意,fdisk
只能给2T以下磁盘分区,2T以上可以使用parted
。
$ sudo fdisk /dev/sdc
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Partition number (1-128, default 1):
First sector (34-32734, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-32734, default 32734):
Created a new partition 1 of type 'Linux filesystem' and of size 15 MiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
查看一下分区是否成功,看到dev/sdc1
则表示分区成功了。
$ sudo fdisk -l
Disk /dev/sdc: 16 MiB, 16777216 bytes, 32768 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 3A8C812E-3F1D-4027-A67F-68665A416FD6
Device Start End Sectors Size Type
/dev/sdc1 2048 32734 30687 15M Linux filesystem
将这个分区格式化为ext4格式。
$ sudo mkfs.ext4 /dev/sdc1
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 268435200 4k blocks and 67108864 inodes
Filesystem UUID: 43284b00-fb83-4159-9e56-a39beb5af30a
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
然后将这个分区挂载到某个目录下,如果是当前用户没有权限的目录,则需要使用sudo
。
$ sudo mkdir /data
$ sudo mount /dev/sdc1 /data # 临时挂载,重启后会失效。
$ sudo echo "/dev/sdc1 /data ext4 defaults 0 0" >> /etc/fstab # 自动挂载
设置Windows开机自动附加虚拟磁盘
按照上一步所做的设定后,如果WSL被终止,那么向WSL附加磁盘映像的操作也会失效,
再次启动时会因为没有/dev/sdc
而不能挂载。
一般情况下,在不使用wsl --shutdown
命令时,即使窗口被关闭,WSL也不会被彻底终止。
因此,只有Windows启动时需要进行磁盘附加操作。
开启启动时附加磁盘有两个办法,使用【启动项】或使用【计划任务】。
由于附加磁盘涉及到管理员权限,启动项的设置较难处理,这里推荐使用【计划任务】。
在任意位置(可以在Linux发行版所在的文件夹)新建两个文件,并记住他们的位置。
D:Linuxmount_wsl.ps1
中保存以下内容:
wsl --mount --vhd --bare E:new.vhdx
D:Linuxmount_wsl.bat
中保存以下内容:
PowerShell D:Linuxmount_wsl.ps1
右键开始菜单——计划任务程序——操作——创建任务。
- 常规选项卡中:名称填写【wsl开机挂载】(可随便起名),勾选【使用最高权限运行】。
- 触发器选项卡中:点击【新建】,开始任务选择【启动时】。
- 操作选项卡中,程序或脚本填写
D:Linuxmount_wsl.bat
这样,每次开机后,就会mount_wsl.bat
以管理员权限执行,
进而调用mount_wsl.ps1
脚本,将磁盘映像附加到WSL中。
此时没有任何的WSL实例运行,因此自己指定的磁盘映像的挂载优先于Linux发行版的系统盘,
指定的磁盘映像被识别为/dev/sdc
。
当WSL启动并运行Linux发行版时,Linux发行版的磁盘映像被识别为/dev/sdd
,
所以我们在Linux系统中将sdc挂载到我们需要的位置这一操作不会出问题。
如果先运行WSL实例,Linux发行版的磁盘映像被识别为/dev/sdc
,将无法继续挂载。
最后
以上就是威武咖啡为你收集整理的wsl2的配置的全部内容,希望文章能够帮你解决wsl2的配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复