Ubuntu на USB-накопителе - загрузка в режимах BIOS и UEFI

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


Мне сказали, что если я установлю Ubuntu в режиме BIOS, я не смогу загрузиться с компьютера в режиме UEFI, и наоборот.

Поскольку я хотел бы иметь возможность загружаться на любом компьютере, это большая проблема.

Что я могу сделать, чтобы иметь возможность загружаться на компьютерах в режимах BIOS или UEFI в моем случае?

Я искал решения, но большинство из них предназначены для конкретных потребностей, отличных от моих, поэтому из этих решений трудно извлечь минимальные требования, чтобы применить их к моей проблеме.

Есть ли простое, "чистое" и достаточно общее решение этой проблемы?

Буду признателен за некоторые объяснения причин, по которым конкретное решение является хорошим или необходим определенный шаг.


Моя текущая настройка:

  • Флешка: SanDisk Ultra Fit (32 Go)
  • ОС: Xubuntu 16.04 i386
  • установка: полная установка (с Live USB, встроенного в Rufus)
  • драйверы: не являются собственностью
  • файловые системы:
    • таблица разделов: GPT
      • 2: ESP, /boot/efi, 128 Mio, FAT32, [boot, esp]
      • 3: ABP, 128 млн., HFS +
      • 4: BBP, 2 млн., [Bios_grub]
      • 5: своп, 512 млн
      • 6: корень, /24 Gio, ext4, defaults,errors=remount-ro,lazytime,commit=60
      • 1: данные, /media/data, ~ 3,6 Гио, FAT32, defaults,lazytime,check=strict
    • БАРАН:
      • /tmp, tmpfs, defaults,nosuid,nodev,noexec,mode=1777
  • своп:
    • vm.swappiness=5
    • раздел подкачки: 512 Mio, для экстренных случаев
    • zRAM
    • файлы подкачки:
      • /var/swap/hib.swp: тот же размер, что и ОЗУ, для спящего режима, генерируется скриптом при запуске
      • /var/swap/opt.swp: если необходимо, генерируется скриптом
  • сверхпоставка: ~5,6%
    • встроенный: ~1,2 Гио (по-видимому)
    • добавлено: 512 млн
  • планировщик: deadline

2 ответа

NB: Здесь я представляю ручной способ продолжить. Это немного сложнее (не невозможно подумать), но вы можете контролировать именно то, что вы хотите / нужно. Если вы ничего не понимаете, возможно, использование программного обеспечения, такого как MultiSystem, будет лучшим решением для вас.

Есть два способа создать такой ключ USB. Вы можете использовать таблицу разделов mdos/MBR или таблицу разделов GPT. Оба имеют свои преимущества и недостатки, я сначала попытаюсь описать версию mdos, а позже, когда у меня будет больше времени, может перейти к версии GPT.

таблица разделов mdos/MBR

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

Шаг 1: Найдите ваше устройство USB

Используйте команду

lsblk

чтобы найти имя вашего USB-устройства. Вы можете, например, запустить lsblk Вставьте ключ и запустите еще раз lsblk чтобы увидеть, что изменилось. Устройство, которое появляется, является вашим ключом, и будет отмечено, имеет /dev/sdX,

Шаг 2: Создайте разделы

Вы можете использовать любую понравившуюся программу: gparted, fdisk, cfdisk (инструмент командной строки для fdisk)... Затем выполните следующие операции

  • Сначала запустите программу (sudo gparted или же sudo fdisk /dev/sdX в зависимости от выбранной вами программы)
  • Затем перезагрузите ваше устройство, чтобы иметь msdos таблица разделов (в gparted это в "Устройство / Создать новую таблицу разделов", с fdisk тип o,
  • Затем создайте три раздела. Первый находится в FAT32, это будет раздел данных (это также может быть NTFS, ext или любая другая файловая система), второй - это раздел EFI (на основе FAT) и должен быть загрузочным и иметь размер около 150 МБ. последний - это раздел с iso, и он должен быть загрузочным и в FAT32 (если вы используете ext2, если загрузитесь, но вы не сможете использовать постоянство). Вот что вы хотели бы получить в конце процесса (обратите внимание на флаги (драпировка на рисунке), они важны):

Если вы хотите создать их с fdisk, у вас должно быть что-то вроде этого:

$ sudo fdisk -l /dev/sdc
Disque /dev/sdc : 14,3 GiB, 15376000000 octets, 30031250 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x2d844503

Périphérique Amorçage    Début      Fin Secteurs Taille Id Type
/dev/sdc1                 2048 14682111 14680064     7G  b W95 FAT32
/dev/sdc2    *        14682112 14989311   307200   150M ef EFI (FAT-12/16/32)
/dev/sdc3    *        14989312 30031249 15041938   7,2G  b W95 FAT32

Для этого выполните следующие действия:

sudo fdisk /dev/sdX
o

n
p
1
<Enter>
+7G     # Or any size you want, just be sure to let arount 2G at the end of the device
t
b

n
p
2
<Enter>
+150M
t
ef

n
p
3
<Enter>
<Enter>
t
b

w

sudo mkfs.fat -F32 /dev/sdX1
sudo mkfs.vfat /dev/sdX2
sudo mkfs.fat -F32 /dev/sdX3

Шаг 3: Смонтируйте разделы

Теперь смонтируйте их, чтобы написать на них

mkdir /tmp/usb{2,3}
sudo mount /dev/sdX2 /tmp/usb2/
sudo mount /dev/sdX3 /tmp/usb3/

Шаг 4: Установите grub на два раздела (EFI и не-EFI)

Затем вам нужно установить grub на два раздела. Обязательно установите grub и запустите:

sudo grub-install -v --no-floppy --boot-directory=/tmp/usb3 --target=i386-pc /dev/sdX
sudo grub-install -v --no-floppy --boot-directory=/tmp/usb2 --efi-directory=/tmp/usb2 --removable --target=x86_64-efi /dev/sdX

Шаг 5: Скопируйте ISO-файл и настройте Grub

Затем скопируйте ваш iso-файл в следующую папку:

sudo cp <your iso file> /tmp/usb3/linux-iso

и поместите конфигурацию grub в две конфигурации grub /tmp/usb2/grub/grub.cfg а также /tmp/usb3/grub/grub.cfg (Примечание: это может быть grub2/grub.cfg в зависимости от вашей версии grub)

insmod loopback
insmod iso9660

menuentry 'XUbuntu 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
} 

NB: вы должны отредактировать этот файл, чтобы он соответствовал хорошему iso-файлу, здесь мы должны положить /tmp/usb3/linux-iso/xubuntu-16.04.1-desktop-amd64.iso,

Перезагрузите компьютер и попробуйте в режиме UEFI и не в режиме UEFI: он должен работать, но у вас пока не должно быть постоянства!

Шаг 6: добавьте одно постоянство

Добавить постоянство очень легко. Идея состоит в том, чтобы создать на третьем разделе (фактически любой раздел FAT32 будет принят) пустой файл casper-rw это будет содержать некоторую файловую систему ext2. Затем он будет расположен над iso-файлом, так что если система будет изменена, файл casper-rw запишет эти модификации. Если вы хотите записать только дом, то делайте точно такие же шаги, но с именем файла home-rw вместо casper-rw (это может быть полезно, если вы обращаете внимание только на данные документа и предпочитаете избегать проблем с полным постоянством, описанных после). Наконец, обратите внимание, что вместо файла вы можете просто создать раздел в ext2 с меткой casper-rw или же home-rw и это даст точно такой же результат, за исключением того, что вы сможете иметь более 4 Гб модификаций (максимальный размер в системе FAT32).

Чтобы создать файл, просто запустите:

sudo dd if=/dev/zero of=/mnt/usb3/casper-rw bs=1M count=512

(здесь 512M, но вы можете изменить размер данных до 4G)

и добавить persistent в соответствии linux ... в файлах /mnt/usb{2,3}/grub/grub.cfg (изменить два файла). Это должно выглядеть так:

insmod loopback
insmod iso9660

menuentry 'XUbuntu persistent 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper persistent file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
}

