46

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


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

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

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

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

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

1 ответ1

67

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

"Изменение корня" или "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, система не будет знать, чтобы отключить их при завершении работы, или. Это может повредить эти файловые системы.)

Если вы настроили свою сеть и хотите использовать ее в chrooted системе, скопируйте /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) и пытаетесь выполнить chroot с другой (например, 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .