WSL备份与还原
1 利用wsl export/import备份还原linux子系统
1.1 wsl命令介绍
通过wsl --help
查看命令介绍:
1 | 用于运行 Linux 二进制文件的参数: |
1.2 子系统备份与还原
- Step1: 通过
wsl -l -running
查看正在运行的子系统 - Step2: 若有正在运行的子系统,则通过
wsl -t <DistributionName>
来终止其运行 - Step3: 利用
wsl --export <DistributionName> <FileName>
来备份子系统,结果会得到一个tar归档文件。
假设有名为Ubuntu-18.04
的子系统, 想要将结果文件保存为Ubuntu1804.tar
(同时指定其路径即为D:\wsl\Ubuntu1804.tar
),则调用的命令为
wsl --export Ubuntu-18.04 D:\wsl\Ubuntu1804.tar
- Step4: 然后利用
wsl --import <DistributionName> <InstallLocation> <FileName>
来恢复子系统。
例如wsl --import Ubuntu D:\wsl\Ubuntu1804\ D:\wsl\Ubuntu1804.tar
(将新恢复的子系统命名为Ubuntu) - Step5(可选):使用
wsl --unregister Ubuntu-18.04
注销原始子系统。
2 问题及解决方案
2.1 问题描述
新还原的Ubuntu子系统的默认用户会变成root,无论是在Windows Terminal中打开Ubuntu还是在vscode中通过Remote-WSL启动Ubuntu,默认的用户都是root(在原始子系统中vscode-server是安装在个人用户目录下的,还原后默认用户为root就会重新在root目录中重装,且无法使用原来安装的插件,因此必须要想法办修改子系统默认用户)。
2.2 修改wsl子系统默认用户
参考:问题#3974中merkuriy的回答
其思路即修改注册表中相关的键值,即将注册表
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{...}
中的DefaultUid
值设置为子系统用户对应的gid值(通过id -u
来获取,或者直接查看/etc/passwd
文件)。通过定义PowerShell函数,然后调用来实现,具体代码如下:
1 | # 定义函数WSL-SetDefaultUser,接收参数distro和user |
相关文章推荐