WSL迁移及优化
Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu 14.04 “Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。
1 手动安装
在https://docs.microsoft.com/zh-cn/windows/wsl/install-manual下载安装包,扩展名改为.zip
,解压放在D盘,运行ubuntu.exe
安装
文件放置的位置就是Ubuntu安装的地方
2 迁移
使用LxRunOffline迁移
LxRunOffline move -n Ubuntu -d F:\wsl\Ubuntu
3 优化
3.1 修改apt源
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
sudo tee /etc/apt/sources.list << EOF
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
EOF
3.1.1 更新源索引
sudo apt-get update
3.2 卸载自带vim
Ubuntu预安装的是tiny版本,我们需要安装vim的full版本。
卸载预装的版本
sudo apt -y remove vim-common
安装full版vim
sudo apt -y install vim
3.3 终端配置
3.3.1 修改主机名
在/etc/wsl.conf
里面的[network]下面加一行hostname=WSL
,即可设置WSL的主机名,同时不用修改Windows主机名字。没有/etc/wsl.conf
文件就新建一个。
sudo vi /etc/wsl.conf
wsl 重启之后才会生效
wsl --shutdown
3.3.2 安装zsh终端
sudo apt install zsh
WSL 子系统支持从文件资源管理器访问 Linux 文件
\\wsl$\
3.3.3 安装Oh-My-Zsh(Win10、Ubuntu、Mac应该均适用)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
3.3.3.1 配置主题
配置文件是在用户目录下的.zshrc
文件,可以按照本文前面说的目录位置直接去找到它进行修改,也可以vi修改:
vi ~/.zshrc
查找配置Key字符串ZSH_THEME,将等号后面引号里面的改为“ys”。即:
ZSH_THEME="ys"
3.3.3.2 安装语法高亮插件
注意:将目录切换到~/.oh-my-zsh/custom/plugins
中,然后按照下面步骤进行操作即可。
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
修改.zshrc
文件,plugins 中添加zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
修改.zshrc
文件,plugins 中添加zsh-autosuggestions
3.3.3.3 隐藏命令行前面的用户名和主机名
只保留用户名,隐藏主机名
prompt_context() {
if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
fi
}
3.4 系统信息显示
Neofetch是一个在终端上显示带有发行徽标的Ubuntu Linux系统信息的工具,neofetch命令将显示有关相应系统的简要信息。 它显示的信息包括型号,操作系统,内核,CPU,GPU,内存,正常运行时间,程序包,shell,分辨率,DE,WM,WM主题,主题,图标和终端。
sudo apt -y install neofetch
4 备份
优化完成可以做个备份,实质就是导入导出,同样可以使用此方法迁移。
终止正在运行的wsl
wsl --shutdown
将需要迁移的Linux,进行导出
wsl --export Ubuntu F:\wsl-ubuntu.tar
将原有的分发进行注销
wsl --unregister Ubuntu
导入wsl 备份
wsl --import Ubuntu F:\wsl\Ubuntu F:\wsl-ubuntu.tar --version 2
设置默认登陆用户为安装时用户名
ubuntu config --default-user USERNAME
5 异常
5.1 Error code: Wsl/Service/CreateInstance/MountVhd/ERROR_FILE_NOT_FOUND
无法将磁盘“C:\Users\Administrator\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx”附加到 WSL2: 系统找不到指定的文件。
管理员打开powershell注入注销当前分发版命令解决
wsl --unregister Ubuntu
5.2 Error code: Wsl/Service/CreateInstance/CreateVm/HCS_E_SERVICE_NOT_AVAILABLE
管理员运行PowerShell,执行以下命令后重启电脑
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
5.3 Temporary failure in name resolution
在WSL2中,当设置generateResolvConf = false
时,WSL2将不再生成resolv.conf
文件。这个文件包含用于解析域名的DNS服务器配置信息。因此,如果设置了generateResolvConf = false
,会导致resolv.conf
文件丢失。
手动创建和配置了resolv.conf
文件,WSL2使用其中定义的DNS服务器进行域名解析。