使用 Multistrap 工具制作根文件系统,Multistrap是一个工具,可以用来构建一个完整的、可启动的、根文件系统。这个根文件系统可以被 Docker 和 WSL 使用。
首先需要下载 Linux 内核更新包,参考:旧版 WSL 的手动安装步骤 | Microsoft Learn
打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
wsl --set-default-version 2
yangtze.multistrap 是配置文件。
bash build.sh
sudo tar -cf ok.tar.gz -C /yangtze-rootfs .
在新位置导入WSL。
选一个存放虚拟磁盘的文件夹,起名为openkylin。
将openkylin-docker中下载的ok.tar.gz复制到上面的文件夹里面,比如复制到了d:\openkylin
,然后执行下面的命令:
cd d:\openkylin
wsl --import openkylin .\ .\ok.tar.gz --version 2
上面的openkylin是容器名,可以自定义,但是自己改完之后后面修改默认用户会比较麻烦。
默认用户为xxx,密码:35785214
Root密码:35785214
可以使用wsl -d openkylin
进入系统中,此时进入的是root账户。
passwd root
可以修改root
账户密码。useradd -g sudo xxxx
passwd xxxx
mkdir /home/xxxx
chmod 777 -R ~
(本来应该设置755,但一些程序运行不对劲,所以这里改777了)现在已经有了账户,但默认登陆还是root。
如果想改成上面的xxxx,可以随便找一个wsl的安装程序,比如deepin.exe
,用他来快速配置:
deepin.exe
拷贝到c:\openkylin
并改名成openkylin.exe
.\openkylin.exe config --default-user xxxx
如果不报错,默认用户就变成xxxxx了上面的方法可以用,但是不建议;可参考下面的方法二设置默认用户:
使用 wsl.conf
进行配置,进入 wsl ,编辑 wsl.conf
配置文件:
sudo vim /etc/wsl.conf
添加如下内容:
[user]
default = xxx #xxx 是你想要设置的用户名、前提是已经创建并配置好了
保存配置并退出,同样在关闭 wsl 之后重新进入,便会发现默认用户已经修改了。
wsl --list --running
wsl --shutdown
wsl
wsl.conf
配置优先级 较高,更安全一些。
注册表丢失的情况 笔者在重装系统之前, 是通过 Microsoft Store 安装的 Ubuntu 发行版. 应用商店中的数据一般在以下目录:
%LocalAppData%/Packages
重置系统 (选择保留个人数据) 后, 数据文件会被 迁移 到 Windows.old 中, 也就在以下目录:
C:/Windows.old/Users/%UserName%/AppData/Local/Packages
其中, 商店里安装的 Ubuntu 发行版对应的包名会以 CanonicalGroupLimited.Ubuntu 开头, 打开对应的目录后, 在 LocalState 中就能找到 .vhdx 文件
事实上, 重装系统后, 许多其他软件的数据也能从 Windows.old 中恢复. 为了防止 Windows.old 在一段时间后被清清除, 建议及时备份 Windows.old 中的用户文件
可以将 .vhdx 文件剪切出来, 放在某个目录下, 比如 D:/wslinstall/ubuntu20.04
之后, 根据下面的文件模板编写一个 REG 文件(用TXT写完之后改为REG即可), 重建安装信息, 再导入注册表即能恢复 WSL 安装:
Windows Registry Editor Version 5.00
[HKEY_USERS\[SID]\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\{[UUID]}]
"State"=dword:00000001
"DistributionName"="[DISTRO_NAME]"
"Version"=dword:00000002
"BasePath"="\\\\?\\[VHDX_PATH]"
"Flags"=dword:0000000f
"DefaultUid"=dword:000003e8
项 | 替换说明 |
---|---|
[SID] | 打开 “命令提示符”, 使用 whoami /user 命令获取到自己 (当前用户) 的 SID |
[UUID] | 可以去[UUID 生成网站]随机生成一个 UUID |
[DISTRO_NAME] | 指定发行版的名称, 比如 Ubuntu
|
[VHDX_PATH] | 发行版所在的路径, 并将反斜线转义, 比如 D:\\WSL\\Ubuntu
|
比如, 在上文中我们假设文件存储在了 D:/wslinstall/ubuntu20.04
目录下, 那么一个可用的 REG 文件就类似如下所示:
Windows Registry Editor Version 5.00
[HKEY_USERS\<你的 SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\{8ebf13b4-6ce3-4027-a2c7-f84ab4dad111}]
"State"=dword:00000001
"DistributionName"="Ubuntu 20.04"
"Version"=dword:00000002
"BasePath"="\\\\?\\D:\\wslinstall\\ubuntu20.04"
"Flags"=dword:0000000f
"DefaultUid"=dword:000003e8
将内容保存成后缀名为 reg 的文件, 比如一个名为 wsl-info.reg 的文件, 这样在 Windows 资源管理器中双击就可以完成导入.
导入完成后, 就可以在 Windows Termial 或者 wsl
命令中找到这个发行版了.
需要迁移 WSL 2 的情况:
类似的, 只需要有 WSL 的 VHDX 文件, 重新建立注册表即可. 注意使用对应用户的 SID
wsl --export ok D:\ok-wsl\ok.tar
如果想压缩成gz,那就再在wsl下加一行:
gzip ok.tar
准备好 tar 文件后,可使用以下命令导入它:wsl --import <Distro> <InstallLocation> <FileName>
。
将 CentOS 发行版 tar 文件导入 WSL:
打开 PowerShell,并确保已创建一个要存储发行版的文件夹。
PowerShell复制
cd C:\temp
mkdir E:\wslDistroStorage\CentOS
使用命令 wsl --import <DistroName> <InstallLocation> <InstallTarFile>
导入 tar 文件。
PowerShell复制
wsl --import CentOS E:\wslDistroStorage\CentOS .\centos.tar
使用命令 wsl -l -v
检查已安装的发行版。
最后,使用命令 wsl -d CentOS
运行新导入的 CentOS Linux 发行版。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。