迁移WSL中的ext4.vhdx文件

环境

Windows11(WSL2)

前言

今天发现系统C盘的磁盘空间已经严重不足,查找后发现有一个很大的 ext4.vhdx 文件,位置在:

C:\Users\ljfro\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState

因为我在WSL中安装了一个ubuntu子系统,所以这个ext4.vhdx文件就是ubuntu系统的虚拟磁盘。

下面介绍如何迁移这个文件到其它分区。

过程

1)查看安装了哪些发行版Linux子系统
在PowerShell中,执行wsl -l -v命令,显示:

  NAME                   STATE           VERSION
* Ubuntu-22.04           Running         2

如果子系统的状态是运行中(Running),需要先停止它:

wsl --terminate Ubuntu-22.04

2)导出子系统
假设我们要将ubuntu子系统导出到D:\export.vhdx,则执行命令:

wsl --export Ubuntu-22.04 D:\export.vhdx --vhd

WSL2支持两种导出格式,tar 和 vhdx,默认是tar。如果不加--vhd参数则代表导出为tar格式:

wsl --export Ubuntu-22.04 D:\export.tar

但是导出tar格式过程中可能会报以下错误:

pax format cannot archive sockets

vhdx格式则不存在这个问题。

3)删除原有的子系统

wsl --unregister Ubuntu-22.04

删除后再执行wsl -l命令,该子系统就不会再显示出来。

4)导入子系统
假设我们要将子系统导入到D:\WindowsWSL\Ubuntu22.04\目录,则执行命令:

wsl --import Ubuntu-22.04 D:\WindowsWSL\Ubuntu22.04\ D:\export.vhdx --vhd

命令中的Ubuntu-22.04是子系统的新名称,可以修改,这里我没改直接沿用旧名称。

导入成功后,检查虚拟磁盘文件是否已经迁移到新目录:

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

如果能看到D:\WindowsWSL\Ubuntu22.04\ext4.vhdx,则代表迁移成功了。

5)将子系统设置为默认系统(可选)

wsl --set-default Ubuntu-22.04

6)设置默认登录用户(可选)
新的子系统导入成功后,默认会使用root用户登录,如果你不希望用root,则可以在进入子系统后,编辑/etc/wsl.conf文件(如果没有此文件则新增一个),新增以下内容:

[user]
default=ljfrocky

ljfrocky是我希望使用的用户,根据实际情况修改。修改完后重启子系统即可。

或者在运行子系统时显式指定用户名也可以:

wsl -d Ubuntu-22.04 -u ljfrocky

参阅

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值