Chroot на практике

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

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

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

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

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

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

# fdisk -l
1

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

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

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

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

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

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

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

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

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

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

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

# chroot /mnt/arch /bin/bash
1

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

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

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

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

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

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

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

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

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

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

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

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

# cd /
# umount /mnt/arch
1
2

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

# umount -f /mnt
1

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

2011  linux