Вопрос или проблема
В отличие от 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. Вы должны увидеть большую разницу.
Я нашел подход, который не требует удаления (отмены регистрации) и импорта существующего дистрибутива.
-
Остановите дистрибутив, который вы хотите переместить:
wsl --terminate Ubuntu
илиwsl --shutdown
. -
Создайте резервную копию, просто чтобы быть уверенным:
wsl --export Ubuntu D:\Ubuntu-backup.tar
. -
Запустите Редактор реестра (
regedit.exe
– требуются повышенные права). -
Перейдите к
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\
. Здесь вы можете найти все существующие дистрибутивы. Найдите тот, который вы хотите переместить, основываясь на записиDistributionName
(в моем случае этоUbuntu
). -
Запись
BasePath
показывает текущее местоположение диска. В моем случае:C:\Users\myuser\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState
. Если вы откроете эту папку, вы увидите, что в ней есть один файлext4.vhdx
. Это файл диска. -
Скопируйте этот файл в место, где вы хотите его иметь. Например,
cp C:\Users\myuser\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx D:\wsl\Ubuntu\
. -
Измените запись
BasePath
в Редакторе реестра, чтобы указать на новое местоположениеext4.vhdx
. -
Просто запустите дистрибутив WSL, он будет использовать диск в новом местоположении. На этом этапе вы можете удалить файл диска из оригинального места.
Кросс-пост из другого ответа
- wsl –terminate имя_дистрибутива
- переместите файл ext4.vhdx в новое_местоположение
- wsl –unregister имя_дистрибутива
- wsl –import-in-place имя_дистрибутива файл_ext4.vhdx_в_новом_местоположении
Обратите внимание, что вам нужно быть на последней версии, но я могу подтвердить, что это работает.
Обратите внимание, что после выполнения принятого ответа вам нужно установить Ubuntu в качестве дистрибутива по умолчанию и снова запустить его. В противном случае система вернется к Docker.
Вот как это сделать:
$ wsl --set-default Ubuntu
$ wsl -d Ubuntu
Ответ или решение
Чтобы переместить файловую систему WSL2 на другой диск, следуйте пошаговым инструкциям, которые описаны ниже. Этот процесс включает экспорт вашей текущей дистрибуции Linux, её удаление из локального хранилища и последующий импорт в новое местоположение. Подробно рассмотрим этот процесс.
Шаг 1: Подготовка
Перед началом процесса убедитесь, что у вас установлены все последние обновления Windows и WSL. Также убедитесь, что у вас есть достаточно места на новом диске, куда вы собираетесь переместить файловую систему.
Шаг 2: Экспорт дистрибуции
-
Создайте папку для резервной копии:
Откройте проводник Windows и создайте папку на новом диске для хранения резервных файлов. Пример:mkdir D:\backup
-
Экспортируйте вашу дистрибуцию (например, Ubuntu):
В командной строке (cmd) или PowerShell выполните команду:wsl --export Ubuntu D:\backup\ubuntu.tar
Это создаст файл резервной копии вашей дистрибуции в формате
.tar
.
Шаг 3: Удаление дистрибуции
-
Удалите существующую дистрибуцию:
Убедитесь, что дистрибуция не работает. Выполните команду:wsl --unregister Ubuntu
Это удалит дистрибуцию из вашего локального хранилища.
Шаг 4: Импорт дистрибуции
-
Создайте папку для хранения новой дистрибуции:
Вы можете создать другую папку на диске D: для новой дистрибуции. Пример:mkdir D:\wsl
-
Импортируйте дистрибуцию:
Далее, выполните следующую команду для импорта созданного файла:wsl --import Ubuntu D:\wsl\ D:\backup\ubuntu.tar --version 2
Это создаст новую дистрибуцию Ubuntu в вашем указанном месте.
Шаг 5: Настройка пользователя по умолчанию
-
Установите пользователя по умолчанию:
После завершения импорта, дистрибуция будет использовать пользователя root по умолчанию. Чтобы изменить это, выполните команду:cd %userprofile%\AppData\Local\Microsoft\WindowsApps ubuntu.exe config --default-user <ваше_имя_пользователя>
Здесь <ваше_имя_пользователя>
— это имя пользователя, который вы хотите установить по умолчанию.
Проверка успешности
-
Запустите дистрибуцию:
Просто введитеwsl
илиwsl -d Ubuntu
в командной строке, и ваша дистрибуция должна запуститься в новом месте. -
Проверьте, что файловая система действительно была перемещена, а пространство на диске С: уменьшилось.
Альтернативные методы
Существует также последний метод, который позволяет перемещать дистрибуции без их удаления:
-
Остановите дистрибуцию:
wsl --shutdown
-
Создайте резервную копию дистрибуции:
wsl --export Ubuntu D:\Ubuntu-backup.tar
-
Используйте редактор реестра для изменения пути:
Найдите в реестре (regedit) записи о вашей дистрибуции и изменитеBasePath
на новое местоположение, где вы переместили файлext4.vhdx
.
Данный процесс позволит вам эффективно освободить место на диске C: и использовать больше пространства на вашем D:drive для WSL2.
Заключение
Перемещение файловой системы WSL2 на другой диск может существенно улучшить производительность вашего устройства, особенно если на диске C: недостаточно свободного места. Следуя приведенным выше шагам, вы сможете в кратчайшие сроки завершить этот процесс. Не забывайте о важности создания резервных копий и правильной настройки пользователя по умолчанию для сохранения привычного рабочего процесса.