Chroot на практике

Изменение корня это процесс изменения видимой на диске корневой директории (и текущего запуска процессов) на другую корневую директорию. Когда вы изменили корневую директорию на другую, вы больше не имеете доступа к файлам и командам за пределами этой директории. Эта директория становится подобна заключению пользователя в клетку.

Изменение корневой директории обычно нужно для таких задач как переустановка GRUB или сброс забытого пароля и чаще осуществляется при помощи LiveCD или LiveUSB в монтируемый раздел, содержащий установленную систему.

Вы должны загрузиться с любой работающей среды Linux (например, с LiveCD или USB flash disk). Для работы с chroot потребуются привилегии суперпользователя.

Убедитесь, что архитектура среды Linux, с которой вы загрузились соответствует архитектуре системы, с которой вы будете работать (т.e. i686, x86_64). Вы можете просмотреть архитектуру среды командой: uname -m

Монтирование каталогов

Чтобы просмотреть все имеющиеся дисковые разделы и их типы введите:

# fdisk -l

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

# mkdir /mnt/arch
# mount /dev/sda3 /mnt/arch

Изменение корневой директории

Подмонтируйте временные файловые системы:

# mount -t proc none /mnt/arch/proc
# mount -t sysfs sys /mnt/arch/sys
# mount -o bind /dev /mnt/arch/dev

Монтируйте другие разделы, если нуждаетесь в них (такие как /boot, /var, /usr). Например:

# mount /dev/sda1 /mnt/arch/boot

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

Если при нахождении в среде chroot вам нужна будет работа в сети, скопируйте информацию о DNS в новый корневой каталог:

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

Переходим в новую среду:

# chroot /mnt/arch /bin/bash

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

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

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

Следующие шаги:

# source /etc/profile
# export PS1="(chroot) $PS1"

Обслуживание системы:

Вот то, что вы можете сделать в изолированной среде:

  • Обновить или откатить пакеты
  • Пересобрать образ initcpio
  • Сбросить забытый пароль
  • Исправить /etc/fstab
  • Переустановить GRUB

Выход из chroot окружения:

Когда вы закончите работу, выйдите из chroot, введя команду exit.

Теперь отмонтируйте устройства и каталоги, которые вам больше не нужны:

# umount {proc,sys,dev,boot...}

Наконец отмонтируйте ваш жёсткий диск:

# cd /
# umount /mnt/arch

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

# umount -f /mnt

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