Мультизагрузочный USB с дополнительным первым разделом

Я хотел бы создать 64-битный мультизагрузочный USB-накопитель.

Я хочу, чтобы первый раздел был 32-гигабайтным разделом fat32, чтобы я мог использовать его для доступа к файлам из окон. (Windows отображает только первый раздел на съемном диске).

Затем я хочу поместить пару (или больше, если возможно) дистрибутивов linux на более поздние разделы.

Я предполагаю, что мне понадобится небольшой загрузочный раздел (в идеале syslinux) … но он не может быть первым разделом.

Как мне лучше всего начать эту настройку?

Все утилиты, которые я просматривал (linux и windows) для создания мультизагрузочных USB-устройств, не дают параметров для добавления дополнительного раздела в начале таблицы разделов.

  • Как rsync-файлы при установке USB-накопителя
  • Размер Usb неправильный после записи dd ISO-изображения
  • Установите Chromium OS без USB-диска
  • df сильно колеблется
  • Ubuntu 11.04 и большие внешние диски
  • Проблемы с USB goflex 2 TB
  • Как отформатировать 16-гигабайтный pendrive для хранения всего 2 ГБ
  • Расширение Debian запрашивает пароль root для установки дисков usb после обновления
  • 4 Solutions collect form web for “Мультизагрузочный USB с дополнительным первым разделом”

    Я считаю, что инструмент, который вы ищете, – YUMI . У меня почти такая же настройка, на которую вы ссылаетесь на 64-Гбайт USB-накопителе. Вы не указали, хотите ли вы, чтобы это были дистрибутивы Live или полные установки, но вот моя личная настройка:

    64G USB-накопитель, отформатированный в любом формате YUMI (я забыл, но считаю, что это Fat32), но это не имеет особого значения, поскольку он просто работает «из коробки»). Изнутри YUMI вы можете выбрать несколько ISO-стандартов Linux, которые позволят вам загрузить Live Boot из того, что вы выбрали при запуске.

    Одно дело отметить, однако, что если ваш USB-накопитель в настоящее время не в том формате, который предпочитает YUMI, ему необходимо будет переформатировать диск соответственно, поэтому убедитесь, что в нем не хранятся важные файлы, прежде чем повторно форматировать его для установки вашего первого дистрибутива Linux.

    YUMI автоматически сохраняет каждый из этих дистрибутивов в каталоге в корне этого USB-накопителя с именем multiboot , который содержит все, что связано с YUMI, и материал, необходимый для запуска ваших дистрибутивов Linux. Вы можете использовать остальную часть этого USB-накопителя, чтобы хранить все, что захотите.

    Лично у меня есть файлы win, osx и nix, содержащие важные инструменты и переносные приложения, и эти каталоги находятся на этом же USB-диске прямо рядом с многозадачным каталогом. Если я обычно загружаюсь в ОС, а затем вставляю этот USB-накопитель, все мои файлы доступны для использования.

    Однако, если я нахожусь на машине под Windows, у меня есть возможность загружаться непосредственно с этого USB-накопителя в загрузчик YUMI (который, я считаю, является настроенной формой GRUB), и он позволяет мне выбирать из всех живых которые он установил в многозадачном каталоге. Я думаю, что он даже дает возможность загружать Windows в обычном режиме, или это может быть просто вариант выхода, который просто перезагружается, а затем я могу нормально загружать Windows с внутреннего диска.

    Если вы хотите постоянно сохранять файлы во всех перезагрузках и запускать Linux как полную установку, я считаю, что YUMI имеет возможность создать отдельный статический раздел на диске, но он утверждает, что он ограничен только Ubuntu. Он также может работать с Debian, но я никогда не пробовал этот метод. Опять же, я мог бы получить эту специфическую особенность, полностью запутанную с функцией, включенной в UNetbootin , которая в последний раз я не поддерживал все варианты многозадачности, поддерживаемые YUMI. По моему личному мнению, YUMI лучше, чем UNetbootin.

    Однако должно быть известно, что при использовании YUMI я столкнулся с недостатком:

    В какой-то момент у меня были прямые версии Backtrack, Knoppix, Crunchbang и Linux Mint, установленные через YUMI. Несколько месяцев спустя я хотел загрузить этот USB в YUMI и удалить Backtrack и заменить его на Kali Linux, но YUMI сообщил мне, что они обновили свой загрузчик, и в результате, если бы я хотел установить дополнительные дистрибутивы, я бы переформатировать диск и начать с нуля с помощью своего нового загрузчика, который был несовместим со старыми дистрибутивами, которые я ранее установил, которые использовали свой старый загрузчик.

    Это не было бы огромным делом, но было бы досадой, чтобы tar содержимое моих обычных файлов и переместить их с USB, а затем переустановить все другие Live ISO, которые я хотел бы сохранить через YUMI. Однако, скорее всего, это был бы разбойник, если бы вы хотели иметь отдельный раздел для хранения файлов при перезагрузках (что, как я уже сказал, я просто могу ввести в заблуждение функцию Unetbootin, в отличие от YUMI).

    Все из сказанного, исходя из вашего конкретного вопроса, я считаю, что YUMI должен адекватно использовать цель того, что вы хотите достичь. Это отличный инструмент, который мне хорошо послужил в прошлом.

    Для этого требуется компьютер с использованием BIOS для загрузки или поддержки какой-либо формы «старого» режима загрузки ( модуль поддержки совместимости ) – по крайней мере, я думаю, что это так: у меня нет опыта работы с системами EFI.


    Чтобы создать загрузочный USB-накопитель с syslinux, вы:

    • создавать разделы
    • инициализировать файловые системы на разделах
    • установить syslinux на раздел
    • Отметить раздел syslinux active
    • установить код syslinux ' mbr

    После этих шагов вы сможете загрузиться с USB-накопителя и, после загрузки с палки, будут приветствоваться приглашением загрузки syslinux; там вы можете выдавать команды для загрузки дополнительного кода и продолжения процесса загрузки.

    Чтобы не набирать длинную командную строку при каждой загрузке, можно создать файл syslinux.cfg, чтобы удерживать командную строку, возможно, несколько.

    Обычно также устанавливаются модули syslinux , копируя соответствующие файлы * .c32 в каталог syslinux раздела; примерами для этих модулей являются: menu.c32 , chain.c32 .

    Пример изображения

    Поскольку у меня нет свободной ручки USB, вокруг меня я создал образ 2 ГБ для примера, выпустив:

     dd if=/dev/zero of=example.img bs=1k count=2M 

    который я затем подключил к устройству loop, выполнив:

     losetup --find --show example.img 

    Эта команда требует, чтобы параметр max_part модуля цикла был установлен на число, по крайней мере такое же большое, как количество разделов в файле изображения:

     rmmod loop modprobe loop max_part=10 

    Если модуль цикла был встроен в ядро, вы можете указать max_part в качестве загрузочного параметра для ядра:

     loop.max_part=10 

    Альтернативно вы можете использовать kpartx для установки устройств цикла:

     kpartx -av example.img 

    Узлы устройств для разделов можно найти ниже / dev / mapper / . Если вы используете kpartx и хотите следовать примеру, вы должны соответствующим образом установить переменную dev_part .

    переменные

    Для примеров я задал следующие переменные:

     # device node dev=$(losetup --find --show example.img) # set to eg /dev/mapper/loop0 when using kpartx dev_part=${dev} # loop devices use the letter 'p' to denote partitions (eg /dev/loop0p1) # drives normally do not (eg /dev/sda1) part_divider=p # path to syslinux modules and mbr libpath=/usr/lib/syslinux # Path to mount point; used when eg files need editing mount_point=/mnt # The number of the partition that you use to share files with windows files_part_nr=1 # The number of the boot partition boot_part_nr=2 # The number of the partition that holds a linux distribution CD's content dist_part_nr=3 

    В качестве примера я выбрал Tiny Core Linux :

     # Download Tiny Core's iso and set variable "isofile" to its destination # filename isofile=$(curl -# -OJ -w '%{filename_effective}\n' "http://tinycorelinux.net/6.x/x86/release/TinyCore-current.iso") 

    Команда curl выполняет следующие действия:

    • -# Показывать ход с помощью панели на терминале
    • -O Записать файл на имя, полученное из URL
    • -J Вывести имя из заголовка «Content-Disposition» вместо URL-адреса
    • -w Введите имя файла на стандартный вывод (который будет сохранен в переменной isofile)

    Создание разделов

    MBR

     # Create an empty msdos style partition table parted -s "${dev}" mktable msdos # Create two primary partitions (ie sdb1, sdb2) # one holding your files and one for syslinux parted -s "${dev}" mkpart primary fat32 0MB 800MB parted -s "${dev}" mkpart primary ext2 800MB 900MB 

    GPT

     # Create an empty gpt partition table parted -s "${dev}" mktable gpt # Create two primary partitions (ie sdb1, sdb2) # one holding your files and one for syslinux parted -s "${dev}" mkpart files fat32 0MB 800MB parted -s "${dev}" mkpart boot ext2 800MB 900MB 

    Инициализация файловых систем

     # DATA mkfs.vfat "${dev_part}${part_divider}${files_part_nr}" # BOOT mkfs.ext2 "${dev_part}${part_divider}${boot_part_nr}" 

    Установите syslinux (extlinux) на раздел

    Установите загрузочный раздел и запустите extlinux :

     mount "${dev_part}${part_divider}${boot_part_nr}" "${mount_point}" mkdir "${mount_point}/syslinux" extlinux -i "${mount_point}/syslinux" umount "${mount_point}" 

    Вы можете выбрать любой другой каталог в разделе для хранения файлов syslinux: поместить файлы в корневой каталог: extlinux -i "${mount_point}" ; поместите файлы в каталог под названием / boot : extlinux -i "${mount_point}/boot" .

    С помощью syslinux команда будет выглядеть следующим образом (у вас не должно быть загрузочного раздела):

     syslinux -i -d /syslinux "${dev_part}${part_divider}${boot_part_nr}" 

    Отметка раздела syslinux

    По умолчанию syslinux MBR загрузочный код ищет раздел, помеченный активным, чтобы передать управление, чтобы загрузить загрузочную запись тома .

    MBR

     # Mark boot partition as active (MBR) parted "${dev}" set "${boot_part_nr}" boot on 

    GPT

     # Mark boot partition as active (GPT) parted "${dev}" set "${boot_part_nr}" legacy_boot on 

    Если вы используете gdisk для разделения вашего диска, вам нужно активировать «дополнительные функции», нажав x , чтобы иметь возможность «устанавливать атрибуты» ( a ).

    Установите код MBR syslinux

     dd conv=notrunc bs=440 count=1 if="${libpath}/mbr/mbr.bin" of="${dev}" 

    Для разделенного диска GPT вы используете gptmbr.bin вместо mbr.bin .

    Существует также альтернативный загрузчик altmbr.bin , который не ищет раздел, помеченный как активный, но вместо этого использует указанный раздел; используйте его в соответствии со следующим:

     print '\x2' | cat ${libpath}/mbr/altmbr.bin - | dd conv=notrunc bs=440 count=1 iflag=fullblock of=${dev} 

    ботинок

    Добавьте этот пункт, который вы можете запустить с устройства, и его приветствует приглашение загрузки syslinux.

     qemu-system-i386 -drive file="${dev}",format=raw 

    Поскольку syslinux может загружать только файлы из одного раздела, вы еще не сможете продолжить процесс загрузки в ОС.

    Загрузите дистрибутив Linux через Chainloading

    Создать раздел

    Создать другой раздел; либо запустить (для раздела типа MBR):

     parted "${dev}" mkpart primary ext2 900MB 100% 

    или использовать (для GPT):

     parted "${dev}" mkpart distribution ext2 900MB 95% 

    Затем инициализируйте файловую систему:

     mkfs.ext2 "${dev_part}${part_divider}${dist_part_nr}" 

    Последовательная загрузка

    Модуль syslinux ' chain.c32 позволяет вам загружать загрузочную запись тома другого раздела, которая может использоваться для ограничения ограничений syslinux только для загрузки файлов раздела, откуда он был загружен; таким образом, можно также повторно использовать файлы конфигурации syslinux / isolinux, включенные в образ ISO.

    Чтобы иметь возможность использовать модуль chain.c32, вам необходимо скопировать его и его зависимости ( libcom32.c32 и libutil.c32 ) в каталог syslinux в загрузочном разделе:

     mount "${dev_part}${part_divider}${boot_part_nr}" ${mount_point} cp "${libpath}/modules/bios/libcom32.c32" ${mount_point}syslinux/ cp "${libpath}/modules/bios/chain.c32" ${mount_point}/syslinux cp "${libpath}/modules/bios/libutil.c32" ${mount_point}/syslinux umount ${mount_point} 

    Затем вы распакуете ISO-образ и переименуете isolinux.cfg в имя, ожидаемое syslinux: syslinux.cfg

     mount "${dev_part}${part_divider}${dist_part_nr}" "${mount_point}" 7z x -o"${mount_point}" "${isofile}" mv "${mount_point}/boot/isolinux/isolinux.cfg" "${mount_point}/boot/isolinux/syslinux.cfg" 

    Я нахожусь в чистом, чтобы также переименовать папку isolinux / в syslinux / , хотя это не является строго необходимым; Я также удаляю некоторые ненужные файлы:

     mv "${mount_point}/boot/isolinux" "${mount_point}/boot/syslinux" rm "${mount_point}/boot/syslinux/isolinux.bin" rm -r "${mount_point}/[BOOT]" 

    Кажется, что iso от TinyCore пропускает libutil.c32 (необходимо для menu.c32 ):

     cp ${libpath}/modules/bios/libutil.c32 "${mount_point}/boot/syslinux" 

    Установите загрузчик на раздел и отключите:

     extlinux -i ${mount_point}/boot/syslinux umount ${mount_point} 

    ботинок

    Когда вы загружаете изображение

     qemu-system-i386 -drive file=${dev},format=raw 

    и введите в командной строке syslinux следующее:

     chain.c32 hd0 3 

    вам следует приветствовать меню Syslinux Tiny Core Linux .

    конфигурация

    Установите загрузочный раздел и создайте файл syslinux.cfg :

     mount ${dev_part}${part_divider}${boot_part_nr} ${mount_point} cat >${mount_point}/syslinux/syslinux.cfg <<EOF LABEL tc MENU LABEL Boot TinyCore COM32 chain.c32 APPEND hd0 3 umount ${mount_point} 

    На диске, разбитом на разделы с использованием формата GPT, вы можете использовать GUID раздела или его метку, передавая либо guid= либо label= в chain.c32 :

     APPEND label=<LABEL> 

    или

     APPEND guid=<GUID> 

    Вы можете использовать blkid чтобы найти метку и guid .


    Grub2

    GPT

    Для GPT grub2 требуется дополнительный раздел для хранения некоторого кода загрузки. При parted вы создаете один со следующими командами:

     parted ${dev} grub_boot 95% 100% parted ${dev} set bios_grub on 

    В gdisk вы выбрали ef02 как тип раздела.

    Согласно информационному документу grub, он должен иметь минимальный размер 31KiB.

    Установить grub

     mount ${dev_part}${part_divider}${boot_part_nr} ${mount_point} # use --modules="part_gpt" for a gpt partition drive grub-install -d ${mount_point} --modules="part_msdos ext2" umount ${mount_point} 

    Я не знаю, строго ли --modules – по крайней мере, с помощью устройства loop grub не удалось получить доступ к файлам без него.

    Последовательная загрузка

    В приглашении загрузки grub введите:

     insmod chain set root=(hd0,3) chainloader +1 boot 

    И вы снова увидите меню syslinux Tiny Core Linux .

    конфигурация

    Для примера Tiny Core Linux добавьте следующее в /grub/grub.cfg в загрузочный раздел:

     menuentry "Tiny Core Linux" { insmod chain set root=(hd0,3) chainloader +1 } 

    Чтобы быть независимым от порядка, в котором приводятся перечисленные вами диски, вы можете установить корень с помощью UUID; замените set root с помощью:

     search --set root --fs-uuid <UUID> 

    Используйте blkid для получения UUID.

    Загрузите ISO

    Живые компакт-диски некоторых дистрибутивов могут монтировать свою файловую систему из ISO-образа; вместе с функцией loop grub вы можете сделать следующее (например, я использую Archlinux ) Live CD):

     isofile=archlinux-2015.11.01-dual.iso mount ${dev_part}${part_divider}${dist_part_nr} ${mount_point} cp ${isofile} ${mount_point} umount ${mount_point} 

    Затем используйте следующее в grub.cfg :

     menuentry "Archlinux LiveCD" { insmod loopback set isofile="archlinux-2015.11.01-dual.iso" search --set isodrive --file /$isofile probe --fs-uuid --set uuid $isodrive loopback loop ($isodrive)/$isofile set root=loop echo "Loading kernel vmlinuz" linux /arch/boot/i686/vmlinuz img_loop=$isofile img_dev=/dev/disk/by-uuid/$uuid echo "Loading initial ramdisk archiso.img" initrd /arch/boot/i686/archiso.img } 

    Я нашел необходимые параметры загрузки для Archlinux ISO в дереве archiso git .

    Независимо от того, какой инструмент вы найдете, который создает дополнительный загрузочный раздел в начале, это вызовет проблемы с окнами, в которых будет отображаться только первый раздел. Но если вы не против иметь файлы syslinux в корне вашего раздела FAT32, вы можете просто установить syslinux.

    Вот что я сделал бы:

    1. Разделите диск по своему усмотрению, причем первый раздел будет 32 ГБ FAT32
    2. Установите Linux-дистрибутивы, которые вам нравятся, один за другим, используя syslinux
    3. После установки каждого дистрибутива выполните резервное копирование файлов конфигурации syslinux где-нибудь

    После того, как вы закончите, вы должны иметь свой последний дистрибутив с возможностью загрузки и правильные файлы конфигурации для загрузки дистрибутивов, установленных перед ним. Затем вам нужно будет создать меню syslinux в его файле конфигурации и создать резервные копии цепочек для загрузки каждого установленного дистрибутива.

    На последних достаточно аппаратных (2007 и выше) USB-накопителях нет ничего особенного (просто еще один жесткий диск). Поэтому вы можете использовать установочный компакт-диск Windows, чтобы отформатировать его как обычный «маленький жесткий диск (MBR)». Вы можете установить окна на первом 32-Гбайт основном разделе (вы можете использовать NTFS, так как жир не так хорош в этом размере), а затем добавить расширенный раздел, разрезать его на куски 12 ГБ и установить Linux как обычно. Вы можете использовать разделяемый / home раздел и монтировать для всех дистрибутивов и перерабатывать один и тот же UID / GUID, чтобы сделать ваш домашний каталог портативным. Просто убедитесь, что у вас есть все SSD-оптимизации для обоих окон и Linux, и не полностью заполняйте флэш-накопитель.

    Linux и Unix - лучшая ОС в мире.