
Когда я начал разрабатывать в , 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, который поддерживаетнапоминая мне об этом.)
Для большинства пользователей это бесполезно, если только вы:
- Отмените регистрацию экземпляра (что приведет к удалению всей конфигурации) и заново настройте его, повторно выполнив команду
ubuntu.exe
. - Хотите использовать это
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.