贝隆

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

众所周知,WSL2子系统的文件系统是通过windows挂载磁盘中的vhdx实现的。。。默认情况下,它们都是保存在C盘。比如Ubuntu22.04放在:

C:\Users\admin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx

但是,尽管我小心翼翼地把Linux的大文件都放到其他盘,用了一年之后,这个vhdx文件还是快速增长到了23.3GB。

PS C:\Users\admin> wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop-data    Stopped         2
  kali-linux             Stopped         2
  Ubuntu-22.04           Stopped         2
  docker-desktop         Stopped         2

加上其他的子系统,妥妥的100GB没有了。。。子系统的文件系统迁移至其他盘,也成为了刚需。

1、停止所有的子系统

为了避免迁移带来的影响,建议先把所有的子系统都停掉。命令如下:

PS C:\Users\admin> wsl --shutdown
PS C:\Users\admin> wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop-data    Stopped         2
  kali-linux             Stopped         2
  Ubuntu-22.04           Stopped         2
  docker-desktop         Stopped         2

2、导出子系统镜像

将已经注册的wsl子系统镜像导出至磁盘。镜像的镜像为tar压缩文件,里面包含了包括整个vhdx磁盘数据和一些必要的配置。比如我在具体的执行过程中,是导出到相对空余的D盘中了。

 wsl --export kali-linux D:\wsl\Kali-Linux\images\kali-linux.tar

3、注销已导出的子系统

注销后,原路径下的vhdx文件会被移除。这个时候,C盘原本的占用空间将会被释放

wsl --unregister Ubuntu-20.04

4、重新导入子系统镜像

将导出的子系统镜像导入到指定盘符的路径下。

wsl --import Ubuntu-20.04  D:\wsl\Kali-Linux\  D:\wsl\Kali-Linux\images\kali-linux.tar  --version 2

导入成功后,会在该目录中生成一个新的vhdx虚拟磁盘文件。

5、启动子系统验证功能

启动该子系统,验证功能。能正常启动,且执行命令正常,则表示成功将子系统的文件系统迁移至其他盘了。

6、更换硬盘后,如何直接导入原有wsl子系统?

笔者今年更换硬盘并克隆分区后,打开Ubuntu22.04时,系统提示:

无法将磁盘“\\?\E:\wsl-ubuntu\ext4.vhdx”附加到 WSL2: 拒绝访问。
错误代码: Wsl/Service/CreateInstance/MountVhd/HCS/E_ACCESSDENIED

解决方案如下:

a、如果原本有导出备份习惯的朋友,可以直接参考本文1-4步骤,将备份文件直接导入。

b、如果未备份,但可以找到原本硬盘中的vhdx文件的朋友,参考执行如下命令:

 # --import <Distro> <InstallLocation> <FileName> [选项]
 #       将指定的 tar 文件作为新分发版导入。
 #       文件名可以是 - for stdin。
 #       选项:
 #           --version <Version>
 #               指定要用于新分发的版本。
 #           --vhd
 #               指定所提供的文件是 .vhdx 文件,而不是 tar 文件。
 #               此操作在指定的安装位置创建 .vhdx 文件的副本。

wsl --import Ubuntu-20.04 D:\wsl2-disk D:\wsl2-run-new\ubuntu-20.04\ext4.vhdx  --version 2 --vhd

ubuntu2004.exe config --default-user xiaof




 

压缩磁盘

wsl服务停止后,在PowerShell中输入命令:

diskpart

此时,系统会自动打开Diskpart窗口,依次执行如下命令

select vdisk file="C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
posted on 2026-02-02 00:39  贝隆  阅读(3)  评论(0)    收藏  举报