Win下使用wsl2导入自定义子系统并更换位置

Win下使用wsl2导入自定义子系统并更换位置


背景介绍

Microsoft官方提供的Linux子系统镜像比较少 一般线上服务器都是采用CentOS等系统 而Microsoft官网并没有提供这种系统的服务 所以本文提供了导入自定义系统的方法
并且由于wsl默认的安装路径是在C盘的 所以对于C盘没有太多位置的小伙伴会很不友好 本文也提供了更换wsl子系统安装位置的方案


安装和启用wsl2

启用功能可能会需要重启

# 启用 WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 启用 VMP
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 设置 WSL2 为默认版本
wsl --set-default-version 2

下载 WSL2 内核更新包并安装。

此处提供wsl的基本操作指令以供参考


迁移wsl

为什么不用 LxRunOffline

截至目前 3.5.0 版本(release 中的最新 3.5.0 ),LxRunOffline 是有问题的(今年四月左右就有的):

> lxrunoffline.exe move -n Debian -d D:\application\wsl\Debian
[ERROR] Couldn't set the case sensitive attribute of the directory "\\?\C:\Users\Paxos\AppData\Local\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\".
Reason: Indicates that the directory trying to be deleted is not empty.

无法迁移 duplicate WSL

所以这里我们没有使用LxRunOffline的方案去做迁移 但是这里还是提供了LxRunOffline的方法

安装LxRunOffline

用管理员权限运行powershell(win+x+a)安装 Chocolatey
···
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))
···
安装成功后可能需要重新启动一下powershell

choco install lxrunoffline

移动wsl发行版

使用微软官方提供的 WSL 命令来实现的思路就是先导出 然后注销掉发行版 再重新注册

缺点就是重新注册后,系统默认的用户会变成 root (uid 1)

查看电脑上安装的 WSL 发行版可以使用 wsl -l -v
下面用 Ubuntu 来作为例子

首先把 Ubuntu导出到指定目录 D:\application\wsl\Ubuntu\Ubuntu.tar (所有数据)

wsl --export UbuntuD:\application\wsl\Ubuntu\Ubuntu.tar

确定导出成功后,就可以注销 Ubuntu发行版了
这个命令会删除目前系统中的 Ubuntu发行版中的所有数据 请确保导出了数据

wsl --unregister Debian

注销后 就可以使用导入命令 --import 来导入发行版
导入的发行版名称还要保持为原来的一样(为了确保 wsl 复制程序能正常工作 如果你不在意也无所谓)
然后指定WSL安装目录到 D:\application\wsl\Ubuntu
安装所用的数据 D:\application\wsl\Ubuntu\Ubuntu.tar (刚刚导出的数据文件)
然后使用 --version 指定版本号 如果使用一代使用 1 二代使用 2 本文使用的是wsl2

wsl --import Ubuntu D:\application\wsl\Ubuntu "D:\application\wsl\Ubuntu\Ubuntu.tar" --version 2

当发行版导入完毕后 还需要设定进入时的默认用户 因为用户会变成默认 uid 为 1 的 root

Ubuntu config --default-user alpha
# 如果你没有 Ubuntu应用程序(卸载了的话),可以用 lxrunoffline 设定 uid
 lxrunoffline.exe su -n Ubuntu-v 1000
 # 如果不想安装可以在 WSL 中使用添加 wsl.conf
echo -e "[user]\ndefault=$myUsername" >> /etc/wsl.conf

使用自定义发行版Linux导入安装wsl子系统

获取发行版的tar文件

此处请确保安装了docker 因为这里是用docker导出tar文件的
找到对应发行版的docker镜像和tag版本号 本文以centos 7.9 版本为例

# 拉取centos 镜像
docker pull centos:centos7.9.2009
# 创建容器,
docker run  [imageId] 
# 列出所有容器找到centOS 的容器ID
docker ps -a
# 导出容器生成tar文件
docker export  -o  F:\centos.tar   [containerId]

其他发行版系统用同样的方法导出即可

安装卸载发行版系统
# 用管理员权限运行powershell
# 导入发行版到到wsl,命令格式:wsl --import <DistroName> <InstallLocation> <InstallTarFile>
wsl --import CentOS7 "F:\Linux\Centos7" "F:\centos.tar"
# 查看安装的wsl 
wsl -l -v
# 启动并进入该系统
wsl -d CentOS7 
# 指定默认的发行版
wsl -s CentOS7 
# 关闭相关实例
wsl --terminate CentOS7 
# 卸载发行版
wsl --unregister CentOS7 

此时我们就已经将系统导入成功了

添加特定用户

默认情况下 使用 wsl --import 时 你总是作为 root 用户启动 可设置自己的用户帐户 但请注意 根据每个不同的 Linux 发行版 设置过程略有不同

可以使用 whoami 查看当前登录用户

打开 CentOS 命令行 使用此命令将 sudo 和密码设置工具安装到 CentOS 中 创建用户帐户 并将其设置为默认用户 在此示例中 用户名为alpha

yum update -y && yum install passwd sudo -y
myUsername=alpha
adduser -G wheel $myUsername
echo -e "[user]\ndefault=$myUsername" >> /etc/wsl.conf
passwd $myUsername

现在必须退出该实例 并确保所有 WSL 实例都已终止 再次启动发行版 在 PowerShell 中运行以下命令以查看新的默认用户

wsl --terminate CentOS7
wsl -d CentOS7
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值