type
status
password
date
slug
summary
category
URL
tags
icon
win10系统中Linux子系统默认安装在C盘,在使用过程中,其体量会越来越大,挤占C盘原本就不大的磁盘空间,影响系统运转。因此,很有必要将子系统从C盘迁移到别的磁盘。本文介绍如何利用
wsl export/import
来迁移Linux子系统,以及迁移过程中遇到的问题迁移步骤
- 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 --unregister Ubuntu-18.04
注销原始子系统。
- Step5: 然后利用
wsl --import <DistributionName> <InstallLocation> <FileName>
来恢复子系统。例如wsl --import Ubuntu-18.04 D:\wsl\Ubuntu1804\ D:\wsl\Ubuntu1804.tar
(将新恢复的子系统命名为Ubuntu-18.04)
问题及解决方案
1 问题描述
新还原的Ubuntu-18.04子系统的默认用户会变成root,无论是在Windows Terminal中打开Ubuntu-18.04还是在vscode中通过Remote-WSL启动Ubuntu-18.04,默认的用户都是root(在原始子系统中vscode-server是安装在个人用户目录下的,还原后默认用户为root就会重新在root目录中重装,且无法使用原来安装的插件,因此必须要想法办修改子系统默认用户)。
2 修改wsl子系统默认用户
参考:问题#3974中merkuriy的回答
其思路即修改注册表中相关的键值,即将注册表
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{...}
中的DefaultUid
值设置为子系统用户对应的gid值(通过id -u
来获取,或者直接查看/etc/passwd
文件)。通过定义PowerShell函数,然后调用来实现,具体代码如下: