Установка Alpine LVM с поддержкой двойной загрузки UEFI / BIOS

797
Timur Fayzrakhmanov

Я хочу перейти от Arch + Windows [GPT, двойная загрузка с использованием встроенного меню EFI] к Alpine + Windows [GPT, поддержка устаревшей загрузки BIOS, разделы XEN, LVM для Alpine как Dom0 и виртуализированной Windows как Dom1] . Допустим, это моя «исследовательская» идея. Как сделать экземпляр окна в XEN и как его установить, выходит за рамки. Я сделаю это самостоятельно. Я касаюсь больше процесса загрузки: правильно настроенные флаги / опции, включенные функции / модули в initramfs и т. Д. Установка будет производиться на внешний жесткий диск. Для этого есть две причины: (1) убедиться, что все работает нормально, прежде чем переходить на встроенную, и (2) сделать решение переносимым / Live. Пожалуйста, не GRUB . Хотите сделать это, используя только SYSLINUX.

Итак, вот как я «представляю» структуру диска:

[mbrgpt.bin] # see [3] [protective MBR] [GPT table] EFI partition (FAT32, 200MB) # mount point is /mnt/EFI, see [1] LVM partition /boot (FAT32, 200MB) # mount point is /mnt/LVM/boot, see [2] / (EXT4, 40GB) # mount point is /mnt/LVM/root windows (NTFS, 60GB) ... 

Это мой список предположений:

  • [1] Мне нужно скопировать /usr/share/syslinux/efi64/syslinux.efiкак /mnt/EFI/EFI/Boot/bootx64.efiи создать /mnt/EFI/loader/entries/alpine.conf. Содержание последнего должно совпадать с syslinux.cfg. Для справки я использую: https://wiki.alpinelinux.org/wiki/Create_UEFI_boot_USB#Create_configuration_files_for_boot_loader
  • [2] Я знаю, что делать / загружать часть структуры LVM не очень хорошая идея, но для исследовательских целей - все равно хотите, чтобы она была логическим томом (или не создавайте ее вообще). Я слышал на форуме Arch Linux, что SYSLINUX поддерживает это. Тем не менее, не нашел "свидетелей" в Интернете.
  • [3] Если я загружаюсь с устаревшей системы BIOS, gptmbr.binдолжен как-то найти и перепрыгнуть /mnt/LVM/boot/syslinux/ldsyslinux.c32. Затем загрузите syslinux.cfgи определите, как должно быть запущено ядро ​​XEN.
  • [*] Если я загружаюсь из системы UEFI, syslinux.efi запускается и параметры берутся из loader/entries/alpine.conf (конечно, контент должен совпадать syslinux.cfg).

Существует некоторая неопределенность в отношении вещей, которые я не нашел много информации в Интернете:

  • Разница между Syslinux ldlinux.sysи ldlinux.c32. В вики Arch есть некоторая информация о том, что sys является загрузчиком и загружает остальную часть себя из c32. Ничего более..
  • Разница между Syslinux mbr.binи gptmbr.binзагрузочными записями. Похоже, второй это то, что мне нужно.

Это мой список "TODO" (такие вещи, как mkdir & umount были пропущены для краткости). Обратите внимание, что шаги, отмеченные (?), Требуют дополнительных пояснений:

1. Partitioning medium gdisk /dev/sdx # create new GPT table # create EFI partition and set type to "EFI System" (sdx1) # create Linux LVM part and set type to "Linux LVM" (sdx2) # set an attribute for EFI part (?) # known attributes are: 0: system partition 1: hide from EFI 2: legacy BIOS bootable (seems like this is what gptmbr.bin need to pick it up) 60: read-only 62: hidden 63: do not automount  2. Format EFI partition  apk add dosfstools mkfs.fat -F 32 /dev/sdx1  3. Copy SYSLINUX's UEFI bootloader mount /dev/sdx1 /mnt/EFI cp /usr/share/syslinux/efi64/syslinux.efi /mnt/EFI/EFI/Boot/bootx64.efi  4. Install LVM apk add lvm2 rc-update add lvm # add device mapper modprobe dm-mod echo dm-mod >> /etc/modules  5. Create LVM layout pvcreate /dev/sdx2 vgcreate vg0 /dev/sdX2 # root lvcreate -n root -L 40G vg0 mkfs.ext4 /dev/vg0/root # boot lvcreate -n boot -L 200M vg0 mkfs.fat -F 32 /dev/vg0/boot # windows etc goes here ...  6. Rebuild initramfs mount /dev/vg0/root /mnt/LVM/root vi /etc/mkinitfs/mkinitfs.conf # append lvm to features=".." mkinitfs -c /etc/mkinitfs/mkinitfs.conf -b /mnt/LVM/boot  7. Create swap file mount /dev/vg0/root /mnt/LVM/root && cd /mnt/LVM/root fallocate -l 2G ./swapfile # or dd if=/dev/zero of=./swapfile bs=1M count=2048 chmod 600 ./swapfile mkswap ./swapfile swapon ./swapfile rc-update add swap # add '/swapfile none swap defaults 0 0' to /etc/fstab  8. Install SYSLINUX package & burn VBR apk add syslinux dd if=/usr/share/syslinux/gptmbr.bin of=/dev/sdx  9. Copy Alpine mount /dev/vg0/boot /mnt/LVM/boot setup-bootable /path/to/latest-alpine.iso /mnt/LVM/boot  10. Install SYSLINUX and tight things together syslinux --directory /boot/syslinux/ --install /dev/sdb1 vi /mnt/LVM/boot/syslinux/syslinux.cfg # (?) vi /mnt/EFI/loader/entries/alpine.conf # (?)  Last. Store changes made locally into root lbu package - | tar -C /mnt/LVM/root -xzf - 

Вопросы:

  1. Являются ли шаги выше хорошим способом? Если я что-то пропустил или усложнил, пожалуйста, дайте мне знать.
  2. Нужно ли /dev/vg0/bootкак-то отмечать, чтобы gptmbr.binможно было найти раздел при загрузке?
  3. Могу ли я избавиться от загрузочного раздела LVM и замены /mnt/LVM/bootс /mnt/LVM/rootкоторой я упомянул об этом?
0

0 ответов на вопрос