Вот некоторые ресурсы:
«Изменение корня» или «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, и система не будет знать о том, как размонтировать их при завершении работы. Это может повредить эти файловые системы.)
Если вы настроили свою сеть и хотите использовать ее в изолированной системе, скопируйте ее, /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, который имеет ту же архитектуру, что и система, которую вы хотите Chroot в.)
На этом этапе вы все еще используете ядро, с которым загрузились, но все пути /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
chroot.sh
в корне каждой системы, которую я использую, содержание которой более или менее соответствует приведенному выше. Когда мне нужно войти в систему с LiveCD или чего-то еще, я просто монтирую корневую файловую систему и запускаю скрипт chroot. Больше не нужно безумно искать нужные команды.SHELL=/bin/bash chroot /mnt
если SHELL по умолчанию в livecd не находится в изолированной среде (например, defalut zsh в systemrescuecd) для исправления, например,!
в Vim./run
эти дни сmount --bind /run /mnt/run
.