Как правильно подготовить chroot для восстановления сломанной установки Linux?

Этот вопрос относится к часто задаваемым вопросам. Процедура часто упоминается или связана с выездом, но не часто четко и правильно изложена. Чтобы сконцентрировать полезную информацию в одном месте, этот вопрос призван дать четкую и правильную ссылку на эту процедуру.


Как правильно подготовить среду chroot для процедуры восстановления?

Во многих ситуациях восстановление поврежденной установки Linux лучше всего выполнить изнутри установки. Но если система не загружается, как это исправить изнутри?

Предположим, вам удалось загрузить альтернативную систему. Оказавшись там, вам нужно получить доступ к вашей сломанной установке, чтобы исправить это. Многие специалисты по восстановлению How-Tos рекомендуют использовать chroot для запуска программ, как будто вы действительно загружены в сломанную установку.

  • Какова основная процедура?
  • Существуют ли передовые практики для подражания?
  • Какие переменные необходимо учитывать, чтобы адаптировать основные подготовительные этапы к конкретной задаче восстановления?

Так как это Вики Сообщества, не стесняйтесь редактировать этот вопрос, чтобы улучшить его.

1 ответ

Решение

Вот некоторые ресурсы:

"Изменение корня" или "chrooting" - это метод увеличения части вашей файловой системы, например, для /path будет ссылаться на то, что раньше было доступно в /mnt/path, "Корень" в выражении "chroot" относится к корневой файловой системе /не для пользователя root. (Хотя, как правило, вам понадобятся привилегии пользователя root для того, чтобы выполнить chroot.)

подготовка

  • Все шаги в этом руководстве должны быть выполнены от имени пользователя root.

  • Мы предполагаем, что ваш жесткий диск находится в /dev/sda1, а его тип файла - ext3. Если вы не знаете местоположение и тип файла вашего диска, прочитайте вывод fdisk -l,

  • Убедитесь, что архитектуры системы, в которую вы загрузились (например, это 32-битный LiveCD), и системы, в которую вы хотите войти (например, это 32-битная установка на вашем жестком диске), совпадают. Вы можете определить архитектуру, с которой вы загрузились, используя uname -m,

  • Убедитесь, что все модули ядра, которые вам нужны, были загружены.

  • Настройте свою сеть, если вам это нужно (например, для установки обновленных пакетов).

  • При необходимости инициализируйте раздел подкачки (например, swapon /dev/sda3).

Выполнение chroot

cd /
mount -t ext3 /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev

Если твой /boot каталог находится на другом разделе от вашего /и вы хотите манипулировать файлами на нем (например, если вы будете работать с GRUB, выполнять обновление ядра и т. д.), вам также потребуется смонтировать этот раздел. Если он находится в /dev/sda2, а его тип файла - ext2, выполните:

mount -t ext2 /dev/sda2 /mnt/boot

Аналогично для любых других частей вашей файловой системы (/var, /usr), которые находятся на отдельных разделах, но к которым вам нужен доступ. Обычно, когда вы используете chroot для исправления чего-либо, вам не нужен доступ к /home, поэтому вам не нужно беспокоиться об этом.

(Также возможно монтировать файловые системы после того, как вы выполните chroot, но это разумнее сделать заранее. Причина в том, что когда вы делаете это после, внешняя среда / ядро ​​не будет знать о смонтированных файловых системах, поэтому, если вы забудете Размонтируйте их перед выходом из chroot, и система не будет знать о том, как размонтировать их при завершении работы. Это может повредить эти файловые системы.)

Если вы настроили свою сеть и хотите использовать ее в системе chroot, скопируйте /etc/resolv.conf так что вы сможете разрешать доменные имена:

cp -L /etc/resolv.conf /mnt/etc/resolv.conf

Теперь вы готовы перейти к смонтированной файловой системе:

chroot /mnt /bin/bash

(Если это возвращает ошибку chroot: cannot run command '/bin/bash': Exec format errorобычно это означает, что вы загрузились с одной архитектурой (например, x86_32) и пытаетесь выполнить загрузку с другой (например, x86_64). Решение состоит в том, чтобы использовать LiveCD, который имеет ту же архитектуру, что и система, в которую вы хотите войти.)

На этом этапе вы все еще используете ядро, с которым загрузились, но все пути /path будет ссылаться на то, что раньше /mnt/path,

Если вы будете делать что-то с GRUB, вы должны быть уверены, что ваш /etc/mtab файл актуален:

grep -v rootfs /proc/mounts > /etc/mtab

На этом этапе также может быть полезно:

source /etc/profile
export PS1="(chroot) $PS1"  # add a reminder to your prompt

Делай свою грязную работу

На этом этапе вы можете выполнить любые необходимые действия по устранению неполадок:

  • повторно запустите GRUB на MBR вашего диска
  • сбросить забытый пароль
  • выполнить обновление ядра (или понижение версии)
  • восстановить свой initramdisk
  • исправьте ваш /etc/fstab
  • переустановите пакеты, используя менеджер пакетов
  • без разницы

Убираться

Когда вы закончите, убедитесь, что все запущенные программы остановлены. Затем выйдите из chroot:

exit

Теперь размонтируйте все разделы, которые вы установили:

umount /mnt/boot # if you mounted this or any other separate partitions
umount /mnt/{proc,sys,dev}

Наконец, попытайтесь размонтировать ваш жесткий диск:

umount /mnt

Если вы получаете сообщение о том, что /mnt (или любой другой раздел) занят, это может означать одно из двух:

  • Программа была запущена внутри chroot.

  • Или более часто: точка монтирования все еще существует на этом монтировании. Например, /mnt/usr все еще монтируется при попытке размонтировать /mnt.

В последнем случае сначала просто размонтируйте нарушающую точку монтирования. Чтобы получить напоминание обо всех текущих точках монтирования, запустите mount без параметров.

В заключение:

reboot
Другие вопросы по тегам