
Эта почтаупоминает простое восстановление каталога WSL, частично восстановившее WSL, но с некоторыми проблемами функциональности.Эта почтадает общую информацию о том, как выполнить резервное копирование и восстановление установки Linux.Эта почтаговорит, что %appdata% на самом деле перемещен в папку Windows.old, которая создается после сброса и содержит ваши "старые" файлы. ) Какая информация могла быть утеряна в первом эксперименте с постером? Есть ли какие-то настройки реестра или файлы конфигурации, которые позволили бы просто восстановить корневой каталог Linux ( %USERPROFILE%/AppData/Local/lxss
) для работы?
РЕДАКТИРОВАТЬ
Мой вопрос был отмечен как дубликатКак сделать резервную копию (WSL) подсистемы Linux для Windows 10 перед сбросом или переустановкой системы?.
Однако этот вопрос был только о том, как сделать резервную копию установки — по сути, заархивировать ее и сохранить где-нибудь. Я специально спрашиваю о том, как ее восстановить.
решение1
Очень старый вопрос, который подняли сегодня, и за 4 года с момента, как был задан вопрос, многое изменилось. Я на самом деле сделал "Сброс" на моем ежедневном драйвере несколько лет назад и у меня была похожая ситуация.
Тогда лучшее, что вы могли сделать, это скопировать что-либоданныеиз старой файловой системы. Когда был задан этот вопрос, эта файловая система обычно находилась (как вы упоминаете в вопросе) где-то под %USERPROFILE%\AppData\Local\lxss
. Я поверю вам на слово, поскольку точно не помню, и у меня больше нет таких старых установок.
В какой-то момент, вероятно, когда WSL начал поддерживать несколько дистрибутивов, папка WSL1 изменилась на %USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs
. Когда я делал сброс на своем ПК несколько лет назад, я восстановил tar
этот каталог, а затем восстановил отдельные файлы (но не всю файловую систему, как вы спрашиваете) после сброса и переустановки WSL. Я не рассматривал Windows.old
, но это был бы допустимый способ получить доступ и к этим файлам.
В настоящее время, да,довыполнение сброса wsl --export
можно выполнить, как указано в другом ответе здесь.
Но если пользователь не думает этого делать, томожетвсе еще возможно полностью восстановить файловую систему после сброса с помощью Windows.old
. Есть два сценария:
WSL2 делает это довольно просто, так как вся файловая система хранится на виртуальном диске в
%USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs\ext4.vhdx
. Смотритеэтот ответдля получения подробной информации, но вы можете просто скопировать егоext4.vhdx
изWindows.old
одной установки в другую.С WSL1 я90% уверенчто вы можете восстановить установку WSL,
Windows.old
используя следующий метод.Сначала установите дистрибутив из Магазина. Я знаю, вы хотите восстановить свойстарыйустановить, но мы собираемся использовать эту новую установку, чтобы сделать это. Вы всегда можете удалить дистрибутив Store, когда мы закончим.
Запустите этот дистрибутив.
Создайте
/etc/wsl.conf
с помощью следующего:[automount] options = "metadata"
Следующий,
cd /mnt/C/Windows.old/Users/<yourusername>/AppData/Local/Packages/<PackageName>/LocalState/rootfs
<PackageName>
будет зависеть от вашего дистрибутива, но будет начинаться сCanonical...
для дистрибутивов Ubuntu. Если ваша установка WSL достаточно старая, она может быть/mnt/C/Windows.old/Users/<yourusername>/AppData/Local/lxss
. Когда выls
это сделаете, вы захотите увидеть/
каталог этой установки.Из этого каталога
tar cvf recovery.tar .
. Установка WSL1 займет некоторое время.sudo mv recovery.tar <somewhere>
else наC:
диске; что-то вроде/mnt/c/Users/<youruser>/Documents/wsl
(это близко к тому, что я использую для этого). Это будет новое местоположение дистрибутива, когда мы закончим.Выйти из WSL
Из PowerShell перейдите в каталог, куда вы поместили
recovery.tar
.mkdir OldUbuntu
(или как вы хотите это назвать)wsl --import OldUbuntu .\OldUbuntu .\recovery.tar
. Команда также может иметь--version 1/2
(в конце) для принудительного выбора версии WSL.При желании сделайте эту установку WSL установкой по умолчанию с
wsl --set-default OldUbuntu
.Запустите дистрибутив с помощью
wsl ~ -d OldUbuntu
.-d/--distribution
Аргумент требуется только в том случае, если вы не установили его по умолчанию выше.Создайте файл
/etc/wsl.conf
со следующим содержимым:[user] default=username
Измените его
username
на то имя пользователя, которое было в дистрибутиве до сброса Windows.При желании удалите дистрибутив, который мы установили и использовали для создания tarball.
Это должно быть так. На самом деле я проверил это с немного другим сценарием. Я установил экземпляр WSL1, затем выполнил на нем описанный выше процесс с другого экземпляра. Мне удалось успешно выполнить
--import
это после выполнения описанных выше шагов. Владение файлами/каталогами и разрешения выглядят правильными, как и символические ссылки. Единственное, что меня беспокоит, — может ли действительно старый дистрибутив WSL использовать другие метаданные.Предупреждение: Пожалуйста, попробуйте это только на файловой системе WSL1, если у вас нет другого способа восстановить ее. Доступ к файлам в файловой системе WSL1 через
%AppData%
(или эквивалент)известно, что вызывает коррупцию. Вот почему я сам создал одноразовый экземпляр, чтобы опробовать это.Примечание: Вы можете подумать о том,
tar
чтобы загрузить файлы изWindows.old
Windows, а не проходить через хлопоты по установке другого экземпляра WSL. Меня беспокоит, что это не захватитЛинуксправа собственности и разрешения, что, скорее всего, приведет к повреждению установки приwsl --import
запуске.