欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将 Windows 子系统 Ubuntu 18.04 的 rootfs 切换到其他盘

程序员文章站 2024-02-23 21:31:28
...

前言


1、概要

Windows 下使用子系统 (如:Ubuntu)有多爽相信用过的都知道。

但这里有一个问题,那就是默认情况下,Windows 的 Ubuntu 子系统的根文件系统默认使用的是 Windows 的 C 盘。

大多数据 Windows 用户都知道的情况是 C 盘影响系统的运行,而且 C 盘的空间一般不会太大(如果你的系统只有一个 C 盘分区请忽略)。比如:

aaa@qq.com:/$ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          100G   61G   40G  61% /
none            100G   61G   40G  61% /dev
none            100G   61G   40G  61% /run
none            100G   61G   40G  61% /run/lock
none            100G   61G   40G  61% /run/shm
none            100G   61G   40G  61% /run/user
tmpfs           100G   61G   40G  61% /sys/fs/cgroup
C:\             100G   61G   40G  61% /mnt/c
D:\             376G  299G   78G  80% /mnt/d
E:\             1.9T  1.5T  376G  80% /mnt/e

从上面可以看出,我的 C 盘只有 100 GB 大小,而且已经使用了 61 GB 空间了,剩余空间并不多了。

所以,这种情况下,如果 Windows 的c子系统还运行在 C 盘,那么空间就很吃紧了。

 

2、相关环境

  • Windows 10 Professional

  • Ubuntu 18.04 LTS

 

3、注意事项

必须要 Windows 10 1903 或者以后版本才能使用下述的方法。如果是更高的 Windows 版本,请参考附录中链接使用 LxRunOffline 进行迁移。

原文链接如下,转载请注明出处:

https://www.jiangzhuolin.com/5795.html

 

迁移过程


1、查看你当前安装的子系统

打开一个 Windows CDM 窗口,可以使用如下命令查看当前 Windows 中安装的所有子系统的分发版及名称。

wsl -l

示例:

C:\Users\jiang> wsl -l
适用于 Linux 的 Windows 子系统分发版:
Ubuntu-18.04 (默认)

可以看到,我的 Windows 中当前只有一个子系统分发版,Ubuntu-18.04

 

2、导出分发子系统

执行如下命令即可以将当前已安装的某个分发版子系统文件导出为一个 .tar 的压缩包。

wsl --export <DISTRIBUTION_NAME> <export path>\<export name>.tar

示例:

C:\User\jiang> wsl --export Ubuntu-18.04 %USERPROFILE%\ubuntu-18.04.tar

 

注:

(1) %USERPROFILE% 表示的是当前用户的家目录,如 C:\User\jiang,可以自行指定导出位置

(2) 导出后的文件如下图所示,ubuntu-18.04.tar 大小 1.34 GB

 

将 Windows 子系统 Ubuntu 18.04 的 rootfs 切换到其他盘

 

 

3、注销原分发子系统

使用 wsl --unregister <DISTRIBUTION_NAME> 注销指定的子系统

wsl --unregister <DISTRIBUTION_NAME>

如下示例:

C:\Users\jiang>wsl -l
适用于 Linux 的 Windows 子系统分发版:
Ubuntu-18.04 (默认)

C:\Users\jiang>wsl --unregister Ubuntu-18.04
正在注销...

C:\Users\jiang>wsl -l
适用于 Linux 的 Windows 子系统没有已安装的分发版。
可以通过访问 Microsoft Store 来安装分发版:
https://aka.ms/wslstore

 

4、在 D 盘创建子系统运行目录

在 D 盘创建目录,如下示例:

D:\WSL\Ubuntu-18.04

注:创建的目录路径与名称都是自定的,创建过程略。

 

5、导入子系统

执行如下命令导入子系统

wsl --import <IMPORT_DISTRIBUTION_NAME> <IMPORT_PATH> <EXPORT_PATH>

示例:

C:\User\jiang> wsl --import Ubuntu-18.04 d:\WSL\Ubuntu-18.04 %USERPROFILE%\ubuntu-18.04.tar

注:如果没有执行第 3 步,则 <IMPORT_DISTRIBUTION_NAME> 与 <EXPORT_DISTRIBUTION_NAME> 不能相同,比如我导出时的分发版本是 Ubuntu-18.04,我导入时就不能再指定 Ubuntu-18.04。

 

6、查看当前所有子系统 

C:\Users\jiang> wsl -l
适用于 Linux 的 Windows 子系统分发版:
Ubuntu-18.04 (默认)

 

7、验证

(1) 查看文件系统

从导入的目录下可以查看到 D:\WSL\Ubuntu-18.04 下已经有一个叫 rootfs 的目录了

 

将 Windows 子系统 Ubuntu 18.04 的 rootfs 切换到其他盘

 

(2) 运行查看子系统挂载信息

 

使用 wsl -d Ubuntu-18.04 运行子系统,直接进入 Linux shell 命令行,使用 df -h 可以看到 rootfs 已经移动到 D 盘了。

C:\Users\jiang>wsl -l --running
没有正在运行的分发。

C:\Users\jiang>wsl -l
适用于 Linux 的 Windows 子系统分发版:
Ubuntu-18.04 (默认)

C:\Users\jiang>wsl -l --running
没有正在运行的分发。

C:\Users\jiang>wsl -d Ubuntu-18.04
aaa@qq.com:/mnt/c/Users/jiang#
aaa@qq.com:/mnt/c/Users/jiang#
aaa@qq.com:/mnt/c/Users/jiang# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          376G  300G   76G  80% /
none            376G  300G   76G  80% /dev
none            376G  300G   76G  80% /run
none            376G  300G   76G  80% /run/lock
none            376G  300G   76G  80% /run/shm
none            376G  300G   76G  80% /run/user
tmpfs           376G  300G   76G  80% /sys/fs/cgroup
C:\             100G   76G   25G  76% /mnt/c
D:\             376G  300G   76G  80% /mnt/d
E:\             1.9T  1.5T  376G  80% /mnt/e

 

附录


参考:

https://*.com/questions/38779801/move-wsl-bash-on-windows-root-filesystem-to-another-hard-drive

还可以参考 github 大佬写的一键迁移 WSL 的脚本:

https://github.com/pxlrbt/move-wsl