как переместить ubuntu в WSL

как переместить ubuntu в WSL

Когда я начал разрабатывать в , WSLне знаю почему, но я установил Ubuntu-20.04приложение из магазина Microsoft вместо просто Ubuntu. Я знаю, что единственное отличие в том, что оно Ubuntu-20.04не будет автоматически обновляться при Ubuntuвыпуске новой версии. Все, что я хочу сделать, это сделать Ubuntuто же самое Ubuntu-20.04, не перенастраивая его. Я думал переместить все файлы из Ubuntu-20.04в Ubuntu, но не знаю, безопасно ли это делать. Кто-нибудь знает, как сделать то, что я пытаюсь сделать? И стоит ли мне это делать?

правка: обе версии Ubuntu работают, WSL-2я проверил это, используя, wsl -l -vкак сказал @NotTheDr01ds.

правка 2: Я хочу, чтобы вся моя конфигурация от Ubuntu-20.04до Ubuntuвключала все файлы и установленные пакеты

решение1

Почему вам, возможно, вообще не придется этого делать

Ладно, обо всем по порядку. Это, наверное, совершенно излишне.

Тот факт, что «Ubuntu» (без номера версии) в Магазине обновляется автоматически, является... правдой, но на самом деле немного вводит в заблуждение.

Это немного сложно объяснить, но когда вы устанавливаете «Ubuntu» (без версии) из Магазина, вы на самом деле получаетедвавещи:

  • Пакет rootfs ( install.tar.gz) в C:\Program Files\WindowsApps\CanonicalGroup.... Вы можете увидеть это, запустив административный PowerShell и выполнив Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\Canonical*' | Where-Object {$_.Name -eq 'install.tar.gz' } | % { $_.DirectoryName }.

  • При первом запуске (через ubuntu.exe) установщик создает ваш фактический экземпляр WSL в вашем %UserProfile%\AppData\Local\Packages\CanonicalGroup....

Когда в Store появляется новый релиз, единственное, что обновляется — это пакет rootfs. Он делает этонетизменить установленныйпример. (Спасибо u/zoredache на Reddit, который поддерживаетнапоминая мне об этом.)

Для большинства пользователей это бесполезно, если только вы:

  1. Отмените регистрацию экземпляра (что приведет к удалению всей конфигурации) и заново настройте его, повторно выполнив команду ubuntu.exe.
  2. Хотите использовать это install.tar.gzдля создания второго экземпляра WSL/Ubuntu (используя wsl --import). Вновь созданный экземпляр будет использовать обновленную Store rootfs.

Ни один из этих сценариев не является очень распространенным. Даже когда неверсированный Store Ubuntuобновится до (предположительно) 22.04, это не изменит вашустановленэкземпляр 20.04, только rootfsупаковка.

Вам все равно придется запустить , sudo do-release-upgrade -dкогда вы в конечном итоге захотите обновиться до версии 22.04 (или промежуточной версии).

Итак, учитывая это... Поскольку вы уже настроили все Ubuntu-20.04так, как вам нужно, нет большой выгоды вносить изменения, за исключением получения более короткого и понятного Ubuntuимени для экземпляра WSL.

Как это сделать?

Тем не менее, способ, которым WSL2 хранит ваши данные, не так уж и сложен для перемещения конфигураций. Вся файловая система для экземпляра WSL2 хранится на виртуальном жестком диске с именем ext4.vhdx.

Поскольку у вас есть две установки Ubuntu ( Ubuntuи Ubuntu-20.04), вы найдете два из этих ext4.vhdxфайлов в %userprofile%\AppData\Local\Packages\. Чтобы узнать точное расположение, выполните следующее из PowerShell:

Get-ChildItem "$env:USERPROFILE\AppData\Local\Packages\CanonicalGroupLimited*\LocalState\*"

Для моей установки это:

...\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
...\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

На данном этапе решение может быть довольно очевидным, но, конечно, будьте осторожны:

  • Закройте все запущенные экземпляры WSL.

  • Затем wsl --shutdownубедитесь, что в данный момент ничего не запущено.

  • Резервная копия вашей существующей конфигурации не будет плохой идеей wsl --export Ubuntu-20.04 2021-09-26_Ubuntu-20.04_backup.tar(или как вы хотите назвать файл резервной копии). Это по сути создает tarball текущей rootfs, включая все файлы, владельца и разрешения.

  • В этот момент просто скопируйте желаемую (Ubuntu-20.04) ext4.vhdxповерх недавно установленной (Ubuntu). Настоящий трюк заключается в том, чтобы убедиться, что вы копируете нужную. Вы можете запустить свой Ubuntu-20.04дистрибутив и внести быстрые изменения, чтобы вы могли легко увидеть последнюю временную метку на «правильной» копии.

Единственное реальное требование — чтобы пользователь по умолчанию для обоих экземпляров был одним и тем же.


Другая возможность — поскольку вы создали резервную копию нужной конфигурации с помощью wsl --export, вы всегда можете просто скопировать wsl --importее в новый экземпляр с именем Ubuntu.

  • Сначала вам нужно будет удалить Магазин Ubuntu.
  • Затем выберите каталог для вашего нового экземпляра. Он может быть где угодно и больше не обязательно должен находиться в вашем AppDataкаталоге.
  • wsl --import Ubuntu <directory> path\to\2021-09-26_Ubuntu-20.04_backup.tar --version 2

Я храню свои в %userprofile%\Documents\WSL\instancesи tarрезервные копии в %userprofile%\Documents\WSL\images. Это позволяет мне быстро разворачивать новые экземпляры через wsl --import. Приятно иметь возможность что-то тестировать, не влияя на мою повседневную среду.


Примечание для всех пользователей WSL1, читающих это. Корневая файловая система для WSL1 не хранится в файле виртуального жесткого диска, а в виде реальных файлов и каталогов в ...\LocalState\rootfs\. Пожалуйста, не обращайтесь к этим файлам напрямую, так как это может легко привести к повреждению файловой системы WSL (см.Блог разработчиков Microsoft).

Если вам просто нужно получить доступ к файлам из Windows, используйте путь \\wsl$\<distro>в Windows, как указано в этом блоге Microsoft. Но если вам нужно скопировать все, как в этом вопросе, лучшим вариантом будет сначала преобразовать экземпляр в WSL2, через wsl --set-version <distro> 2(сначала сделайте wsl --exportрезервную копию). После преобразования файловая система будет в ext4.vhdxформате WSL2.

Связанный контент