LINUX.ORG.RU

/r/ самый быстрый способ скопировать систему в RAM

 , ,


2

2

По мотивам предыдущей темы, дошли руки до бузибоха.

Pkgfile для busybox, собираем и ставим fakeroot -- pkgmk -d && pkgadd busybox#*

Подготавливаем ручками initramfs образ, устанавливаем туда busybox:

# mkdir /tmp/initramfs
# cp /usr/bin/busybox /tmp/initramfs/busybox
# chroot /tmp/initramfs /busybox --install -s

Пилим init скрипт, который будет запускаться самым первым, когда загружено ядро:

#!/bin/sh

install -d /proc
mount -t proc proc /proc -o nosuid,noexec,nodev

install -d /sys
mount -t sysfs sys /sys -o nosuid,noexec,nodev

install -d /dev
mount -t devtmpfs dev /dev -o mode=0755,nosuid

install -d /dev/pts /dev/shm
mount -t devpts devpts /dev/pts -o mode=0620,nosuid,noexec
mount -t tmpfs shm /dev/shm -o mode=1777,nosuid,nodev

install -d /run
mount -t tmpfs run /run -o mode=0755,nosuid,nodev

install -d /tmp
mount -t tmpfs tmp /tmp -o mode=1777

echo "/sbin/mdev" > /proc/sys/kernel/hotplug
mdev -s

exec ash

Сохранить в /tmp/initramfs/init, сделать chmod +x init

# efibootmgr -c -L Linux -l \\bzImage -u "initrd=/initrfs.img"

Обновить загрузчик, root нам больше не нужен, будем грузить свой образ initramfs, указанный в опции initrd к ядру

# cd /tmp/initramfs
# find . -print0 | cpio --null -ov --format=newc | gzip -9 > /boot/initrfs.img

Создаём этот самый initrd образ, кладём рядом с ядром в /boot.

После чего перезагружаемся, ядро после загрузки сразу же загружает initrfs.img образ, выполняет наш /init скрипт (в корне! да), и показывает нам ash оболочку.

Уже здесь происходит вся магия, где мы можем подготовить систему для дальнейшей загрузки в неё. Например, предварительно скопировать содержимое жестокого диска в RAM (tmpfs), а затем загрузиться, чтобы экономить ресурс.

Теперь вопрос. Где удобнее хранить основную систему для загрузки?

Пробовал подмонтировать mount /dev/sda3 /mnt, скопировать в /tmpfs содержимое диска cp -a и ждал около 5 минут... это не годится.

Может хранить всё в исходных файлах пакетов? Т.е. у CRUX пакет это обычный tar-архив, и допустим, положить рядом с ядром директорию ports, в которой будут лежать тупо пакеты. bash#4.2.pkg.tar.xz и тому подобное. Затем каждый такой пакет в процессе загрузки будет «устанавливаться» в tmpfs стандартным пакетным менеджером, после чего уже происходить switch_root /tmpfs /sbin/init и вуаля...

Если допустим, потребуется обновить систему, то сделать это можно весьма прикольно: заменить пакет на диске, после чего просто перезагрузиться, и система загрузившись в tmpfs установит уже новый пакет. Норм?

Нас взломали? А мы просто перезагрузились, предварительно исправив какой-то там бажный пакет! Норм?

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

Пока остановился на варианте с установкой пакетов по отдельности в процессе загрузки, — распаковка .pkg.tar.xz архивов.

★★★★★

А потом прикрутим ОБЛАКА, чтобы пакеты скачивались с инторнета перед установкой их в tmpfs... :)

Spoofing ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.