文章目录
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