Устройство, которое будем делать загрузочным: для краткости пишу "флешка", хотя на ее месте может быть harddisk, внутренний или внешний.
Имя устройства, названия каталогов-файлов - пишу какие получились у меня, вам нужно изменить на свои.
Все команды выполнять от суперпользователя.
Внимание! Первая-же команда удалит всю информацию с флешки, если есть что-то нужное - сохраните.
Создание мультизагрузочной флешки.
1. Запускаем Ubuntu для установки grub i386-pc.
2. Смотрим какое имя дала система нашему устройству
fdisk -l
Disk /dev/sdb: 15 GiB, 16064184320 bytes, 31375360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000b2a3a
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 31375359 31373312 15G b W95 FAT32
3. Обнуляем первые два мегабайта на устройстве.
dd if=/dev/zero of=/dev/sdb bs=1M count=2
4. Запускаем Gparted. Выбираем флешку, создаем таблицу разделов "msdos". Создаем один первичный раздел, форматируем в FAT32. Закрываем Gparted.
5. Монтируем флешку и устанавливаем Grub2.
mount /dev/sdb1 /mnt/sdb1
grub-install --root-directory=/mnt/sdb1 /dev/sdb
Создаем или копируем файл /mnt/sdb1/boot/grub/grub.cfg
set timeout=4
set default=0
set fallback=1
set color_normal=light-green/black
set menu_color_normal=light-green/black
set menu_color_highlight=light-green/blue
key='elevator=noop ignore_uuid'
menuentry '*buntu iso' {
iso_path='/opt/ubuntu-10.04.4-desktop-i386.iso'
iso_path='/opt/ubuntu-16.04.3-desktop-amd64.iso'; version='.efi'
key="boot=casper cdrom-detect/try-usb=true file=/cdrom/preseed/ubuntu.seed iso-scan/filename=$iso_path noprompt nosplash quiet --"
avload='configfile'
root='x'
insmod part_gpt
export iso_path
search -f ${iso_path} -n -s
if [ $root = x ]
then msg="$iso_path not exist!"; src="${prefix}/grub.cfg"
else msg="Load $iso_path from $root"
loopback loop ${iso_path}
root=(loop)
if [ -e /boot/grub/loopback.cfg ]
then src='/boot/grub/loopback.cfg'
else avload='linux'; avinit='initrd /casper/initrd.lz'
if [ -e /casper/vmlinuz${version} ]; then src="/casper/vmlinuz${version} ${key}"; else src="/casper/vmlinuz ${key}"; fi
fi
fi
echo "$msg"; sleep 4
${avload} ${src}
${avinit}
}
menuentry 'Ubuntu 16.04 squash' {
src='/opt/ub1604'
key="$key boot=casper cdrom-detect/try-usb=true live-media-path=$src/casper noprompt nosplash --"
root='x'
insmod part_gpt
search -f ${src}/casper/vmlinuz -n -s
if [ $root = x ]
then msg="$src not exist!"; avload='configfile'; src="${prefix}/grub.cfg"
else msg="Load $src from $root"; avload='linux'; avinit="initrd ${src}/casper/initrd.lz"
if [ -e "${src}/casper-rw" ]; then key="persistent persistent-path=$src $key"; fi
src="${src}/casper/vmlinuz ${key}"
fi
echo "$msg"; sleep 4
${avload} ${src}
${avinit}
}
menuentry 'Memtest' {
src='memtest'
insmod part_gpt
insmod part_msdos
root='x'
if [ ${grub_platform} = efi ]
then avload='chainloader'; src="/EFI/${src}.efi"
else avload='linux16'; src="/boot/${src}"
fi
search -f ${src} -n -s
if [ $root = x ]
then msg="$src not exist!"; avload='configfile'; src="${prefix}/grub.cfg"
else msg="Load $src from $root"
insmod ${avload}
fi
echo "$msg"; sleep 4
${avload} ${src}
}
menuentry 'Supergrub' {
src='/opt/super_grub2_disk_hybrid_2.02s5.iso'
insmod part_gpt
root='x'
search -f ${src} -n -s
if [ $root = x ]
then msg="$src not exist!"; avload='configfile'; src="${prefix}/grub.cfg"
else msg="Load $src from $root"; avload='linux16'; avinit="initrd16 ${src}"; src="/boot/syslinux/memdisk ima raw"
insmod ${avload}
fi
echo "$msg"; sleep 4
${avload} ${src}
${avinit}
}
menuentry 'Victoria 3.x & MHDD 4.x' {
src='/opt/vcr.img'
insmod part_gpt
root='x'
search -f ${src} -n -s
if [ $root = x ]
then msg="$src not exist!"; avload='configfile'; src="${prefix}/grub.cfg"
else msg="Load $src from $root"; avload='linux16'; avinit="initrd16 ${src}"; src="/boot/syslinux/memdisk ima raw"
insmod ${avload}
fi
echo "$msg"; sleep 4
${avload} ${src}
${avinit}
}
Флешка для загрузки в режиме BIOS готова.
6. Копируем iso-образ в /mnt/sdb1/opt/ubuntu-16.04-desktop-i386.iso
С этого момента мы можем загружать Ubuntu из образа.
7. Монтируем iso-образ и копируем из него на флешку файлы, необходимые для загрузки из filesystem.squashfs
mount -o loop /mnt/sdb1/opt/ubuntu-16.04-desktop-i386.iso /mnt/buntu
cp /mnt/buntu/casper/vmlinuz /mnt/sdb1/opt/ub1604/casper
cp /mnt/buntu/casper/initrd.lz /mnt/sdb1/opt/ub1604/casper
cp /mnt/buntu/casper/filesystem.squashfs /mnt/sdb1/opt/ub1604/casper
С этого момента мы можем загружать Ubuntu из filesystem.squashfs.
8. Создаем файл casper-rw размером 1 гигабайт.
dd if=/dev/zero of=/mnt/sdb1/opt/ub1604/casper/casper-rw bs=1M count=1000
mke2fs -F -L casper-rw -m 0 /mnt/sdb1/opt/ub1604/casper/casper-rw
С этого момента мы можем использовать persistent mode.
В любое время файл casper-rw можно удалить/создать, любого размера (для FAT32 до 4Гб).
9. Монтируем iso-образ и копируем из него на флешку файлы, необходимые для загрузки в режиме EFI.
mount -o loop /mnt/sdb1/opt/ubuntu-16.04-desktop-amd64.iso /mnt/buntu
cp /mnt/buntu/EFI /mnt/sdb1
cp /mnt/buntu/boot/grub/x86_64-efi /mnt/sdb1/boot/grub
cp /mnt/buntu/boot/grub/efi.img /mnt/sdb1/boot/grub
С этого момента мы можем загружаться с флешки в EFI режиме.
Не удаляйте каталоги (и их содержимое) /EFI и /boot.
Остальные файлы-каталоги можно удалять или заменять в любой момент.
Вам доступно все пространство флешки. Можно создавать дополнительные разделы.