Table of Contents

сhroot из установочного носителя

В Slackware полно инструментов, способных помочь, когда система отказывается грузиться. Например, когда обновили файл ядра, но забыли выполнить после этого lilo.

Для доступа к системе помимо непосредственной загрузки в нее возможно использовать установочный носитель Slackware, например, первый из CD или DVD. После загрузки с установочного носителя, корневой каталог установочного носителя возможно сменить на примонтированный корневой раздел диска с установленной системой, а затем выполнить команды, изменяющие установленную систему.

Подготовка томов

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

Простейший пример – одиночный локальный жёсткий диск без какого-либо шифрования. В этом случае всё, что необходимо сделать,– определить имя раздела и перейти к монтированию.

Иначе, если используется LVM/EVMS или шифрованный том, необходимо подготовить их для монтирования и смены корня.

Для разблокирования раздела LUKS необходимо открыть его ('open') и дать ему имя при помощи команды (здесь sdXN – пример имени раздела):

cryptsetup luksOpen /dev/sdXN crypted (произвольное имя)

Теперь по запросу нужно ввести парольную фразу для разблокировки тома. Этот раздел будет сопоставлен с '/dev/mapper/crypted'.

Для томов LVM нужно убедиться, что система способна их распознать и активировать. Для этого используем команды:

Монтирование томов

После подготовки можно перейти к монтированию томов. Использование в качестве точки монтирования /mnt обязательно, если только планируете запускать setup.

Определившись с именем раздела, нужно примонтировать его:

mount /dev/ИмяТома /mnt

Ниже три распространённых примера.

1. Всё установлено на корневой (/) раздел /dev/sda1. LVM или дополнительные драйверы не используются.

mount /dev/sda1 /mnt

2. Два жёстких диска, /dev/sdb1 используется для /home, /dev/sda1 для всего остального в корне (/).

mount /dev/sda1 /mnt
mount /dev/sdb1 /mnt/home

3. В третьем примере используется LVM, группа томов уже подготовлена и известна ядру. Используются логические тома «root, usr, home, opt, var, srv» в группе томов «myvg». Также используется шифрование LUKS, поэтому небольшой раздел для /boot расположен на /dev/sda1.

mount /dev/myvg/root /mnt
mount /dev/myvg/usr  /mnt/usr
mount /dev/myvg/home /mnt/home
mount /dev/myvg/opt  /mnt/opt
mount /dev/myvg/var  /mnt/var
mount /dev/myvg/srv  /mnt/srv
mount /dev/sda1      /mnt/boot

Пример возможно упростить при помощи цикла for для всего, кроме /boot (/dev/sda1) и / (/dev/myvg/root):

for dir in usr home opt var srv; do
  mount /dev/myvg/$dir /mnt/$dir
done

Далее необходимо подготовить три виртуальных каталога для использования внутри нового корня. Это /dev – каталог с файлами, представляющими аппаратные устройства; /proc – каталог с виртуальными файлами, представляющими процессы и /sys – каталог с различными системными файлами ядра:

mount -o bind  /dev /mnt/dev
mount -o bind /proc /mnt/proc
mount -o bind /sys  /mnt/sys

Тут тоже возможно использовать цикл for:

for dir in dev proc sys; do
  mount -o bind  /$dir /mnt/$dir
done

Смена корня

Теперь, когда разделы смонтированы, можно сменить корень (chroot) на /mnt:

chroot /mnt /bin/bash
Если подготавливались тома LVM может потребоваться вновь запустить vgscan --mknodes и vgchange -ay, поскольку ранее они изменяли RAM-диск установочного носителя, а не смонтированные разделы.

Полученное приглашение bash от оболочки, запущенной на установленной системе. Теперь можно работать с установленной системой как если бы она была загружена обычным образом. Например, редактирование /etc/lilo.conf и выполнение /sbin/lilo воздействуют на установленную систему, а не на систему установочного носителя.

Источники

* Исходный текст написан cmyster.
* Информация по LVM и LUKS в основном из файлов README от Eric-а на установочном диске.
* Перевод Serg Bormant