Instalação Alpina LVM com suporte a inicialização dupla UEFI / BIOS

0

Eu quero mudar de Arch + Windows [GPT, inicialização dupla usando o menu EFI incorporado] para Alpine + Windows [GPT, suporte de inicialização de BIOS legado, XEN, partições de LVM para Alpine como Dom0 e Windows virtualizado como Dom1] . Digamos que seja a minha ideia de "pesquisa". Como fazer uma instância do windows no XEN e como instalá-lo está fora do escopo. Eu farei isso sozinho. Preocupo-me mais com o processo de inicialização: flags / options configurados de forma adequada, recursos / módulos incluídos no initramfs, etc. A instalação será feita em HDD externo. Há duas razões para isso: (1) ter certeza de que tudo funciona bem antes de passar para o built-in one e (2) para tornar a solução portátil / Live. Por favor, não há GRUB . Quer fazer isso usando apenas SYSLINUX.

Então, é assim que "imagino" que o layout do disco deve ser:

[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)
   ...

Esta é minha lista de suposições:

  • [1] preciso copiar /usr/share/syslinux/efi64/syslinux.efi as /mnt/EFI/EFI/Boot/bootx64.efi e crie %código%. Conteúdo do Este último deve coincidir com /mnt/EFI/loader/entries/alpine.conf . Para referência Eu uso: link
  • [2] Eu sei que não é uma boa ideia fazer / iniciar parte do LVM estrutura, mas para fins de pesquisa - quer que seja um volume lógico de qualquer maneira (ou não crie nada). Eu ouvi no fórum do Arch Linux que O SYSLINUX suporta isso. No entanto, não encontrou nenhuma "testemunha" no rede.
  • [3] Se eu inicializar a partir do sistema legado da BIOS, syslinux.cfg deve, de alguma forma, encontrar e pular para %código%. Então carregar gptmbr.bin e determinar como o kernel XEN deve ser começado.
  • [*] Se eu inicializar do sistema UEFI, /mnt/LVM/boot/syslinux/ldsyslinux.c32 Começa e opções tiradas de syslinux.cfg (certamente, o conteúdo deve coincidir com syslinux.efi ).

Há alguma incerteza sobre as coisas que eu não encontrei muita informação na web:

  • Diferença entre loader/entries/alpine.conf e syslinux.cfg do Syslinux. Existe alguma informação no wiki do Arch que diz que sys é loader e carrega o resto de si mesmo do c32. Nada mais ..
  • Diferença entre os registros de inicialização ldlinux.sys e ldlinux.c32 do Syslinux. Parece que o segundo é o que eu preciso.

Esta é a minha lista "TODO" (coisas como mkdir & ampount foram omitidas). Observe que as etapas marcadas com (?) Precisam de esclarecimentos adicionais:

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 -

Perguntas:

  1. Os passos acima são bons? Se eu perdi alguma coisa ou compliquei, por favor me avise.
  2. Preciso marcar mbr.bin de alguma forma na ordem em que gptmbr.bin conseguiu encontrar a partição ao inicializar?
  3. Posso me livrar da partição de inicialização do LVM e substituir /dev/vg0/boot por gptmbr.bin onde mencionei isso?
por Timur Fayzrakhmanov 25.03.2018 / 17:17

0 respostas