Перемещение файловой системы WSL2 на другой диск

Вопрос или проблема

В отличие от WSL1, официальные документы для WSL2 четко указывают, что я должен размещать файлы, к которым я часто обращаюсь из Linux, в файловой системе Linux. Однако я не нашел никаких документов о настройках, где внутри файловой системы Windows размещается файловая система Linux.

Конечно, местоположение по умолчанию (где-то под %LOCALAPPDATA%) является субоптимальным, если вы, как и я, настроили свою машину с минимальным диском C:\ и гораздо большими D:\ – мне гораздо удобнее разместить файловую систему Linux там, чтобы использовать все это пространство.

Могу ли я как-то контролировать, где размещается моя файловая система Linux?

(У меня нет WSL 2, чтобы попробовать.)

WSL поддерживает экспорт и импорт дистрибутивов, как это:

wsl --export Debian C:\temp\Debian.tar
wsl --import MovedDebian C:\WSL\Debian C:\temp\Debian.tar --version 2

Обратите внимание, как я могу указать параметр под названием InstallLocation (C:\WSL\Debian). Имейте в виду, что в моем примере дистрибутив “Debian” все еще существует, поэтому я выбираю другое имя при импорте. Вы можете использовать утилиту wsl для управления своими WSL окружениями.

Если вы хотите переместить дистрибутив WSL2 Linux (Ubuntu) с диска C: на диск D:, ниже приведены шаги.

Экспорт Ubuntu

  • mkdir D:\backup
  • wsl –export Ubuntu D:\backup\ubuntu.tar

Отмените регистрацию того же дистрибутива, чтобы удалить его с диска C:

  • wsl –unregister Ubuntu

Импортируйте Ubuntu

  • mkdir D:\wsl
  • wsl –import Ubuntu D:\wsl\ D:\backup\ubuntu.tar

По умолчанию Ubuntu будет использовать root как пользователя по умолчанию, чтобы переключиться обратно на предыдущего пользователя

Перейдите в папку приложения Ubuntu и выполните команду, чтобы установить пользователя по умолчанию

  • cd %userprofile%\AppData\Local\Microsoft\WindowsApps
  • ubuntu config –default-user <имя_пользователя>

Это пример с ubuntu18.04.
Было несколько мест, где вышеописанное было недостаточно детализировано. Надеюсь, это поможет.

wsl --list --verbose
mkdir d:\backuplinux
wsl --export Ubuntu-18.04 d:\backuplinux\ubuntu.tar
wsl --unregister Ubuntu-18.04
mkdir d:\wsl
wsl --import Ubuntu-18.04 d:\wsl\ d:\backuplinux\ubuntu.tar
cd %userprofile%\AppData\Local\Microsoft\WindowsApps            **(это не нужно, если в пути)**
ubuntu1804.exe config --default-user yourloginname

По состоянию на WSL 2.3.11 (в настоящее время предварительная версия), WSL теперь включает встроенную опцию командной строки для перемещения дистрибутива в новое место:

Предполагая, что вы на версии “Приложение” WSL (большинство установок за последние 2 года), вы можете обновить с помощью:

wsl --update --pre-release

Вы можете затем переместить любой дистрибутив WSL2 (не WSL1), используя:

wsl --manage <имя_дистрибутива> --move <новое_местоположение>

Это должно в основном иметь тот же конечный результат, что и @TiborTakács’ ответ.

Оригинальный ответ для более старых версий WSL

Последние версии WSL2 включают новый параметр wsl --import --vhd, чтобы напрямую скопировать существующий VHD (виртуальный SDD-диск для вашего дистрибутива WSL2) в другое место. Обратите внимание, что это будет работать только с дистрибутивами WSL2, а не WSL1.

Также обратите внимание, что важно выбрать новое, другое имя для скопированного дистрибутива. Например, если ваш дистрибутив называется “Ubuntu”, новое имя может быть “my_Ubuntu” (я называю свой “ntd_Ubuntu”).

Выйдите из WSL (и, если вы используете, выключите Docker Desktop), затем из PowerShell (обычный терминал без прав администратора):

