WSL2 home目录迁移
参考:https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands
参考:https://learn.microsoft.com/zh-cn/windows/wsl/wsl2-mount-disk
有了WSL2加持的windows,说其是最好的Linux桌面发行版一点也不过分。但是,WSL2虽好,奈何C盘不够大。怎么办呢?作为一名优秀的工程师(ban zhuan gong),当然是有问题解决问题了。
动手第一步第一步,永远都是备份啦!!!
1. 备份当前WSL
WSL2使用虚拟硬盘文件 (VHD)文件来存储所有数据,所以备份很简单,只需要找到这个文件,备份它就可以了。
每个 WSL 2 发行版都通过名为 ext4.vhdx 的虚拟硬盘文件进行存储。 默认情况下,WSL 2 发行版的 VHD 存储在以下路径中:C:\Users\[user]\AppData\Local\Packages\[distro]\LocalState\[distroPackageName]
,请谨慎访问这些系统文件,这是一个高级用户工作流。 确保在与该磁盘交互之前运行 wsl --shutdown
以确保该磁盘未被使用。
Tips:如果找不到怎么办,别忘了好用的搜索工具:Everything
wsl -l -v
# wsl --shutdown -d <Distribution Name>
wsl --shutdown -d Ubuntu-18.04
# cp 原ext4.vhdx文件 新ext4.vhdx文件
cp C:\Users\landa\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx H:\bak\ext4.vhdx
2. 不太推荐的懒方法
其实玩过虚拟机的都知道,直接导入刚才拷贝出来的ext4.vhdx应该也是可以的,因为这个文件现在不在C盘,就不会占用C盘的空间了,但是呢,这样导入的用起来还是又诸多不方便,比如退出后整个WSL2就退出了,下次又得重新来过。不过,这里还是简单的写下方法:
- 切记,不要再刚才的备份文件上直接干!!!
2.1 从vhdx文件导入WSL
mkdir H:\wsl\Ubuntu18.04
cp H:\bak\ext4.vhdx H:\wsl\Ubuntu18.04
wsl --update
# wsl --import-in-place <Distribution Name> <FileName>
wsl --import-in-place Ubuntu .\ext4.vhdx
参考:https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands#import-a-distribution-in-place
2.2 启动测试
# wsl -d <Distribution Name>
wsl -d Ubuntu
你会发现默认是用root用户启动的,所以我们可能还想改回原来的默认用户
2.3 改默认用户
参考:https://learn.microsoft.com/zh-cn/windows/wsl/use-custom-distro#add-wsl-specific-components-like-a-default-user
# myUsername=caloewen
# adduser -G wheel $myUsername
# echo -e "[user]\ndefault=$myUsername" >> /etc/wsl.conf
# passwd $myUsername
echo -e "[user]\ndefault=limu" >> /etc/wsl.conf
wsl --terminate Ubuntu
wsl -d Ubuntu
3. 优雅的迁移方法
我们采用给原WSL瘦身,然后mount非C盘的vhdx文件来作为WSL2的home目录,这样既能保留原有方便的操作,还能解决磁盘不够用的问题。
3.1 原WSL瘦身
3.1.1 删除原WSL2的home目录下的大文件
# rm -rf /home/limu/*
3.1.2 WSL 关机
wsl -l -v
wsl --shutdown -d Ubuntu-18.04
3.1.3. 压缩
参考:https://learn.microsoft.com/zh-cn/windows/wsl/disk-space#how-to-expand-the-size-of-your-wsl-2-virtual-hard-disk
在 PowerShell 中执行
diskpart
在diskpart程序中,选择要压缩的ext4.vhdx文件
# 选择虚拟磁盘文件
select vdisk file="C:\Users\landa\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx"
# 压缩文件
compact vdisk
# 压缩完毕后卸载磁盘
detach v
3.2 挂载新的vhdx文件来作为WSL2的home目录
wsl --mount --vhd H:\wsl\Ubuntu18.04\ext4.vhdx
powershell中执行上面的命令后,就可以将文件挂载到WSL的/mnt/wsl/
路径下,但是每次开机都手动执行太麻烦,所以建议加入开机自动挂载。
3.2.1加入开机自动挂载
win+E
打开资源管理器,在地址栏输入 shell:startup
创建一个bat文件,将上面的命令写入。
3.2.2创建软连接,替换原home目录
wsl -d Ubuntu
cd /home
sudo mv limu limu_bak
sudo ln -s /mnt/wsl/HwslUbuntu1804ext4vhdx/home/limu/ limu
至此,替换完成,可以愉快的继续coding了。