Pull to refresh

Multiboot-флешка на GRUB2 с несколькими разделами под Ubuntu

Reading time 4 min
Views 63K
Каждый знает о загрузочных флешках, и многие имеют карточку с несколькими системами. Но при их использовании возникает множество неудобств, например:

  • Медленная загрузка с iso-образов
  • Путаница в файлах нескольких систем(попробуйте разделить Ubuntu и BackTrack без костылей!)
  • Невозможность поставить несколько однотипных систем(опять же, не используя костыли)
  • И конечно, весь этот балаган мешается под рукой, когда нужно просто перекинуть несколько файлов.


Сегодня я вам расскажу, как избежать все эти минусы удобно и относительно быстро.



Итак, приступим. В качестве подопытного зверька я выбрал Transcend JetFlash 16G; модель флешки не принципиальна, только в разбивке 512 мегабайт памяти смысла нет :)

Для начала форматируем память, создаём чистую MBR и разделы. Под линуксом средств масса, я использовал стандартную утилиту Ubuntu.

image

Устанавливаем GRUB2:
sudo grub-install --no-floppy --root-directory=/media/ALKID /dev/sdd
sudo grub-mkconfig -o /media/ALKID/boot/grub/grub.cfg

В примере /media/ALKID — подмонтированный раздел флешки (любой кроме NTFS; первый раздел будет использоваться для личных файлов, так что предпочтительно ставить, скажем, на второй раздел);
/dev/sdd — сама флешка.

Если груб отвечает примерно так:
utrack@utrack ~ $ sudo grub-install --no-floppy --root-directory=/media/fpart2 /dev/sdd
[sudo] password for utrack:
/usr/sbin/grub-setup: предупр: Your embedding area is unusually small. core.img won't fit in it..
/usr/sbin/grub-setup: предупр: Встраивание невозможно. При имеющихся параметрах GRUB можно установить только с помощью списка блоков (blocklists). Однако, список блоков является НЕНАДЁЖНЫМ механизмом и его лучше не использовать..
/usr/sbin/grub-setup: ошибка: не будет продолжена с использованием blocklists.

то значит что для бутлоадера не хватает места и нужно перенести начало первого раздела, скажем, на 1 мб вперед.
Затем просто копируем файлы систем на флешку, iso-образы можно распаковать обычным архиватором.

А теперь сложная часть :)

Дело в том, что для каждой системы настройки немного, да отличаются. Для некоторых дистрибутивов вам придётся подбирать параметры самим, но я помогу с наиболее популярными системами.

Для любого дистрибутива Linux на отдельном разделе:

menuentry 'BackTrack 5 R1' --class gnu-linux --class gnu --class os {
recordfail
set gfxpayload=$linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
insmod fat
search --no-floppy --fs-uuid --set=root BC1B-344D
linux /casper/vmlinuz file=/preseed/custom.seed boot=casper text splash vga=791 --
initrd /casper/initrd.gz
}


, где BC1B-344D это UUID раздела (узнать его можно командой 'ls -l /dev/disk/by-uuid').

image

Из-за сходной структуры с ними есть одна закавыка: для каждого придётся изменить имя папки casper, например BT5 в примере находится в папке casper, а вот на соседнем разделе будет Mint, причём в папке casper2. Подключить её можно так:

menuentry 'Mint Default' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
set gfxpayload=$linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
insmod fat
search --no-floppy --fs-uuid --set=root 1E1F-DD84
linux /casper2/vmlinuz live-media-path=/casper2/ nopersistent boot=casper initrd=/casper2/initrd.lz quiet splash --
initrd /casper2/initrd.lz
}


Далее, Dr.Web на втором разделе в папке drweb:

menuentry "Dr.Web" {
recordfail
set gfxpayload=$linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
insmod fat
search --no-floppy --fs-uuid --set=root 8614-5FEE
linux /drweb/boot/vmlinuz ID=HOpnMxLPodF82zUr usbroot root=/dev/ram0 realroot=/dev/sd[a-z][0-9]/drweb init=/linuxrc init_opts=4 quiet vga=791 splash=silent,theme:drweb CONSOLE=/dev/tty1 dokeymap looptype=squashfs usbroot=/dev/sd[a-z][0-9]/drweb slowusb vga=791 CONSOLE=/dev/tty1 SDELAY=12 USBWAIT=15
initrd /drweb/boot/initrd
}


Касперский рядом с ним в папке kav:

menuentry "Kaspersky RD 10" {
set gfxpayload=$linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
search --no-floppy --fs-uuid --set=root 8614-5FEE
linux /kav/boot/rescue subdir=/kav root=/dev/ram0 vga=791 init=/linuxrc looptype=squashfs loop=/kav/image.squashfs nodevfs kav_lang=en udev aufs quiet noresume doscsi kav_lang=en cdroot=/dev/sd[a-z][0-9]
initrd /kav/boot/rescue.igz
}


Можно сменить язык на русский директивой kav_lang=ru.

Partition Editor на нтфс-разделе в папке /sys/pwizard:

menuentry 'pwhe6 - Partition Editor' {
recordfail
set gfxpayload=$linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
search --no-floppy --fs-uuid --set=root 01CCC7C26FA774D0
linux /sys/pwizard/BZIMAGE ramdisk_size=102400 root=/dev/ram0 rw
initrd /sys/pwizard/tinycore.gz
}


В принципе с ним проблем никаких, к тому же из всего образа можно оставить только файлы BZIMAGE и tinycore.gz.

Partition Doctor:

menuentry 'Partition Doctor'{
recordfail
set gfxpayload=$linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
insmod fat
search --no-floppy --fs-uuid --set=root BC1B-344D
linux /partdoc/memdisk
initrd /partdoc/partdoc.ima
}


memtest86:

menuentry "Memory test (memtest86+)" {
insmod part_msdos
insmod ext2
insmod fat
search --no-floppy --fs-uuid --set=root 8614-5FEE
linux16 /memtest.bin
}


И загрузка с первого жёсткого диска, если вы случайно оставили флешку в разъёме:

menuentry "hd0"{
insmod part_msdos
insmod ntfs
insmod fat
insmod ext2
set root='(hd0)'
chainloader +1
}


Некоторые BIOS воспринимают карту как hd0, поэтому желательно рядом оставить загрузку hd1 аналогичным способом.

Если вы нашли нужную систему в статье- можете удалить из скопированных образов папки syslinux, isolinux, boot/grub и др., если же не нашли-то ищите в них подсказки :)
Например для того же Linux Mint в файле /isolinux/isolinux.cfg:

label live
menu label Start Linux Mint
kernel /casper/vmlinuz
append file=/cdrom/preseed/mint.seed boot=casper initrd=/casper/initrd.lz quiet splash --


Всё что нам нужно сделать-это подключить insmod'ом нужные для ФС модули, заменить kernel на linux и перенести секцию append после имени ядра и указать раздел системы. Вот так:

menuentry 'Mint Default' --class ubuntu --class gnu-linux --class gnu --class os {
insmod ext2
insmod fat
search --no-floppy --fs-uuid --set=root 1E1F-DD84
linux /casper/vmlinuz boot=casper initrd=/casper/initrd.lz quiet splash --
initrd /casper/initrd.lz
}


Готово, можно перезагружаться и испытывать новую систему!
Tags:
Hubs:
+37
Comments 27
Comments Comments 27

Articles