Показать статистику
0 голосов
от (2.3тыс. баллов)

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

обе версии Ubuntu работают, WSL-2 я проверил это wsl -l -v

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

431 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

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

Хорошо, обо всем по порядку. Это, вероятно, довольно ненужно.

То, что "Убунту" (без номера версии) в Магазине автоматически обновляется, это... правда, но на самом деле немного вводит в заблуждение.

Это немного сложно объяснить, но когда вы устанавливаете «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....

Когда в Магазине появляется новая версия, обновляется только пакет rootfs. Это не изменяет установленный экземпляр . 

Это довольно бесполезно для большинства пользователей, если вы:

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

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

Вам все равно нужно будет запустить a, 

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.

  • Во-первых, вам нужно удалить Store 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, читающих это. Rootfs для WSL1 хранится не в файле виртуального жесткого диска, а в виде реальных файлов и каталогов в формате ...\LocalState\rootfs\. Пожалуйста, не обращайтесь к этим файлам напрямую, так как это может легко привести к повреждению файловой системы WSL (см. блог разработчиков Microsoft ).

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

...