Wni11 下 WSL 安装 CentOS
- 方法一、安装包安装
- [方法二、导入 CentOS 的 tar 文件进行安装](#方法二、导入 CentOS 的 tar 文件进行安装)
-
- [0. 查看版本(可选)](#0. 查看版本(可选))
- [1. 导出 Docker 容器到 tar 文件](#1. 导出 Docker 容器到 tar 文件)
- [2. 将 tar 文件导入 WSL](#2. 将 tar 文件导入 WSL)
-
- [2.1. 导入 tar](#2.1. 导入 tar)
- [2.2. 改名(重导)](#2.2. 改名(重导))
- [2.3. 备份还原](#2.3. 备份还原)
- [2.4. 修改默认系统](#2.4. 修改默认系统)
- 三、安装完成
- [WSL 其他常用命令](#WSL 其他常用命令)
- [压缩动态扩展虚拟硬盘 (VHD) 文件的物理大小](#压缩动态扩展虚拟硬盘 (VHD) 文件的物理大小)
- 参考资料
方法一、安装包安装
下载包安装
https://github.com/mishamosher/CentOS-WSL
https://wsldl-pg.github.io/docs/Using-wsldl/#distros
https://github.com/wsldl-pg/CentWSL
安装
解压后运行 CentOS7.exe
即可
打开 CentOS
1. 从 Windows 终端 打开
2. 从 PowerShell 打开
方法二、导入 CentOS 的 tar 文件进行安装
在 docker 中运行一个 CentOS 容器,用 docker exprot
命令导出为 tar
文件。
0. 查看版本(可选)
先查看一下 CentOS 版本,很好是 8.x
前面安装包装的是 7.x
这回装个 8.x
bash
ocker run -it centos /bin/bash
[root@dca578a4bc76 /]# cat /etc/centos-release
CentOS Linux release 8.4.2105
确认版本没问题后,我们按下 Ctrl + P
,然后紧接着按下 Ctrl + Q
这样退出 CentOS,但保持容器不终止。用 docker ps
查看一下容器还在:
bash
C:\Users\jerry>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dca578a4bc76 centos "/bin/bash" 4 minutes ago Up 4 minutes wizardly_hypatia
1. 导出 Docker 容器到 tar 文件
- 我先创建个目录用来存导出文件
D:/OS/CentOS8/
- 执行导出命令,格式:
docker export 容器名 > 导出文件.tar
bash
docker export wizardly_hypatia > D:/OS/CentOS8/centos8.4.2105.tar
- 容器利用完了,可以抛弃它了
bash
docker stop wizardly_hypatia
docker rm wizardly_hypatia
2. 将 tar 文件导入 WSL
2.1. 导入 tar
执行命令格式:wsl --import <发行版名称> <安装目录> <导入文件.tar>
导入成功会在安装目录下生成一个虚拟磁盘镜像文件,比如:ext4.vhdx
bash
wsl --import CentOS8.4.2105 D:\OS\CentOS8 D:\OS\CentOS8\centos8.4.2105.tar
导入完成用 wsl -l -v
查看一下:多了一个 CentOS8.4.2105
bash
C:\Users\jerry>wsl -l -v
NAME STATE VERSION
* docker-desktop Running 2
CentOS8.4.2105 Stopped 2
CentOS7 Stopped 2
Debian Stopped 2
2.2. 改名(重导)
这名称太不合群了,我后悔了,还是改改吧,先注销(注销成功会清除安装目录下的 ext4.vhdx
),重新导。
bash
wsl --unregister CentOS8.4.2105
bash
wsl --import CentOS8 D:\OS\CentOS8 D:\OS\CentOS8\centos8.4.2105.tar
重新导入效果
bash
C:\Users\jerry>wsl -l -v
NAME STATE VERSION
* docker-desktop Stopped 2
CentOS8 Stopped 2
CentOS7 Stopped 2
Debian Stopped 2
2.3. 备份还原
wsl --export
与 wsl --import
配合也可以用来给系统做备份
powershell
# ------ 备份 ------
wsl --export centos8 d:\OS\centos8\bak_001.tar
# ------ 还原 ------
# 卸载
wsl --unregister centos8
# 导入
wsl --import CentOS8 "D:\OS\centos8" "D:\OS\CentOS8\bak20240908.tar"
2.4. 修改默认系统
方便以后 WIN + R
运行 WSL
直接进 CentOS8
bash
wsl -d centos8
bash
C:\Users\jerry>wsl -l -v
NAME STATE VERSION
CentOS7 Running 2
* CentOS8 Stopped 2
Debian Stopped 2
docker-desktop Stopped 2
操作完后碰到要我更新,又装了一下这个 适用于 x64 计算机的 WSL2 Linux 内核更新包
三、安装完成
1. 开启 systemctl
systemctl 默认没开启,配置一下,重启就可以了^1^
执行命令:
bash
echo -e "[boot]\nsystemd=true" | sudo tee -a /etc/wsl.conf
它的作用是将如下信息写入 /etc/wsl.conf
bash
[boot]
systemd=true
注意:接下来要先用 wsl -t centos7
停掉 centos7
,再启动 centos7
才生效:
bash
# 查看一下版本信息
systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
2. 修改默认主机名
注意:这里按原来 centos
修改主机名的方法是没用的。
登录进来可以看到,默认主机名用的就是宿主系统 Win11 的主机名。看着容易精神分裂,我还是改改:
还是改 /etc/wsl.conf
^2^,然后重启生效。
bash
[boot]
systemd=true
[user]
default=jerry
[network]
hostname=centos7
generateHosts=true
重启后进来,主机名变了:
Shell
[jerry@centos7 ~]$
3. 修复命令行高亮丢失的问题
-
在
~/.bashrc
末尾追加一句(网上找到),喜欢折腾的朋友可以自己研究^3^powershellexport PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ "
执行
source ~/.bashrc
生效。
-
当然哪果你装了多个 Linux 子系统,也可以去别的版本找参考。(打开我的电脑,看左下角)
4. 设置阿里云的 CentOS 国内源
先备份
bash
cp -rv /etc/yum.repos.d /etc/yum.repos.d_bak
再修改源
bash
sudo sed -i.bak 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
sudo sed -i.bak 's|^#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-*.repo
sed
:这是一个文本处理工具,常用于在 Linux 和 Unix 系统中执行简单的文本模式替换。-i
:这个选项告诉sed
在原地修改文件,而不是将结果输出到标准输出(即终端)。
加上.bak
表示修改前做备份。's|目标|结果|g'
:这是sed
的替换命令语法。
s
表示替换命令。
|
作为分隔符,用于分隔命令的不同部分。
g
:全局标志,表示在同一行中进行所有的替换,而不仅仅是第一次匹配。
将所有以mirrorlist
替换为#mirrorlist
,也就是在开头加#
注释掉。
将所有包含#baseurl=http://mirror.centos.org
的行修改为阿里云的 CentOS 镜像地址
。/etc/yum.repos.d/CentOS-*.repo
:此路径匹配/etc/yum.repos.d/
目录下所有以CentOS-
开头.repo
结尾的文件。
更新走一波
bash
yum update
装一下 vim
bash
yum -y install vim
WSL 其他常用命令
以我们前面安装的 CentOS8 为例
-
wls -t CentOS8
停止子系统运行 -
wsl -v
查看 WSL 的版本信息bashC:\Users\jerry>wsl -v WSL 版本: 2.2.4.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.61 MSRDC 版本: 1.2.5326 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.26091.1-240325-1447.ge-release Windows 版本: 10.0.22000.1936
-
如果 root 忘记密码可以直接
--user root
以 root 身份登录,再passwd root
改密码bashwsl -u root -d centos8
压缩动态扩展虚拟硬盘 (VHD) 文件的物理大小
减小动态扩展虚拟硬盘 (VHD) 文件的物理大小。 此参数非常有用,因为动态扩展 VHD 的大小会随着文件的添加而增加,但不会随着文件的删除而自动减小。
-
先把子系统都停掉
powershellwsl --shutdown
-
打开 diskpart
powershelldiskpart
-
执行
powershellselect vdisk file=D:\OS\CentOS7\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk
参考资料
适用于 Linux 的 Windows 子系统文档
导入要与 WSL 一起使用的任何 Linux 发行版