- Вопрос или проблема
- Что “восстановимо” (а что нет)
- Создайте снимок/резервную копию
- Запуск WSL без /etc
- Восстановление начального /etc/ из образа rootfs WSL/Ubuntu
- Воссоздайте своего пользователя по умолчанию
- Воссоздайте конфигурационные файлы для пакетов, установленных вручную
- Ручные конфигурации
- Ответ или решение
- Как восстановить случайно удалённую папку /etc в Ubuntu WSL2
- 1. Понимание ситуации
- 2. Бэкапы и первоначальные действия
- 3. Удаление старой установки
- 4. Установка нового дистрибутива
- 5. Восстановление конфигурационных файлов
- 6. Создание нового пользователя
- 7. Восстановление конфигураций установленных пакетов
- 8. Заключение и рекомендации
Вопрос или проблема
Папка /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. Удаление старой установки
Если восстановить данные не удалось, и вы хотите начать заново, выполните следующие шаги:
- Убедитесь, что вы сохранили все необходимые данные.
- Используйте команду
wsl --unregister <имя_дистрибутива>
, чтобы удалить текущую установку дистрибутива. Учтите, что это приведёт к потере всех данных на виртуальном диске.
4. Установка нового дистрибутива
После удаления вы можете установить Ubuntu заново, загрузив дистрибутив из Microsoft Store или с официального сайта.
5. Восстановление конфигурационных файлов
Если вы хотите восстановить папку /etc
из исходного состояния, выполните следующие действия:
-
Найдите оригинальный пакет .appx для вашего дистрибутива Ubuntu. Для этого запустите PowerShell и выполните:
package="*Ubuntu*" Get-AppxPackage | Where-Object { $_.Name -like $package }
-
Найдя путь установки, извлеките папку
/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 для защиты ваших данных.
Проведение регулярных бэкапов поможет вам избежать потерь и сохранить данные в случае необходимости восстановления системы.