wsl --shutdown

# Найдите местоположение существующего дистрибутива:

Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | 
    ForEach-Object { 
        (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath 
    }

# Скопируйте  дистрибутива, который вы хотите скопировать 
# в буфер обмена, чтобы вы могли вставить его в команду --import
# ниже.

# Создайте каталог на другом диске для дистрибутива
mkdir d:\WSL\distros\<новое_имя_дистрибутива>

wsl --import <новое_имя_дистрибутива> d:\WSL\distros\<новое_имя_дистрибутива> <BasePath>\ext4.vhdx --vhd

WSL создаст новый дистрибутив с именем <новое_имя_дистрибутива> в каталоге на D:.

Вы можете запустить этот дистрибутив с помощью:

wsl ~ -d <новое_имя_дистрибутива>

Поскольку это новый дистрибутив, WSL необходимо сообщить, каким является пользователь по умолчанию. Тем временем он начнет с пользователя root. Используйте этот ответ, чтобы создать файл /etc/wsl.conf, чтобы указать пользователя по умолчанию.

Когда вы будете довольны тем, что новый дистрибутив работает так же, как старый, вы можете удалить старый с помощью:

# Внимание: это разрушительная и необратимая операция
# Пожалуйста, убедитесь в правильном имени дистрибутива
wsl --unregister <старое_имя_дистрибутива>

Вы можете установить новый дистрибутив по умолчанию с помощью:

wsl --set-default <новое_имя_дистрибутива>

В том же духе, это пример с ubuntu20.04 на Windows 10.
Это было протестировано на моем настольном компьютере. Это сэкономило 30 ГБ на моем диске C.

Диск Ubuntu находится по адресу %userprofile%\AppData\Local\Packages
CanonicalGroupLimited.Ubuntu20.04onWindows_…\LocalState\ext4.

Сначала выключите wsl и подтвердите имя.

wsl --shutdown
wsl --list --verbose

  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2

Затем вы можете экспортировать файл tar и импортировать его на диск D:

mkdir d:\backuplinux
wsl --export Ubuntu-20.04 d:\backuplinux\ubuntu.tar
wsl --unregister Ubuntu-20.04
mkdir d:\wsl
wsl --import Ubuntu-20.04 d:\wsl\ d:\backuplinux\ubuntu.tar
ubuntu2004.exe config --default-user yourloginname

Проверьте d:\wsl, файл ext4 перемещен сюда. Также проверьте свободное пространство на вашем диске C. Вы должны увидеть большую разницу.

Я нашел подход, который не требует удаления (отмены регистрации) и импорта существующего дистрибутива.

  1. Остановите дистрибутив, который вы хотите переместить: wsl --terminate Ubuntu или wsl --shutdown.

  2. Создайте резервную копию, просто чтобы быть уверенным: wsl --export Ubuntu D:\Ubuntu-backup.tar.

  3. Запустите Редактор реестра (regedit.exe – требуются повышенные права).

  4. Перейдите к Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\. Здесь вы можете найти все существующие дистрибутивы. Найдите тот, который вы хотите переместить, основываясь на записи DistributionName (в моем случае это Ubuntu).

  5. Запись BasePath показывает текущее местоположение диска. В моем случае: C:\Users\myuser\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState. Если вы откроете эту папку, вы увидите, что в ней есть один файл ext4.vhdx. Это файл диска.

  6. Скопируйте этот файл в место, где вы хотите его иметь. Например, cp C:\Users\myuser\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx D:\wsl\Ubuntu\.

  7. Измените запись BasePath в Редакторе реестра, чтобы указать на новое местоположение ext4.vhdx.

  8. Просто запустите дистрибутив WSL, он будет использовать диск в новом местоположении. На этом этапе вы можете удалить файл диска из оригинального места.

Кросс-пост из другого ответа

  1. wsl –terminate имя_дистрибутива
  2. переместите файл ext4.vhdx в новое_местоположение
  3. wsl –unregister имя_дистрибутива
  4. wsl –import-in-place имя_дистрибутива файл_ext4.vhdx_в_новом_местоположении

Обратите внимание, что вам нужно быть на последней версии, но я могу подтвердить, что это работает.

Обратите внимание, что после выполнения принятого ответа вам нужно установить Ubuntu в качестве дистрибутива по умолчанию и снова запустить его. В противном случае система вернется к Docker.

Вот как это сделать:

$ wsl --set-default Ubuntu
$ wsl -d Ubuntu

Ответ или решение

Чтобы переместить файловую систему WSL2 на другой диск, следуйте пошаговым инструкциям, которые описаны ниже. Этот процесс включает экспорт вашей текущей дистрибуции Linux, её удаление из локального хранилища и последующий импорт в новое местоположение. Подробно рассмотрим этот процесс.

Шаг 1: Подготовка

Перед началом процесса убедитесь, что у вас установлены все последние обновления Windows и WSL. Также убедитесь, что у вас есть достаточно места на новом диске, куда вы собираетесь переместить файловую систему.

Шаг 2: Экспорт дистрибуции

  1. Создайте папку для резервной копии:
    Откройте проводник Windows и создайте папку на новом диске для хранения резервных файлов. Пример:

    mkdir D:\backup
  2. Экспортируйте вашу дистрибуцию (например, Ubuntu):
    В командной строке (cmd) или PowerShell выполните команду:

    wsl --export Ubuntu D:\backup\ubuntu.tar

    Это создаст файл резервной копии вашей дистрибуции в формате .tar.

Шаг 3: Удаление дистрибуции

  1. Удалите существующую дистрибуцию:
    Убедитесь, что дистрибуция не работает. Выполните команду:

    wsl --unregister Ubuntu

    Это удалит дистрибуцию из вашего локального хранилища.

Шаг 4: Импорт дистрибуции

  1. Создайте папку для хранения новой дистрибуции:
    Вы можете создать другую папку на диске D: для новой дистрибуции. Пример:

    mkdir D:\wsl
  2. Импортируйте дистрибуцию:
    Далее, выполните следующую команду для импорта созданного файла:

    wsl --import Ubuntu D:\wsl\ D:\backup\ubuntu.tar --version 2

    Это создаст новую дистрибуцию Ubuntu в вашем указанном месте.

Шаг 5: Настройка пользователя по умолчанию

  1. Установите пользователя по умолчанию:
    После завершения импорта, дистрибуция будет использовать пользователя root по умолчанию. Чтобы изменить это, выполните команду:

    cd %userprofile%\AppData\Local\Microsoft\WindowsApps
    ubuntu.exe config --default-user <ваше_имя_пользователя>

Здесь <ваше_имя_пользователя> — это имя пользователя, который вы хотите установить по умолчанию.

Проверка успешности

  1. Запустите дистрибуцию:
    Просто введите wsl или wsl -d Ubuntu в командной строке, и ваша дистрибуция должна запуститься в новом месте.

  2. Проверьте, что файловая система действительно была перемещена, а пространство на диске С: уменьшилось.

Альтернативные методы

Существует также последний метод, который позволяет перемещать дистрибуции без их удаления:

  1. Остановите дистрибуцию:

    wsl --shutdown
  2. Создайте резервную копию дистрибуции:

    wsl --export Ubuntu D:\Ubuntu-backup.tar
  3. Используйте редактор реестра для изменения пути:
    Найдите в реестре (regedit) записи о вашей дистрибуции и измените BasePath на новое местоположение, где вы переместили файл ext4.vhdx.

Данный процесс позволит вам эффективно освободить место на диске C: и использовать больше пространства на вашем D:drive для WSL2.

Заключение

Перемещение файловой системы WSL2 на другой диск может существенно улучшить производительность вашего устройства, особенно если на диске C: недостаточно свободного места. Следуя приведенным выше шагам, вы сможете в кратчайшие сроки завершить этот процесс. Не забывайте о важности создания резервных копий и правильной настройки пользователя по умолчанию для сохранения привычного рабочего процесса.

Оцените материал
Добавить комментарий

Капча загружается...