wsl导入已有的ext4.vhdx

前言

由于电脑系统损坏,重装了windows系统,我大部分工作环境都在wsl下,所以将wsl的ext4.vhdx文件copy出来备份了,但重装完系统后怎么从ext4.vhdx文件中启动我的wsl呢?发现网上并没有这方面比较好的教程,我来记录下我折腾的过程
我的wsl子系统是Ubuntu-18.04,系统是windows11专业版

原理

先安装一个新的和之前版本一样的wsl子系统,再用旧的ext4.vhdx替换掉新的

注意,如果只是文件重命名一下,可能会出现旧的ext4.vhdx和新的权限不一致问题,会导致wsl子系统无法启动,所以需要将旧的ext4.vhdx文件内容完整覆盖新的文件,不是简单的重命名替换

1. 安装wsl

安装教程很多,就不细讲,自行搜索吧

注意,安装一个跟你ext4.vhdx一样的发行版子系统,我这里是Ubuntu-18.04,所以我的安装命令是:

wsl --install -d Ubuntu-18.04
wsl --update 

2. 迁移wsl【可省略】

wsl默认安装在C盘,下次重装系统一不小心就格式化了,所以一般我会先迁移到其他盘符
可以参考我的备份还原教程:https://www.jianshu.com/p/37b5f4b3d02c
比如我这里迁移到d:\Ubuntu-18.04-wsl文件夹下,使用到的命令就是:

wsl --terminate Ubuntu-18.04
wsl --export Ubuntu-18.04 d:\Ubuntu-18.04-wsl.tar
wsl --unregister Ubuntu-18.04
wsl --import Ubuntu-18.04 d:\Ubuntu-18.04-wsl d:\Ubuntu-18.04-wsl.tar

执行完上述命令后,在d:\Ubuntu-18.04-wsl文件夹下就会有一个ext4.vhdx文件了

3. 替换ext4.vhdx

将旧的ext4.vhdx文件copy到新的里,避免权限问题,因为旧的ext4.vhdx是上一个系统创建的,新的系统有时候会无法访问,这里我试过两种方式,都是可行的,只要不是剪切重命名貌似都可以

  1. 使用copy命令,或者在文件管理器里复制粘贴进行覆盖
copy D:\Ubuntu-18.04-wsl-old\ext4.vhdx D:\Ubuntu-18.04-wsl\ext4.vhdx
  1. python脚本, 使用copy命令会修改新ext4.vhdx的权限属性,如果想完整保留新ext4.vhdx的属性,我写了个python脚本,只覆盖文件内容,不修改任何属性
in_p = r"d:/Ubuntu-18.04-wsl-old/ext4.vhdx"
out_p = r"d:/Ubuntu-18.04-wsl/ext4.vhdx"

buf_size = 1024 * 1024 * 1024
with open(in_p, "rb") as in_f:
    with open(out_p, "wb") as out_f:
        while True:
            data = in_f.read(buf_size)
            if data:
                out_f.write(data)
                print("wrote: ", buf_size)
            else:
                print("done")
                break

你可能感兴趣的:(wsl导入已有的ext4.vhdx)