【原创】将 Windows 子系统 Ubuntu 18.04 的 rootfs 切换到其他盘

前言

1、概要

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

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

大多数据 Windows 用户都知道的情况是 C 盘影响系统的运行,而且 C 盘的空间一般不会太大。比如:

jiangzl@DESKTOP-3CSI1G5:/$ 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 盘,那么空间就很吃紧了。

本文分享如何将 Windows 子系统的 rootfs 迁移到其他盘的方法!

2、相关环境

  • Windows 10 Professional

  • Ubuntu 18.04 LTS

3、注意事项

必须要 Windows 10 1903 或者以后版本才能使用下述的方法。

正文

1、查看你当前的子系统

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

wsl -l

示例:

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

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

2、导出子系统

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

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 的目录了

(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
root@DESKTOP-3CSI1G5:/mnt/c/Users/jiang#
root@DESKTOP-3CSI1G5:/mnt/c/Users/jiang#
root@DESKTOP-3CSI1G5:/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

总结

迁移了子系统后,就可以愉快地玩耍 Linux 系统而不用担心把磁盘占满了,如果你也想一机两用,强烈建议进行子系统文件系统迁移。

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

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

附录

参考:

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

You may also like...

发表评论

电子邮件地址不会被公开。