Чуть-чуть теории или как livecd gentoo определеяет с какого диска продолжать загрузку.
Делают это скрипты initrd.
Они по очереди монтируют /dev/sd[a-b][1-9] и /dev/sr[0-9] (возможно с диапазонами я ошибся, но сути это не меняет) и проверяют наличее в корне примонтированного диска файла livecd.
Как только файл обнаружен - монтируется файл заданный в переменной окружения LOOP и chroot'ится в новый корень, передавая управление новому init'у.
Переменная окружения LOOP не задается где-то внутри скриптов, как может показаться на первый взгляд, а передается как опция ядра.
И ядро уже в свою очередь передает эту опцию init'у, который и выставляет переменную окружения.
Практика
У меня флешка в системе определилась как /dev/sdb. На первой партиции vfat раздел. ФС не принципиальна, главное чтобы grub ее знал.
Можно отформатировать флешку, например в FAT32
Монтируем флешку:
Устаналиваем загрузчик:
Вариант 1
В этом варианте мы вручную "потрошим" установочный образ диска.
По идее данная операция не должна уничтожить существующую информацию на флеш-диске. Но бекап лучше все-таки сделать. Граб установлен, надо где-то взять ядро и initrd Монтируем iso-образ CL:
В принципе все.
Перезагрузка, проверка загрузки с флешки.
Если ОС загрузилась с флешки, то именно флешка будет /dev/sda!
Все остальные диски будут начинаться с /dev/sdb.
Чуть-чуть внимания при установке.
Все выше описанное должно быть справедливо и для lilo и для grub (не 2)
Вариант 2
В данном варианте, по факту выполняется тоже самое, только не нужно распаковывать образ iso.
Мы указываем grub2 откуда и что брать в образе.
Т.е. по факту используем возможность grub2 по работе с образами.
loopback loop задает точку монтирования loop, для образа /boot/iso/cld-11.12-x86_64.iso
initrd -путь к сценарию initrd
linux - путь к ядру Линукса + дополнительные параметры, более подробно по параметрам можно почитать в GNU GRUB Manual 1.99
Аналогичным образом можно настраивать загрузку и многих других образов.
Я приведу несколько настроек для grub.cfg, найденных на просторах интернета:
Ссылки:
GNU GRUB Manual 1.99
GRUB 2 bootloader - Full tutorial
Wiki Grub 2
Установка Calculate Linux с usb flash используя grub2
Загрузка нескольких iso-образов с одного USB Flash c файловой системой VFAT
MultiBoot USB with Grub2 (boot directly from iso files)
Делают это скрипты initrd.
Они по очереди монтируют /dev/sd[a-b][1-9] и /dev/sr[0-9] (возможно с диапазонами я ошибся, но сути это не меняет) и проверяют наличее в корне примонтированного диска файла livecd.
Как только файл обнаружен - монтируется файл заданный в переменной окружения LOOP и chroot'ится в новый корень, передавая управление новому init'у.
Переменная окружения LOOP не задается где-то внутри скриптов, как может показаться на первый взгляд, а передается как опция ядра.
И ядро уже в свою очередь передает эту опцию init'у, который и выставляет переменную окружения.
Практика
У меня флешка в системе определилась как /dev/sdb. На первой партиции vfat раздел. ФС не принципиальна, главное чтобы grub ее знал.
Можно отформатировать флешку, например в FAT32
mkfs.vfat /dev/sdb1
Монтируем флешку:
mount -t vfat /dev/sdb1 /mnt/flash
Устаналиваем загрузчик:
grub-install --no-floppy --root-directory=/mnt/flash/ /dev/sdb
Вариант 1
В этом варианте мы вручную "потрошим" установочный образ диска.
По идее данная операция не должна уничтожить существующую информацию на флеш-диске. Но бекап лучше все-таки сделать. Граб установлен, надо где-то взять ядро и initrd Монтируем iso-образ CL:
# mount -o loop -t iso9660 ~/cld-11.12-x86_64.iso /mnt/cdrom
# cp /mnt/cdrom/boot/vmlinuz /mnt/flash/boot/vmlinuz
# cp /mnt/cdrom/boot/initrd /mnt/flash/boot/initrd
Заодно скопируем файл livecd и тот самый образ livecd.squashfs
# cp /mnt/cdrom/livecd* /mnt/flash/
И последнее - настройка grub2. Необходимо создать /mnt/flash/boot/grub/grub.cfg со следующим содержимым (никаких \ быть не должно, как и переносов строк после них. Здесь они ради удобства чтения):
menuentry "alculate linux desktop 11.12 x86_64" {
linux /boot/vmlinuz init=/linuxrc looptype=squashfs unionfs cdroot_type=vfat \
doload=vfat,nls_cp866,nls_utf8,squashfs,isofs,unionfs loop=livecd.squashfs \
nodevfs cdroot video=uvesafb:ywrap,1280x1024-32@60,mtrr:3,splash=silent,theme:tty1 \
CONSOLE=/dev/tty1 udev quiet noresume doscsi calculate=ru_RU,ru_RU,Europe/Kiev,auto
initrd /boot/initrd
}
Опции ядра можно подглядеть в /mnt/cdrom/isolinux/
В принципе все.
Перезагрузка, проверка загрузки с флешки.
Если ОС загрузилась с флешки, то именно флешка будет /dev/sda!
Все остальные диски будут начинаться с /dev/sdb.
Чуть-чуть внимания при установке.
Все выше описанное должно быть справедливо и для lilo и для grub (не 2)
Вариант 2
В данном варианте, по факту выполняется тоже самое, только не нужно распаковывать образ iso.
Мы указываем grub2 откуда и что брать в образе.
Т.е. по факту используем возможность grub2 по работе с образами.
menuentry "Calculate linux desktop 11.12 x86_64 (from ISO)" {
loopback loop /boot/iso/cld-11.12-x86_64.iso
linux (loop)/boot/vmlinuz init=/linuxrc looptype=squashfs unionfs cdroot_type=vfat doload=vfat,nls_cp866,nls_utf8,squashfs,isofs,unionfs loop=livecd.squashfs nodevfs cdroot video=uvesafb:ywrap,1280x1024-32@60,mtrr:3,splash=silent,theme:tty1 CONSOLE=/dev/tty1 udev quiet noresume doscsi calculate=ru_RU,ru_RU,Asia/Novosibirsk,auto
initrd (loop)/boot/initrd
}
Итак немного опишу, что там за команды:loopback loop задает точку монтирования loop, для образа /boot/iso/cld-11.12-x86_64.iso
initrd -путь к сценарию initrd
linux - путь к ядру Линукса + дополнительные параметры, более подробно по параметрам можно почитать в GNU GRUB Manual 1.99
Аналогичным образом можно настраивать загрузку и многих других образов.
Я приведу несколько настроек для grub.cfg, найденных на просторах интернета:
menuentry "Ubuntu Live 11.04 64bit" {
loopback loop /boot/iso/ubuntu-11.04-desktop-amd64.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-11.04-desktop-amd64.iso noeject noprompt --
initrd (loop)/casper/initrd.lz
}
menuentry "Ubuntu Live 9.10 32bit" {
loopback loop /boot/iso/ubuntu-9.10-desktop-i386.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-9.10-desktop-i386.iso noeject noprompt --
initrd (loop)/casper/initrd.lz
}
menuentry "Ubuntu Live 9.10 64bit" {
loopback loop /boot/iso/ubuntu-9.10-desktop-amd64.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-9.10-desktop-amd64.iso noeject noprompt --
initrd (loop)/casper/initrd.lz
}
menuentry "Grml small 2009.10" {
loopback loop /boot/iso/grml-small_2009.10.iso
linux (loop)/boot/grmlsmall/linux26 findiso=/boot/iso/grml-small_2009.10.iso apm=power-off lang=us vga=791 boot=live nomce noeject noprompt --
initrd (loop)/boot/grmlsmall/initrd.gz
}
menuentry "tinycore" {
loopback loop /boot/iso/tinycore_2.3.1.iso
linux (loop)/boot/bzImage --
initrd (loop)/boot/tinycore.gz
}
menuentry "Netinstall 32 preseed" {
loopback loop /boot/iso/mini.iso
linux (loop)/linux auto url=http://www.panticz.de/pxe/preseed/preseed.seed locale=en_US console-setup/layoutcode=de netcfg/choose_interface=eth0 debconf/priority=critical --
initrd (loop)/initrd.gz
}
menuentry "debian-installer-amd64.iso" {
loopback loop /boot/iso/debian-installer-amd64.iso
linux (loop)/linux vga=normal --
initrd (loop)/initrd.gz
}
menuentry "BackTrack 4" {
linux /boot/bt4/boot/vmlinuz BOOT=casper boot=casper nopersistent rw vga=0x317 --
initrd /boot/bt4/boot/initrd.gz
}
menuentry "Memory test (memtest86+)" {
linux16 /boot/img/memtest86+.bin
}
menuentry "BackTrack ERR" {
loopback loop /boot/iso/bt4-pre-final.iso
linux (loop)/boot/vmlinuz find_iso/filename=/boot/iso/bt4-pre-final.iso BOOT=casper boot=casper nopersistent rw vga=0x317--
initrd (loop)/boot/initrd.gz
}
menuentry "XBMC ERR" {
loopback loop /boot/iso/XBMCLive.iso
linux (loop)/vmlinuz boot=cd isofrom=/dev/sda1/boot/iso/XBMCLive.iso xbmc=nvidia,nodiskmount,tempfs,setvolume loglevel=0 --
initrd (loop)/initrd0.img
}
menuentry "netboot.me" {
loopback loop /boot/iso/netbootme.iso
linux16 (loop)/GPXE.KRN
}
menuentry "debian installer amd64 netboot XEN pressed" {
linux /boot/debian/linux auto preseed/url=http://www.panticz.de/pxe/preseed/xen.seed locale=en_US console-setup/layoutcode=de netcfg/choose_interface=eth0 debconf/priority=critical --
initrd /boot/debian/initrd.gz
}
Ссылки:
GNU GRUB Manual 1.99
GRUB 2 bootloader - Full tutorial
Wiki Grub 2
Установка Calculate Linux с usb flash используя grub2
Загрузка нескольких iso-образов с одного USB Flash c файловой системой VFAT
MultiBoot USB with Grub2 (boot directly from iso files)
Комментариев нет:
Отправить комментарий