Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
linux_faq:мультизагрузочная_флешка_с_помощью_grub [2019/11/24 19:36] – [Загрузка установочных образов Windows 7 и Windows 10 c помощью GRUB] adminlinux_faq:мультизагрузочная_флешка_с_помощью_grub [2023/05/11 11:22] (current) – [Еще немного примеров] admin
Line 1: Line 1:
 +====== Мультизагрузочная 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**, не затрагивая остальные ОС, то из этой директории файлы придется удалять вручную.
 +
  
  • linux_faq/мультизагрузочная_флешка_с_помощью_grub.txt
  • Last modified: 2023/05/11 11:22
  • by admin