Я хочу перейти от 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).

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

  • Разница между ldlinux.sys Syslinux и 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