Необходимо изменить initrd файл так, чтобы в конечном итоге иное блочное устройство использовалось в качестве корневого. При этом используются системы с версиями ядра 2.4 и 2.6 :(
В системе с ядром 2.4 заключительная часть init-файла (linuxrc) образа initrd выглядит следующим образом:
...
mkrootdev /dev/root
echo 0x0100 > /proc/sys/kernel/real-root-dev
mount -o acl,nosecdel,secrm --ro -t ext3 /dev/root /sysroot
pivot_root /sysroot /sysroot/initrd
umount /initrd/proc
В системе с ядром 2.6 иначе:
...
mkrootdev -t ext4 -o defaults,ro /devv/sda3
mount /sysroot
setuproot
switchroot
На данном этапе у меня возникает путаница, что именно делает каждая строка в обоих приведённых фрагментах. Подробному разъяснению этого момента я буду очень рад.
Кроме того, мне надо изменить файлы так, чтобы в качестве корневого монтировалось другое устройство, создаваемое в момент загрузки. А создаётся это устройство с помощью device-mapper-а. Не так важно, что именно делает получаемое устройство, но важно, что оно приводит реальное устройство в состояние «занято».
Так как иное устройство монтируется в качестве корневого, то я меняю (а в идеале удаляю) параметр root из конфигов загрузчиков (для LILO, например, вариант только удалить этот параметр, ибо LILO отказывается конфигурироваться, если устройство не существует).
Виртуальное устройство создаю так:
ld-linux.so.2 /bin/dmsetup create root_part /opt/bin/table
Устройство создаётся успешно по пути /dev/mapper/root_part
Подскажите, как изменить приведённые выше фрагменты. Спасибо!