WSL迁移及优化

警告
本文最后更新于 2023-09-20,文中内容可能已过时。

Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu 14.04 “Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。

WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。

https://docs.microsoft.com/zh-cn/windows/wsl/install-manual下载安装包,扩展名改为.zip,解压放在D盘,运行ubuntu.exe安装

文件放置的位置就是Ubuntu安装的地方

使用LxRunOffline迁移

下载地址

1
LxRunOffline move -n Ubuntu -d F:\wsl\Ubuntu
1
2
3
4
5
6
7
8
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
1
sudo apt-get update

Ubuntu预安装的是tiny版本,我们需要安装vim的full版本。

卸载预装的版本

1
sudo apt -y remove vim-common

安装full版vim

1
sudo apt -y install vim

/etc/wsl.conf里面的[network]下面加一行hostname=WSL,即可设置WSL的主机名,同时不用修改Windows主机名字。没有/etc/wsl.conf文件就新建一个。

1
sudo vi /etc/wsl.conf

image-20230719103331753

wsl 重启之后才会生效

1
wsl --shutdown
1
sudo apt install zsh

WSL 子系统支持从文件资源管理器访问 Linux 文件

1
\\wsl$\
1
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

配置文件是在用户目录下的.zshrc文件,可以按照本文前面说的目录位置直接去找到它进行修改,也可以vi修改:

1
vi ~/.zshrc

查找配置Key字符串ZSH_THEME,将等号后面引号里面的改为“ys”。即:

1
ZSH_THEME="ys"

注意:将目录切换到~/.oh-my-zsh/custom/plugins中,然后按照下面步骤进行操作即可。

1
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

1
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

修改.zshrc文件,plugins 中添加zsh-autosuggestions

https://img.bwcxtech.com/img/20200928175531.png

只保留用户名,隐藏主机名

1
2
3
4
5
prompt_context() {
  if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
  fi
}

Neofetch是一个在终端上显示带有发行徽标的Ubuntu Linux系统信息的工具,neofetch命令将显示有关相应系统的简要信息。 它显示的信息包括型号,操作系统,内核,CPU,GPU,内存,正常运行时间,程序包,shell,分辨率,DE,WM,WM主题,主题,图标和终端。

1
sudo apt -y install neofetch

优化完成可以做个备份,实质就是导入导出,同样可以使用此方法迁移。

终止正在运行的wsl

1
wsl --shutdown

将需要迁移的Linux,进行导出

1
wsl --export Ubuntu F:\wsl-ubuntu.tar

将原有的分发进行注销

1
wsl --unregister Ubuntu

导入wsl 备份

1
wsl --import Ubuntu F:\wsl\Ubuntu F:\wsl-ubuntu.tar --version 2

设置默认登陆用户为安装时用户名

1
ubuntu config --default-user USERNAME

无法将磁盘“C:\Users\Administrator\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx”附加到 WSL2: 系统找不到指定的文件。

管理员打开powershell注入注销当前分发版命令解决

1
wsl --unregister Ubuntu

管理员运行PowerShell,执行以下命令后重启电脑

1
2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

在WSL2中,当设置generateResolvConf = false时,WSL2将不再生成resolv.conf文件。这个文件包含用于解析域名的DNS服务器配置信息。因此,如果设置了generateResolvConf = false,会导致resolv.conf文件丢失。

手动创建和配置了resolv.conf文件,WSL2使用其中定义的DNS服务器进行域名解析。