Как восстановить accidentally удаленную папку /etc из ubuntu wsl2

Вопрос или проблема

Папка /etc была случайно удалена в Ubuntu-20.04 WSL. У меня нет резервной копии, но есть ext4.vhdx в пути LocalState в Windows. Возможно ли восстановить из этого ext4.vhdx? Мне нужно восстановить папку /etc и снова запустить WSL. Пожалуйста, помогите.

.vhdx — это виртуальный диск вашего Ubuntu. Он содержит файловую систему. Вы удалили каталог /etc из файловой системы, следовательно, вы удалили его и из виртуального диска.

Просто примите это, удалите виртуальную машину и создайте новую.

Практически все мы узнали о важности резервных копий на собственном опыте. Это просто человеческая природа.

Как упомянул Peregrino69, вы не сможете восстановить ничего из ext4.vhdx, так как это просто “живое” файловое окружение на виртуальном диске. После того, как вы удалили /etc, его сразу же не стало в ext4.vhdx.

Хотя ниже я предоставлю инструкции, если вы действительно хотите попробовать, мой личный совет будет похож на мнение Peregrino69. Я бы начал заново.

Тем не менее, я бы по крайней мере сделал резервную копию вашего домашнего каталога (tar cvzf home.tgz ~) из вашей установки сначала. Таким образом вы сможете вернуть его обратно в вашу новую установку.

Вы также можете выполнить wsl --export Ubuntu backup.tar, чтобы получить снимок текущего экземпляра целиком.

После того как вы сделали резервную копию, вы можете выполнить wsl --unregister <distroname> (оставив имя дистрибутива вам для подтверждения, так как это разрушительная операция).

Это удалит весь экземпляр и все файлы в виртуальной файловой системе.

Затем вы можете переустановить просто запустив ubuntu.exe (или ubuntu2004.exe, в зависимости от версии Store, которую вы установили).

Что “восстановимо” (а что нет)

Что Восстановимо?
/etc в том состоянии, в котором оно существовало после вашей первой установки WSL/Ubuntu Да
Ваше имя пользователя/пароль по умолчанию, который вы задали во время начальной конфигурации Ubuntu Нет, но может быть легко воссоздан с помощью useradd
Любая конфигурация, добавленная в /etc пакетами, которые вы устанавливали вручную Возможно
Любая конфигурация, добавленная в /etc вами вручную или с помощью ручного выполнения команды (например, useradd) Нет, эти файлы придется воссоздать вручную

Если вас это устраивает …

Создайте снимок/резервную копию

Только чтобы быть “в безопасности”, я бы рекомендовал создать резервную копию экземпляра WSL:

wsl --export <distroName> <filename.tar>

Запуск WSL без /etc

Хорошая новость в том, что выполнение команды wsl и запуск Ubuntu без /etc все же, по крайней мере, приводит к работе в деградированном состоянии. Поскольку /etc/passwd отсутствует, вы будете “UID/GID 0”, даже не root. Вы также будете по умолчанию запускаться в dash. Так что давайте начнем, по крайней мере, получая более функциональный шелл, запустив bash.

Поскольку ваш приглашение будет что-то вроде:

I have no name!@Host:dir>

Вы можете захотеть укоротить его с помощью PS1='$(pwd)> '. Это совершенно необязательно, конечно, но я нашел это полезным для улучшения читаемости.

Восстановление начального /etc/ из образа rootfs WSL/Ubuntu

Наша первая цель — восстановить /etc в состояние, в котором она существовала после вашей первоначальной установки. Чтобы это сделать, мы будем использовать образ rootfs, который идет с пакетом Appx для Ubuntu, который вы установили из Microsoft Store.

Сначала нам нужно его найти. Начните с выполнения:

package=""*Ubuntu*""
powershell.exe -c "Get-AppxPackage | Where-Object { \$_.Name -like $package }"

Если возвращается только один результат, отлично. Если нет, измените переменную package, чтобы сделать ее более конкретной — '"*UbuntuonWindows*"' или '"*Ubuntu20.04onWindows*"'. Как только вы сможете выполнить команду и получить только один результат …

packageLocation=$(powershell.exe -c "(Get-AppxPackage | Where-Object { \$_.Name -like $package })[0].InstallLocation" | tr -d "\r\n")
packageLocation=$(wslpath "$packageLocation")
tar -C / -xvzf "${packageLocation}/install.tar.gz" "etc/" 

Это находит пакет Store Appx (UWP), запрашивает его местоположение на диске, а затем извлекает файлы в etc/ из install.tar.gz обратно в ваш /etc.

Выходите из WSL, выполните wsl --shutdown и перезапустите.

Теперь вы снова должны быть root (вместо просто UID 0) и в вашем оболочке по умолчанию (вероятно, bash).

Воссоздайте своего пользователя по умолчанию

