Небольшой скриптик для CHROOT доступа в незагружемую систему с LiveCD

Предлагаю хаутушку по chroot-доступу к нерабочей системе

Итак, предположим, что у вас после определенных действий перестала загружаться система.

Причин для этого может быть уйма - от “продвинутого твиканья” конфигов или удаленных “лишних” файлов в /boot, до очень неудачного ребута во время обновления.
В подобных случаях, чаще всего, необходимо загрузиться с другого носителя (к примеру LiveCD), подмонтировать необходимые партиции по определенному адресу, и выполнить chroot по этому самому адресу(хотя возможно сначала стоит проверить HDD).

Для таких случаев я использую простенький скриптик , им и делюсь

<code class="bash">
###
 # Определение задействованных переменных
#
ROOTDIR="/dev/sdxY"
## Здесь пишите свой реальный корень текущей кальки
CALCDIR="/dev/sdmN"
## Здесь пишите реальную партицию монтирующуюся в кальке в /var/calculate
MOUNTPOINT_LIST="${ROOTDIR}:/ ${CALCDIR}:/var/calculate /var/calculate/home:/home"
## По идее две описанные выше переменные ни к чему,
## ... их можно было бы и не использовать, прописав все сюда,
## ... но захотелось немного красоты
MOUNTDIR=/mnt/gentoo
## Ну в принципе - любая директория, но я по старой гентушной памяти предпочитаю эту

###
 # тут мы подмонтируем все указанные в MOUNTPOINT_LIST пути в нужном порядке
#
mkdir -pv ${MOUNTDIR}
for mp in ${MOUNTPOINT_LIST}; do
    DEV="${mp%:*}"
    POINT="${mp/*:}"
    cmd=
    if [ -b "${DEV}" ]; then
        cmd="mount ${DEV} ${MOUNTDIR}/${POINT}"
         ## если это устройство, то просто монтируем его
    elif [ -d "${MOUNTDIR}/${DEV}" ]; then
        cmd="mount --bind ${MOUNTDIR}/${DEV} ${MOUNTDIR}/${POINT}"
         ## если это директория, то ее монтируем другой командой
    else
        echo "What is ${DEV}?"
        break
         ## В любом другом случае - у вас похоже опечатка
    fi
    echo ${cmd}
    ${cmd}
done

###
 # А вот тут мы подключим все партиции необходимые для chroot-а
#
mount -vt {,,${MOUNTDIR}/}proc
for d in /sys /dev{,/pts,/shm}; do
    mount -v --bind {,${MOUNTDIR}}$d
done

## Все, теперь можно выполнять chroot
chroot ${MOUNTDIR} /bin/bash
## И напоследок, обновим список системных переменных уже внутри chroot-а, а также пометим эту консоль
env-update && source /etc/profile && PS1="(chroot)${PS1}"
</code>

Здесь я постарался расписать каждый шаг. С другой стороны - для начинающих “bash-скриптеров” тут будет пара простеньких практических примеров.
Тем, кто хочет плотнее познакомиться с ABS Linux предлагаю почитать Advanced Bash-Scripting Guide