前言
由于电脑系统损坏,重装了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是上一个系统创建的,新的系统有时候会无法访问,这里我试过两种方式,都是可行的,只要不是剪切重命名貌似都可以
- 使用copy命令,或者在文件管理器里复制粘贴进行覆盖
copy D:\Ubuntu-18.04-wsl-old\ext4.vhdx D:\Ubuntu-18.04-wsl\ext4.vhdx
- 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