Теперь перезагрузитесь: у вас должна быть настойчивость! Вы даже можете смешивать постоянные и непостоянные файлы, как это:

insmod loopback
insmod iso9660

menuentry 'XUbuntu 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
}
menuentry 'XUbuntu persistent 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper persistent file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
}

Многократное постоянство

На данный момент все ОС в ключе имеют одинаковый файл персистентности. И если это casper-rw который является общим, если может сломать все (данные в одной ОС не имеют ничего общего с данными в другой ОС). Чтобы иметь один постоянный файл для каждой системы, очень просто поместить файл в заданную папку, например persist/xubuntu:

mkdir /mnt/usb3/persist/xubuntu/
sudo dd if=/dev/zero of=/mnt/usb3/persist/xubuntu/casper-rw bs=1M count=512

и добавить persistent persistent-path=/persist/xubuntu в grub.cfg файлы:

insmod loopback
insmod iso9660

menuentry 'XUbuntu persistent 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper persistent persistent-path=/persist/xubuntu file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
}

Вы также можете заметить, что я не нашел способ получить один casper-rw раздел для каждой ОС, поэтому я не вижу, как обеспечить многократное сохранение и сохранение более 4 ГБ для всех ОС. Если у кого-то есть идея, я был бы рад услышать об этом. Может быть, установка разделов может временно решить эту проблему?

Недостаток настойчивости

Когда вы используете постоянство, вы должны знать, что обновление может быть опасным. Это может действительно сломать вашу систему, если изменения коснутся ядра, поэтому избегайте слишком большого их количества. Более того, иногда, когда вы меняете компьютер, это не очень хорошо, некоторые люди объясняют, что они потеряли интернет, когда меняли интернет-карту. Если вы хотите обновить свою систему, вам следует установить ее непосредственно на USB-ключ (например, если бы USB-ключ был на диске), но этот метод может не сработать, если вы попробуете свой ключ на компьютере, которому требуется проприетарное программное обеспечение, которое не входит в установленную ОС. Если у кого-то есть решение, которое обходит эти недостатки, я был бы рад услышать об этом.

источники

Чтобы настроить grub для соответствия другим системам или если вы хотите использовать GPT вместо MBR, вас могут заинтересовать следующие ссылки:

Наслаждайтесь, и не стесняйтесь спрашивать, если у вас есть вопросы.

Полная установка на USB - BIOS / UEFI

Mkusb является отличной основой для USB-накопителя с полной установкой, способного загружаться как из BIOS, так и из UEFI:

  • Используйте mkusb для создания Live-системы на установщике USB (2 ГБ или более).

  • Используйте mkusb, чтобы создать постоянную систему на целевом 128 ГБ USB с использованием настроек по умолчанию с постоянством ~25 ГБ (оставшийся раздел NTFS используется в качестве раздела данных, доступного для Windows).

  • Как только mkusb завершит работу, откройте GParted и удалите sdx4, раздел ISO9660 и разверните sdx5 в восстановленное пространство, sdx - это имя устройства целевого диска.

  • При необходимости создайте дополнительный раздел ext4 sdx6 для /home.

  • Прежде чем продолжить, отключите или извлеките жесткий диск (необязательно, но рекомендуется, настоятельно рекомендуется в режиме UEFI).

  • Загрузите установщик диска, выберите Попробовать.

  • Вставить целевой диск

  • Начать установку Ubuntu...

  • Выберите "Что-то еще".

  • Выберите sdx5, (на целевом диске) и нажмите кнопку "Изменить".

  • Выберите Использовать как: ext4, Формат и Точка монтирования: /.

Не трогайте другие разделы (кроме случаев добавления раздела /home в sdx6).

  • Выберите sdx5 в качестве устройства для установки загрузчика.

  • Полная установка.

  • Вырежьте grub.cfg из sdx5/boot/grub и вставьте в sdx3/boot/grub, перезаписав существующий файл grub.cfg.

  • Загрузите целевой диск и запустите sudo update-grub, чтобы добавить все диски в меню загрузки.

  • Не устанавливайте никакие проприетарные драйверы (например, Nvidia) при установке до 18.04.

Другие вопросы по тегам