Мультизагрузочная Linux-флешка
Тут описана процедура создания флешки для загрузки множества iso-образов на компьютерах с BIOS. На компьютерах с UEFI она не работает. Для компов с UEFI я делал Универсальную загрузочную флешку для BIOS/UEFI.
Хорошо иметь под рукой флешку, с которой можно загрузиться для восстановления или установки системы. Также хорошо бы чтобы на ней помещались несколько разных образов ISO, доступных из меню.
Создать такую флешку можно с помощью специализированных программных средств как под Linux ( Multisystem) так и под Windows (XBOOT), и даже мультиплатформенных (Yumi).
Но можно пойти true linux way™ и использовать GRUB.
Создание и форматирование раздела
Сначала нужно создать на флешке раздел и сделать его загрузочным. Запускаем fdisk и натравливаем его на нашу флешку. Нижеприведенные команды делаем с правами root. Список дисков смотрим командой:
fdisk -l
Запускаем fdisk (указав свою флешку):
fdisk /dev/sdx
Если на диске есть разделы, то ликвидируем их. Для этого жмем d
После удаления разделов жмем n и создаем новый.
В процессе создания указваем что раздел p (primary).
После создания жмем a, чтобы сделать раздел активным.
Затем жмем t, чтобы задать тип раздела и вводим тип c (FAT32).
Жмем w и записываем изменения на флешку.
Теперь надо отформатировать созданный раздел в FAT32:
umount /dev/sdx1 mkfs.vfat -F 32 -n MULTIBOOT /dev/sdx1
Установка загрузчика GRUB
Дальше ставим GRUB2 на флешку.
Создаем точку монтирования и монтируем флешку (не забываем sdx менять на актуальные буквы, соотвествующие флешке):
sudo mkdir /mnt/USB && sudo mount /dev/sdx1 /mnt/USB
Устанавливаем GRUB (выполняем с правами root):
sudo grub-install --force --no-floppy --boot-directory=/mnt/USB/boot /dev/sdx
Старые версии GRUB вместо –boot-directory используют -root-directory. Если что-то не так, то установщик GRUB скажет что “Installation is impossible. Aborting”.
Создаем на флешку файлик grub.cfg
nano /mnt/USB/boot/grub/grub.cfg
И заполняем его примерно так:
set timeout=10 set default=0 menuentry "KNOPPIX_V7.2.0CD-2013-06-16-EN LiveCD" { loopback loop /KNOPPIX_V7.2.iso #linux (loop)/boot/isolinux/linux bootfrom=/KNOPPIX_V7.2.iso acpi=off keyboard=us language-us linux (loop)/boot/isolinux/linux bootfrom=/KNOPPIX_V7.2.iso keyboard=us language-us initrd (loop)/boot/isolinux/minirt.gz } menuentry "SystemRescueCd 4.6.1 Live (64bit, cache all files in memory and startX)" { loopback loop /systemrescuecd.4.6.1.iso linux (loop)/isolinux/rescue64 isoloop=/systemrescuecd.4.6.1.iso setkmap=us docache dostartx initrd (loop)/isolinux/initram.igz } menuentry "SystemRescueCd 4.6.1 Live (64bit, default boot options)" { loopback loop /systemrescuecd.4.6.1.iso linux (loop)/isolinux/rescue64 isoloop=/systemrescuecd.4.6.1.iso setkmap=us initrd (loop)/isolinux/initram.igz } menuentry "SystemRescueCd 4.6.1 Live (32bit, default boot options)" { loopback loop /systemrescuecd.4.6.1.iso linux (loop)/isolinux/rescue32 isoloop=/systemrescuecd.4.6.1.iso setkmap=us initrd (loop)/isolinux/initram.igz } menuentry "Ubuntu 14.04.3 x64 Desktop with GNOME. Live and Install" { loopback loop /ubuntu-14.04.3-desktop-amd64.iso linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-14.04.3-desktop-amd64.iso quiet splash initrd (loop)/casper/initrd.lz } menuentry "Kubuntu 14.04.3 x64 Desktop with KDE. Live and Install" { loopback loop /kubuntu-14.04.3-desktop-amd64.iso linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/kubuntu-14.04.3-desktop-amd64.iso quiet splash initrd (loop)/casper/initrd.lz } menuentry "Xubuntu 14.04.3 x64 Desktop with LXDE. Live and Install" { loopback loop /xubuntu-14.04.3-desktop-amd64.iso linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/xubuntu-14.04.3-desktop-amd64.iso quiet splash -- initrd (loop)/casper/initrd.lz } menuentry "Ubuntu 14.04.3 x64 Server" { loopback loop /ubuntu-14.04.3-server-amd64.iso linux (loop)/install/vmlinuz iso-scan/filename=/ubuntu-14.04.3-server-amd64.iso quiet -- initrd (loop)/install/initrd.gz } menuentry "CentOS 7 03.15 x64 Install" { loopback loop /CentOS-7-x86_64-Minimal-1503-01.iso linux (loop)/isolinux/vmlinuz noeject inst.stage2=hd:LABEL=MIKEBOOT:/CentOS-7-x86_64-Minimal-1503-01.iso initrd (loop)/isolinux/initrd.img } menuentry "SystemRescueCd 4.8.1 Live (64bit, default boot options)" { loopback loop /systemrescuecd-x86-4.8.1.iso linux (loop)/isolinux/rescue64 isoloop=/systemrescuecd-x86-4.8.1.iso setkmap=us initrd (loop)/isolinux/initram.igz } menuentry "Try Xubuntu x64 16.04.1 without installing" { loopback loop /xubuntu-16.04.1-desktop-amd64.iso set gfxpayload=keep linux (loop)/casper/vmlinuz.efi iso-scan/filename=/xubuntu-16.04.1-desktop-amd64.iso file=(loop)/preseed/xubuntu.seed boot=casper quiet splash --- initrd (loop)/casper/initrd.lz } menuentry "Install Xubuntu 16.04.1 x64" { loopback loop /xubuntu-16.04.1-desktop-amd64.iso set gfxpayload=keep linux (loop)/casper/vmlinuz.efi iso-scan/filename=/xubuntu-16.04.1-desktop-amd64.iso file=(loop)/preseed/xubuntu.seed boot=casper only-ubiquity quiet splash --- initrd (loop)/casper/initrd.lz } menuentry "Install Xubuntu 16.04.1 i386" { loopback loop /xubuntu-16.04.1-desktop-i386.iso set gfxpayload=keep linux (loop)/casper/vmlinuz iso-scan/filename=/xubuntu-16.04.1-desktop-i386.iso file=(loop)/preseed/xubuntu.seed boot=casper only-ubiquity quiet splash --- initrd (loop)/casper/initrd.lz } menuentry "Install Ubuntu Server 16.04.2 { loopback loop /ubuntu-16.04.2-server-amd64.iso set gfxpayload=keep linux (loop)/install/vmlinuz file=/cdrom/preseed/ubuntu-server.seed quiet --- initrd (loop)/install/initrd.gz } menuentry "Fedora-Workstation-Live 25" { loopback loop /Fedora-Workstation-Live-x86_64-25-1.3.iso linux (loop)/isolinux/vmlinuz iso-scan/filename=/Fedora-Workstation-Live-x86_64-25-1.3.iso root=live:CDLABEL=Fedora-WS-Live-25-1-3 rd.live.image quiet rootfstype=auto ro rhgb rd.luks=0 rd.md=0 rd.dm=0 initrd (loop)/isolinux/initrd.img } menuentry "Fedora-KDE-Live 25" { loopback loop /Fedora-KDE-Live-x86_64-25-1.3.iso linux (loop)/isolinux/vmlinuz iso-scan/filename=/Fedora-KDE-Live-x86_64-25-1.3.iso root=live:CDLABEL=Fedora-KDE-Live-25-1-3 rd.live.image quiet rootfstype=auto ro rhgb rd.luks=0 rd.md=0 rd.dm=0 initrd (loop)/isolinux/initrd.img } menuentry "Install Kubnuntu 16.04.2 Desktop" { loopback loop /kubuntu-16.04.2-desktop-amd64.iso set gfxpayload=keep linux (loop)/casper/vmlinuz.efi iso-scan/filename=/kubuntu-16.04.2-desktop-amd64.iso file=(loop)/preseed/kubuntu.seed boot=casper only-ubiquity quiet splash oem-config/enable=true --- initrd (loop)/casper/initrd.lz }
Этот содержит конфигурацию для загрузки с флешки KNOPPIX 7.2, SystemRescueCd 4.6.1, различных вариантов Ubuntu и CentOS 7. А дальше осталось просто положить указанные в grub.cfg образы ISO в корневую директорию флешки и переименовать их как указано в файле.
Еще немного примеров
menuentry "Linux Mint ISO" { loopback loop /linuxmint.iso linux (loop)/casper/vmlinuz file=/cdrom/preseed/mint.seed boot=casper initrd=/casper/initrd.l iso-scan/filename=/linuxmint.iso noeject noprompt splash -- initrd (loop)/casper/initrd.lz } menuentry "DBAN ISO" { loopback loop /dban.iso linux (loop)/DBAN.BZI nuke="dwipe" iso-scan/filename=/dban.iso silent -- } menuentry "Tinycore ISO" { loopback loop /tinycore.iso linux (loop)/boot/bzImage -- initrd (loop)/boot/tinycore.gz } menuentry "Memtest 86+" { linux16 /memtest86+.bin } menuentry "Debian 9.5 i386 Install" { set background_color=black loopback loop /debian-9.5.0-i386-netinst.iso linux (loop)/install.386/vmlinuz vga=788 --- quiet initrd (loop)/install.386/initrd.gz } menuentry "Install Kubnuntu 19.04 Desktop" { loopback loop /kubuntu-19.04-desktop-amd64.iso set gfxpayload=keep linux (loop)/casper/vmlinuz iso-scan/filename=/kubuntu-19.04-desktop-amd64.iso file=(loop)/preseed/kubuntu.seed boot=casper only-ubiquity quiet splash oem-config/enable=true --- initrd (loop)/casper/initrd } menuentry "Install Ubnuntu 20.04 Server" { insmod part_gpt insmod ext2 insmod search_fs_uuid rmmod tpm search --no-floppy --set=root --fs-uuid 36c1a912-77c7-4cec-8120-c2088e1e131c set isofile="/ubuntu-20.04-live-server-amd64.iso" set gfxpayload=keep loopback loop ($root)$isofile linux (loop)/casper/vmlinuz iso-scan/filename=${isofile} quiet --- initrd (loop)/casper/initrd } menuentry "Install Ubnuntu 21.10 Server" { set gfxpayload=keep set isofile="/ubuntu-21.10-live-server-amd64.iso" loopback loop ($root)$isofile linux (loop)/casper/vmlinuz iso-scan/filename=${isofile} quiet --- initrd (loop)/casper/initrd } menuentry "Install Ubuntu Server 16.04 i386" { loopback loop /ubuntu-16.04.6-server-i386.iso set gfxpayload=keep linux (loop)/install/vmlinuz isoloop=/ubuntu-16.04.6-server-i386.iso file=/cdrom/preseed/ubuntu-server.seed quiet splash --- initrd (loop)/install/initrd.gz } menuentry 'Debian 10 i386 Install' { set background_color=black loopback loop /debian-edu-10.0.0-i386-netinst.iso linux (loop)/install.386/gtk/vmlinuz findiso=/debian-edu-10.0.0-i386-netinst.iso modules=debian-edu-install-udeb desktop=xfce vga=788 --- quiet initrd (loop)/install.386/gtk/initrd.gz }
Добавление других образов ISO
Для добавления других образов ISO нужно в файлик /boot/grub/grub.cfg прописывать параметры, которые обычно можно найти в файлах grub.cfg, syslinux.cfg и других, входящих в состав образа ISO.
То есть создаем новый раздел меню в /boot/grub/grub.cfg (копируя уже существующий), затем указываем файл ISO в строке loopback, а в строку linux указываем путь к ядру (то что append из syslinux.cfg). В строке initrd указываем путь к файлу initrd.
Скорее всего, в строке linux после пути к файлу ядра придется указать параметры загрузки ядра, которые позволят ядру работать с loop-устройством, на которое монтируется файл ISO. Для систем со схожим ядром, параметры, как правило, одинаковые. Например, для загрузки Fedora подойдут параметры от CentOS.
Много обновляемой информации о загрузке ISO образов с помощью GRUB можно тут: https://wiki.archlinux.org/index.php/Multiboot_USB_drive
Загрузка установочных образов Windows 7 и Windows 10 c помощью GRUB
Монтируем iso-образ Windows 7 или Windows 10, копируем с него все файлы на флешку с помощью cp или rsync и дописываем в grub.cfg такое:
set timeout=10 set default=0 menuentry "Windows 7 or Windows 10 installer" --class windows --class os { insmod part_msdos insmod ntfs insmod ntldr search --no-floppy --label MULTIBOOT --set=root ntldr /bootmgr }
Тут grub будет загружать модули с помощью insmod, потом search - искать раздел с меткой MULTIBOOT и когда найдет - с помощью –set укажет, что root находится на этом разделе, а затем передаст управление /bootmgr
В принципе, для красоты и удобства, было бы неплохо создать отдельный раздел на флешке (так я поступил при создании нового варианта флешки - Универсальная загрузочная флешка для BIOS/UEFI), отформатировать его с меткой Win7, распаковать файлы из iso-образа туда и указывать –label Win7. Просто в дистрибутиве windows также есть директоррия boot и если понадобится очистить флешку от инсталлятора windows, не затрагивая остальные ОС, то из этой директории файлы придется удалять вручную.
Discussion
Здравствуйте, не подскажите, как узнать необходимые параметры ядра, для grub.cfg, чтобы запустить ливобраз с usb накопителя? Что я только не пробовал, никак не выходит. Перекопал кучу сайтов и везде однотипно и не работает. Только благодаря вашему блогу удалось с минимальными корректироваками запустить минт. Такой настройки ни у кого не было: file=/preseed/linuxmint.seed boot=casper initrd=/casper/initrd.lz кстати z в расширении вы недопечатали и /cdrom/preseed в последней сборке просто /preseed. В общем у меня работает так: linux (loop)/live/vmlinuz boot=live initrd=/live/initrd.lz iso-scan/filename=/iso/lmde-4-cinnamon-64bit.iso noeject noprompt splash –
А вот LMDE и дебиан никак не сдаются. Хоть и использую их грубы. Не хочу импользовать программы так как они стирают все разделы на диске, а мне они нужны. Поэтому хочу ручками.
День добрый, Александр! Ну я же написал, что
Универсальных рецептов тут нет, поскольку разные дистры собираются разными людьми/программами. Даже в пределах одного семества (например - Ubuntu) от версии к версии и от варианта к варианту (Gnome, KDE) - параметры запуска в grub могут быть разными, как и структура файлов в ISO.
Какой конкретно ISO Debian вы пытаетесь запустить с USB?