привет, друзья!
хочу сделать чтобы (кое-где) — операционная система загружалась бы из /dev/loop-устройства ..
сейчас постараюсь всё объяснить.. но перед тем как объяснить, сначало задам главный вопрос этой темы:
насколько сильно это замедлит работу операционной системы? (ясное дело что замедлит.. но насколько замедлит?) .. имеется ввиду не скорость загрузки, а замедление скорости уже загруженной системы..
теперь подробности:
как загружается обычная операционная система — обычных нормальных ребят (?).. вот примерно так:
0. включается комп, BIOS считывает загрузчик из жёсткого диска в оперативную память
и передаёт ему управление;
1. загрузчик распознаёт GPT-разметку жёсткого диска
и читает файловую систему /boot/-раздела;
2. затем загрузчик читает файлы "/boot/vmlinuz-linux" и "/boot/initramfs-linux.img",
засовывает их в оперативную память
и передаёт им управление;
3. согласно сценарию "initramfs" -- происходит подгрузка всяких там модулей ядра,
и затем один из GPT-разделов
монтируется как корневая файловая система ("/new_root/");
4. затем сценарий "initramfs" -- передаёт (через chroot) управление демону "/new_root/bin/init"
(который ,например, быть может является ссылкой на "/new_root/lib/systemd/systemd");
5. ...
6. profit!
но а что же хочу сделать я (?).. хочу чуть-чуть странного:
весь жёсткий диск размечан как файловая система EXT4. внутри файловой системы EXT4 — установлена операционная система, и в корне — лежит большой файл «/data.img» (условно так его назовём — «data.img». хорошо?).
внутри файла «/data.img» — находится GPT-разметка. и в этой разметке находятся несколько GPT-разделов, в том числе и ещё один корневой раздел с ещё одной операционной системой.
как в этом случае будет происходить загрузка всей этой штуки:
0. включается комп, BIOS считывает загрузчик <неизвестно-откуда> в оперативную память
и передаёт ему управление;
(условимся -- что ТОЧНО удалось <неизвестно-откуда> загрузчик считать успешно)
1. загрузчик <неизвестно-откуда> загружает в память "vmlinuz-linux"
и передаёт ему управление (initramfs-файла здесь нет);
2. согласно значениям Kernel-Parameters -- ядро монтирует EXT4 как корневую файловую систему (/),
в режиме только-для-чтения;
3. затем ядро запускает файл "/bin/init" , который является ссылкой на <наш-кастумный-скрипт>;
4. <наш-кастумный-скрипт> ассоциирует файл "/data.img" с устройством "/dev/loop0"
(напомню что внутри файла "/data.img" -- есть несколько GPT-разделов);
5. затем <наш-кастумный-скрипт> монтирует GPT-раздел "/dev/loop0p1" как "/mnt/",
разумеется в режиме только-для-чтения;
6. а затем <наш-кастумный-скрипт> загружает в память
новые файлы "/mnt/vmlinuz-linux" и "/mnt/initramfs-linux.img"
и передаёт им управление (через kexec);
7. согласно сценарию нового "initramfs" -- происходит подгрузка всяких там модулей ядра,
затем файловая система EXT4 из жёсткого диска
монтируется как "/true_real_root/" (на этот раз -- в режиме чтение-запись),
затем файл "/true_real_root/data.img" снова ассоциируется с устройством "/dev/loop0",
а затем GPT-раздел "/dev/loop0p2" монтируется как новая корневая файловая система ("/new_root/");
8. затем сценарий "initramfs" -- передаёт (через chroot) управление демону "/new_root/bin/init"
(который ,например, быть может является ссылкой на "/new_root/lib/systemd/systemd")
9. ...
10. profit!
ну и собственно повторяю вопрос:
насколько сильно будет тормозить работу операционной системы это устройство /dev/loop0 , в случае если «data.img» хранится на файловой системе EXT4?
условимся, что жёсткий диск будет SSD-типа.
# P.S.: зачем? повторяю: хочется странного.. :)