Начальная загрузка в chroot?

Вот быстрая адаптация решения для удара этого подобного ТАК вопрос для конкретных разделителей, которые Вы имеете (точки с запятой):

declare -a array=( )                      # we build a 1-D-array

IFS=';' read -a line < "$1"                       # read the headline

COLS=${#line[@]}                          # save number of columns

index=0
while IFS=';' read -a line ; do
    for (( COUNTER=0; COUNTER<${#line[@]}; COUNTER++ )); do
        array[$index]=${line[$COUNTER]}
        ((index++))
    done
done < "$1"

for (( ROW = 0; ROW < COLS; ROW++ )); do
  printf "%s" ${array[$ROW]}
  for (( COUNTER = ROW+COLS; COUNTER < ${#array[@]}; COUNTER += COLS )); do
    printf ";%s" ${array[$COUNTER]}
  done
  printf "\n" 
done

13
10.01.2014, 09:04
3 ответа

Это не может быть сделано загрузчиком или ядром. Параметр к ядру root опция такой как в root=/dev/sda1 похож на стандартный путь Unix, но такие пути интерпретируются согласно в настоящее время монтируемой файловой системе. В то время root опция интерпретируется, нет никаких смонтированных файловых систем. Ну, почти ни один. Во время инициализации ядра существует экземпляр минимального ramfs файловую систему называют rootfs смонтированный как корень для начального выполнения процесса start_kernel(). Фактическая интерпретация root опциональный параметр сделан в названной стандартной программе name_to_dev_t(). Один из поддерживаемых синтаксисов /dev/name формат, где имя интерпретируется путем выполнения временного монтирования sysfs файловая система в rootfs корень и поиск соответствия записи блочного устройства называют под /sys/block. Этот процесс объяснен более подробно здесь.

Установка, как описано должна была бы быть сделана первой начальной загрузкой в минимальную среду такой как один обеспеченный initrd, смонтируйте реальную корневую файловую систему от /dev/sda1 во временной точке монтирования, например. /mnt/rootfs, затем измените корневой каталог на /mnt/rootfs/chroot использование pivot_root(8).

Это несколько подобно тому, как корневые файловые системы для Контейнеров Linux (LXC) являются установкой. LXC является операционным внедрением виртуализации системного уровня для Linux. Операционная виртуализация системного уровня является наиболее часто используемой в виртуальных средах хостинга как легкая альтернатива полной виртуализации, организованной гипервизором. В операционной виртуализации системного уровня единственное ядро операционной системы является общим для несколько изолированных экземпляров пространства пользователя. Каждый экземпляр, часто названный контейнером, тюрьмой, Виртуальный Частный Сервер (VPE) или Виртуальная среда (VE), является по существу отдельной установкой операционной системы, помещенной в корпус в собственном каталоге в хост-системе.

7
27.01.2020, 19:53

Я столкнулся с той же проблемой и закончил тем, что написал , чтобы она безболезненно работала в разных системах (в настоящее время debian, ubuntu):

Запустите make_chroot_initrd скрипт, чтобы создать новый образ initrd с поддержкой chroot из существующего:

#  ./make_chroot_initrd /chroot/trusty/boot/initrd.img-3.13.0-32-generic
making new initrd: /chroot/trusty/boot/initrd.img-3.13.0-32-generic.chroot

Новый образ будет точно таким же, за исключением того, что теперь он может обрабатывать параметр загрузки chroot = .

Используя grub2 в качестве загрузчика, вы можете добавить запись в /boot/grub/grub.cfg :
(или, возможно, лучше /etc/grub.d/ 40_custom )

menuentry "ubuntu trusty, (linux 3.13.0-32) (chroot)" {
    insmod ext2                       # or whatever you're using ...
    set root='(hd0,7)'                # partition containing the chroot
    set chroot='/chroot/trusty'       # chroot path
    linux   $chroot/boot/vmlinuz-3.13.0-32-generic root=/dev/sda7 chroot=$chroot rw
    initrd  $chroot/boot/initrd.img-3.13.0-32-generic.chroot
}

(измените файлы / разделы, чтобы они соответствовали вашим)

Общесистемная установка

Как только вы довольны этим, вы можете сделать изменения постоянными
(до Пакет initramfs-tools обновляется).
В chroot-системе:

# cd /usr/share/initramfs-tools
# cp -pdrv .  ../initramfs-tools.orig       # backup
# patch -p1 < path_to/boot_chroot/initrd.patch
# rm *.orig */*.orig
# update-initramfs -u

С этого момента обычный образ initrd будет поддерживать chroot-загрузку.
Нет необходимости использовать отдельный файл initrd.chroot, который в этом случае может рассинхронизироваться с ним.

Подробнее см. boot_chroot .

6
27.01.2020, 19:53

Да, ] вы можете сделать это, используя подобтомы Btrfs .

Сначала вам нужно преобразовать ext4 в btrfs, как описано здесь .

Преобразуйте ваш chroot в subvilume, если его еще нет:

 sudo mv /path/to/chroot /path/to/chroot-tmp
 sudo btrfs subvol create /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot -r # for directories

Теперь у вас есть subvolume с именем path / to / chroot . Вы можете проверить это с помощью sudo btrfs subvol list /

Теперь вы можете создать загрузочную запись для подтома в grub. Просто добавьте rootflags = subvol = path / to / chroot в строку загрузки ядра Linux в пункте меню grub или используйте this для автоматического зондирования.

3
27.01.2020, 19:53

Теги

Похожие вопросы