🪡WSL迁移
2023-3-12
| 2023-3-12
0  |  阅读时长 0 分钟
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子系统默认用户

参考:问题#3974merkuriy的回答
其思路即修改注册表中相关的键值,即将注册表计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{...}中的DefaultUid值设置为子系统用户对应的gid值(通过id -u来获取,或者直接查看/etc/passwd文件)。通过定义PowerShell函数,然后调用来实现,具体代码如下:
  • 工具
  • WSL2配置 7 种回归模型
    Loading...
    目录