Как сохранить среду WSL Linux при выполнении «сброса» системы Windows 10?

Как сохранить среду WSL Linux при выполнении «сброса» системы Windows 10?

Эта почтаупоминает простое восстановление каталога 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используя следующий метод.

    1. Сначала установите дистрибутив из Магазина. Я знаю, вы хотите восстановить свойстарыйустановить, но мы собираемся использовать эту новую установку, чтобы сделать это. Вы всегда можете удалить дистрибутив Store, когда мы закончим.

    2. Запустите этот дистрибутив.

    3. Создайте /etc/wsl.confс помощью следующего:

      [automount]
      options = "metadata"
      
    4. Следующий,

      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это сделаете, вы захотите увидеть /каталог этой установки.

    5. Из этого каталога tar cvf recovery.tar .. Установка WSL1 займет некоторое время.

    6. sudo mv recovery.tar <somewhere>else на C:диске; что-то вроде /mnt/c/Users/<youruser>/Documents/wsl(это близко к тому, что я использую для этого). Это будет новое местоположение дистрибутива, когда мы закончим.

    7. Выйти из WSL

    8. Из PowerShell перейдите в каталог, куда вы поместили recovery.tar.

    9. mkdir OldUbuntu(или как вы хотите это назвать)

    10. wsl --import OldUbuntu .\OldUbuntu .\recovery.tar. Команда также может иметь --version 1/2(в конце) для принудительного выбора версии WSL.

    11. При желании сделайте эту установку WSL установкой по умолчанию с wsl --set-default OldUbuntu.

    12. Запустите дистрибутив с помощью wsl ~ -d OldUbuntu. -d/--distributionАргумент требуется только в том случае, если вы не установили его по умолчанию выше.

    13. Создайте файл /etc/wsl.confсо следующим содержимым:

      [user]
      default=username
      

      Измените его usernameна то имя пользователя, которое было в дистрибутиве до сброса Windows.

    14. При желании удалите дистрибутив, который мы установили и использовали для создания tarball.

    Это должно быть так. На самом деле я проверил это с немного другим сценарием. Я установил экземпляр WSL1, затем выполнил на нем описанный выше процесс с другого экземпляра. Мне удалось успешно выполнить --importэто после выполнения описанных выше шагов. Владение файлами/каталогами и разрешения выглядят правильными, как и символические ссылки. Единственное, что меня беспокоит, — может ли действительно старый дистрибутив WSL использовать другие метаданные.

    Предупреждение: Пожалуйста, попробуйте это только на файловой системе WSL1, если у вас нет другого способа восстановить ее. Доступ к файлам в файловой системе WSL1 через %AppData%(или эквивалент)известно, что вызывает коррупцию. Вот почему я сам создал одноразовый экземпляр, чтобы опробовать это.

    Примечание: Вы можете подумать о том, tarчтобы загрузить файлы из Windows.oldWindows, а не проходить через хлопоты по установке другого экземпляра WSL. Меня беспокоит, что это не захватитЛинуксправа собственности и разрешения, что, скорее всего, приведет к повреждению установки при wsl --importзапуске.

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