useradd --user-group --groups  adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev --shell /usr/bin/bash --password $(read -sp Password: pw ; echo $pw | openssl passwd -1 -stdin) <username>

Воссоздайте конфигурационные файлы для пакетов, установленных вручную

Это задача, и часть, которая заставляет меня согласиться с другими, что вам лучше удалить экземпляр и начать заново.

Вам в основном нужно повторно запустить установку для каждого ранее установленного пакета (список хранится в /var, так что он все еще целостен) и заставить его воссоздать любые конфигурационные файлы в /etc, а также любые postinst сценарии, которые его модифицировали (например, добавление групп или пользователей).

Вы можете получить список всех установленных вручную пакетов с помощью:

apt-mark showmanual

И вы можете получить список пакетов, которые разместили файлы в /etc, с помощью:

dpkg -V

Но порядок переустановки зависит от зависимостей, и ваши шансы на то, что все будет настроено “правильно”, на мой взгляд, крайне малы.

Неудача на этом шаге или на следующем оставит вашу установку в нестабильном состоянии и все равно потребует полной переустановки.

Ручные конфигурации

На этом этапе, если были какие-либо изменения, которые вы можете вспомнить и которые могли повлиять на /etc, постарайтесь воссоздать их.

Ответ или решение

Как восстановить случайно удалённую папку /etc в Ubuntu WSL2

Случайная потеря папки /etc в Ubuntu, работающем под WSL2 (Windows Subsystem for Linux), может привести к проблемам с работоспособностью вашей системы. В этом руководстве мы рассмотрим шаги, необходимые для восстановления папки /etc, а также дадим рекомендации по предотвращению подобных ситуаций в будущем.

1. Понимание ситуации

Папка /etc содержит важные конфигурационные файлы для операционной системы и установленных приложений. Если вы случайно удалили эту папку и не сделали резервную копию, восстановление может быть непростым. Однако с использованием файла ext4.vhdx, который находится в папке LocalState под Windows, возможно восстановление изначального состояния системы.

2. Бэкапы и первоначальные действия

Прежде чем предпринимать шаги по восстановлению, сделайте резервную копию вашей текущей установки:

  • Выполните команду wsl --export <имя_дистрибутива> <backup.tar>, чтобы создать полный снимок вашей системы.
  • Также можно сохранить домашнюю директорию с помощью tar cvzf home.tgz ~.

Это создаст точку восстановления на случай, если что-то пойдёт не так во время процесса восстановления.

3. Удаление старой установки

Если восстановить данные не удалось, и вы хотите начать заново, выполните следующие шаги:

  1. Убедитесь, что вы сохранили все необходимые данные.
  2. Используйте команду wsl --unregister <имя_дистрибутива>, чтобы удалить текущую установку дистрибутива. Учтите, что это приведёт к потере всех данных на виртуальном диске.

4. Установка нового дистрибутива

После удаления вы можете установить Ubuntu заново, загрузив дистрибутив из Microsoft Store или с официального сайта.

5. Восстановление конфигурационных файлов

Если вы хотите восстановить папку /etc из исходного состояния, выполните следующие действия:

  1. Найдите оригинальный пакет .appx для вашего дистрибутива Ubuntu. Для этого запустите PowerShell и выполните:

    package="*Ubuntu*"
    Get-AppxPackage | Where-Object { $_.Name -like $package }
  2. Найдя путь установки, извлеките папку /etc:

    packageLocation=$(powershell.exe -c "(Get-AppxPackage | Where-Object { $_.Name -like $package })[0].InstallLocation" | tr -d "\r\n")
    packageLocation=$(wslpath "$packageLocation")
    tar -C / -xvzf "${packageLocation}/install.tar.gz" "etc/"

Это восстановит стандартные конфигурационные файлы, которые были изначально частью дистрибутива.

6. Создание нового пользователя

После восстановления вы, вероятно, окажетесь в состоянии, когда не сможете войти в систему под своим обычным пользователем. Воспользуйтесь следующей командой для создания нового пользователя:

useradd --user-group --groups adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev --shell /usr/bin/bash --password $(read -sp Password: pw ; echo $pw | openssl passwd -1 -stdin) <username>

7. Восстановление конфигураций установленных пакетов

По возможности переустановите пакеты, которые вы устанавливали вручную. Для этого сначала получите список вручную установленных пакетов:

apt-mark showmanual

Затем переустановите каждый из пакетов, чтобы восстановить любые файлы конфигурации, которые они создали в /etc.

8. Заключение и рекомендации

Проблемы с потерей данных под WSL2 чаще всего можно избежать с помощью регулярного создания резервных копий. Используйте встроенные инструменты для экспорта и импортирования ваших установок, а также хранилища данных под Windows для защиты ваших данных.

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

Оцените материал
Добавить комментарий

Капча загружается...