wsl2的配置

开启必要的功能

本部分参考: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 虚拟硬盘的大小:

  1. 在powershell中使用wsl.exe --shutdown命令终止所有WSL实例。
  2. 记住ext4.vhdx的绝对路径,如D:\Ubuntu\ext4.vhdx
  3. 管理员权限打开CMD,通过diskpart扩展磁盘映像文件的虚拟大小,
    如扩展到512000M(GB、TB同理计算)。
C:\Users\me> diskpart
DISKPART> Select vdisk file="D:\Ubuntu\ext4.vhdx"
expand vdisk maximum=512000
exit
  1. 在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:\Linux\mount_wsl.ps1中保存以下内容:

wsl --mount --vhd --bare E:\new.vhdx

D:\Linux\mount_wsl.bat中保存以下内容:

PowerShell D:\Linux\mount_wsl.ps1

右键开始菜单——计划任务程序——操作——创建任务。

  • 常规选项卡中:名称填写【wsl开机挂载】(可随便起名),勾选【使用最高权限运行】。
  • 触发器选项卡中:点击【新建】,开始任务选择【启动时】。
  • 操作选项卡中,程序或脚本填写D:\Linux\mount_wsl.bat

这样,每次开机后,就会mount_wsl.bat以管理员权限执行,
进而调用mount_wsl.ps1脚本,将磁盘映像附加到WSL中。

此时没有任何的WSL实例运行,因此自己指定的磁盘映像的挂载优先于Linux发行版的系统盘,
指定的磁盘映像被识别为/dev/sdc
当WSL启动并运行Linux发行版时,Linux发行版的磁盘映像被识别为/dev/sdd
所以我们在Linux系统中将sdc挂载到我们需要的位置这一操作不会出问题。
如果先运行WSL实例,Linux发行版的磁盘映像被识别为/dev/sdc,将无法继续挂载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值