Я хочу перейти от 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 -
Вопросы:
- Являются ли шаги выше хорошим способом? Если я что-то пропустил или усложнил, пожалуйста, дайте мне знать.
- Нужно ли как-нибудь пометить
/dev/vg0/boot
для того, чтобыgptmbr.bin
мог найти раздел при загрузке? - Могу ли я избавиться от загрузочного раздела LVM и заменить
/mnt/LVM/boot
на/mnt/LVM/root
где я упомянул это?