Como criar um volume inicializável do EBS para o Amazon Linux

2

Plano de fundo

Meu objetivo é usar o Packer para criar uma Amazon Machine Image (AMI) com vários caminhos diferentes montados em diferentes sistemas de arquivos para melhorar a segurança. Por exemplo. /tmp deve ser montado em um sistema de arquivos com a opção noexec .

O fato de eu querer criar um processo automatizado para fazer uma AMI significa que não posso executar comandos de re-montagem na própria instância, então estou usando o Packer construtor amazon-chroot . Isso significa que eu executo uma Instância do EC2 e executo o Packer dessa Instância do EC2. O empacotador montará então um volume de EBS tomado de um instantâneo de EBS usado com um "AMI de fonte". Agora preciso executar algumas operações no Volume EBS montado.

Estou me inspirando em uma apresentação recente sobre esse tema cujos slides estão em link .

Minha pergunta

Quando meu Volume do EBS (Block Device) é montado pela primeira vez, aqui estão as partições que eu vejo nele de gdisk -l /dev/xvdf :

Disk /dev/xvdf: 16777216 sectors, 8.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 726A877B-31D7-4C00-99E4-5A2CCB8E0EAD
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16777182
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            4096        16777182   8.0 GiB     8300  Linux
 128            2048            4095   1024.0 KiB  EF02  BIOS Boot Partition

Eu então executo as seguintes operações:

  • Exclua a partição "Linux" com sgdisk --delete 1 /dev/xvdf
  • Crie um grupo de volumes LVM com lvm vgcreate -y main /dev/xvdf1
  • Crie uma série de Volumes Lógicos do LVM e formate cada um deles com um comando como /sbin/mkfs.ext4 -m0 -O ^64bit "/dev/main/lvroot"
  • Monte todos e copie vários arquivos em
  • Atualize /etc/fstab no Volume do EBS anexado da seguinte forma (isso é /mnt/ebs-volume/etc/fstab da perspectiva do meu sistema host):

/ etc / fstab Eu escrevo para / dev / xvdf1:

#
/dev/mapper/main-lvroot         /               ext4    defaults,noatime    1   0
tmpfs                           /dev/shm        tmpfs   defaults            0   0
devpts                          /dev/pts        devpts  gid=5,mode=620      0   0
sysfs                           /sys            sysfs   defaults            0   0
proc                            /proc           proc    defaults            0   0
/dev/mapper/main-lvvar          /var            ext4    defaults            0   0
/dev/mapper/main-lvvarlog       /var/log        ext4    defaults            0   0
/dev/mapper/main-lvvarlog/audit /var/log/audit  ext4    defaults            0   0
/dev/mapper/main-lvhome         /home           ext4    defaults            0   0
/dev/mapper/main-lvtmp          /tmp            ext4    defaults            0   0

Por fim, o Packer desmonta /dev/xvdf e cria uma Amazon Machine Image (AMI) com base no conteúdo desse Volume do EBS.

Até aí tudo bem, exceto que quando eu vou lançar uma nova AMI, ela não inicializa. Não consigo me conectar via SSH e "Exibir registros do sistema" via AWS não mostra nada. Então, estou supondo que estou mexendo em algo em torno dessa partição "128" que contém a "Partição de inicialização do BIOS". Também estou confuso sobre como meus Volumes Lógicos criados pelo LVM devem se tornar "ativados" quando a nova Instância do EC2 for inicializada.

Basicamente, estou perdendo um modelo mental para o que precisa existir nessa partição de inicialização e como a instância do EC2 pode inicializar e executar o LVM se eu usei o LVM para criar o próprio volume raiz? Eu estou querendo saber se eu preciso criar uma partição especial em /boot , mas o que eu coloco nisso? Eu deveria ter três partições no meu /dev/xvdf , a "BIOS Boot Partition", uma partição "tradicional" (formato ext4) para /boot e uma partição gerenciada pelo LVM para todo o resto?

    
por Josh Padnick 14.02.2017 / 05:20

2 respostas

2

A questão acabou por não estar relacionada com o LVM. Como esclarecido em Por que essa alteração torna meu Dispositivo de Bloco não inicializável? ? , o problema real é que, separando / e /boot em duas partições separadas, a configuração do MBR não estava mais correta. Não consegui atualizar os arquivos de configuração do GRUB para corrigir isso, então, no final, tive que manter / e /boot na mesma partição e adicionar minhas outras partições separadamente. Não é ideal, mas funciona.

    
por 17.02.2017 / 04:17
1

A chave para inicializar um volume lógico do LVM é ter suporte a LVM no kernel (é claro) e também inicializar com um initrd que contenha suporte ao LVM. Criar um initrd não é trivial, então sugiro que você verifique se sua distribuição do Linux está configurada para inicializar a partir do LVM. E também certifique-se de que o EC2 está inicializando o kernel com o initrd.

    
por 14.02.2017 / 23:04