Both sides previous revision Previous revision | |
linux_faq:мультизагрузочная_флешка_с_помощью_grub [2019/11/24 19:36] – [Загрузка установочных образов Windows 7 и Windows 10 c помощью GRUB] admin | linux_faq:мультизагрузочная_флешка_с_помощью_grub [2023/05/11 11:22] (current) – [Еще немного примеров] admin |
---|
| ====== Мультизагрузочная Linux-флешка ====== |
| Тут описана процедура создания флешки для загрузки множества **iso**-образов на компьютерах с **BIOS**. На компьютерах с **UEFI** она не работает. Для компов с **UEFI** я делал [[linux_faq:universal_multiboot_grub_bios_uefi|Универсальную загрузочную флешку для BIOS/UEFI]].\\ |
| Хорошо иметь под рукой флешку, с которой можно загрузиться для восстановления или установки системы. Также хорошо бы чтобы на ней помещались несколько разных образов **ISO**, доступных из меню. |
| Создать такую флешку можно с помощью специализированных программных средств как под Linux ( [[http://liveusb.info/dotclear|Multisystem]]) так и под Windows ([[http://sites.google.com/site/shamurxboot/|XBOOT]]), и даже мультиплатформенных ([[http://www.pendrivelinux.com/yumi-multiboot-usb-creator/|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 |
| И заполняем его примерно так: |
| <code> |
| 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 |
| } |
| |
| |
| </code> |
| |
| Этот содержит конфигурацию для загрузки с флешки **KNOPPIX 7.2**, **SystemRescueCd 4.6.1**, различных вариантов **Ubuntu** и **CentOS 7**. |
| А дальше осталось просто положить указанные в **grub.cfg** образы ISO в корневую директорию флешки и переименовать их как указано в файле. |
| ====== Еще немного примеров ====== |
| <code> |
| 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 |
| } |
| </code> |
| ====== Добавление других образов 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** такое: |
| |
| <code>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 |
| }</code> |
| |
| |
| Тут **grub** будет загружать модули с помощью **insmod**, потом **search** - искать раздел с меткой **MULTIBOOT** и когда найдет - с помощью **--set** укажет, что **root** находится на этом разделе, а затем передаст управление **/bootmgr** \\ |
| |
| В принципе, для красоты и удобства, было бы неплохо создать отдельный раздел на флешке (так я поступил при создании нового варианта флешки - [[linux_faq:universal_multiboot_grub_bios_uefi|Универсальная загрузочная флешка для BIOS/UEFI]]), отформатировать его с меткой **Win7**, распаковать файлы из iso-образа туда и указывать **--label Win7**. Просто в дистрибутиве **windows** также есть директоррия **boot** и если понадобится очистить флешку от инсталлятора **windows**, не затрагивая остальные ОС, то из этой директории файлы придется удалять вручную. |
| |
| |