迁移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
参阅
- https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands
- https://learn.microsoft.com/zh-cn/windows/wsl/disk-space#how-to-locate-the-vhdx-file-and-disk-path-for-your-linux-distribution
- https://superuser.com/questions/1602502/change-default-wsl-2-user-after-export-import