如何为 Amazon Linux 创建可启动 EBS 卷

如何为 Amazon Linux 创建可启动 EBS 卷

背景

我的目标是使用包装机创建一个 Amazon 系统映像 (AMI),其中多个不同路径安装到不同的文件系统以提高安全性。例如,/tmp应该使用该选项安装到文件系统noexec

事实上,我想要创建一个自动化流程来制作 AMI,这意味着我无法在实例本身中执行重新安装命令,因此我改为使用 Packer亚马逊 chroot 构建器。这意味着我运行一个 EC2 实例,并从该 EC2 实例运行 Packer。然后,Packer 将安装从与“源 AMI”一起使用的 EBS 快照中获取的 EBS 卷。我现在需要对已安装的 EBS 卷执行一些操作。

我的灵感来自于最近关于这个主题的演讲谁的幻灯片位于http://wernerb.github.io/hashiconf-hardening

我的问题

当我的 EBS 卷(块设备)首次安装时,以下是我在其上看到的分区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

然后我执行以下操作:

  • 删除“Linux”分区sgdisk --delete 1 /dev/xvdf
  • 创建 LVM 卷组lvm vgcreate -y main /dev/xvdf1
  • 创建一系列 LVM 逻辑卷并使用如下命令格式化它们/sbin/mkfs.ext4 -m0 -O ^64bit "/dev/main/lvroot"
  • 将它们全部挂载并复制一堆文件
  • 附加的 EBS 卷更新/etc/fstab如下(这是/mnt/ebs-volume/etc/fstab从我的主机系统的角度来看):

/etc/fstab 我写入/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

最后,Packer 卸载/dev/xvdf并根据该 EBS 卷的内容创建 Amazon 系统映像 (AMI)。

到目前为止一切顺利,只是当我启动新的 AMI 时,它实际上并未启动。我无法通过 SSH 连接,并且通过 AWS“查看系统日志”没有显示任何内容。所以我假设我把包含“BIOS Boot Partition”的“128”分区弄乱了。我还对在新的 EC2 实例启动时如何“激活”我的 LVM 创建的逻辑卷感到困惑。

基本上,我缺少一个思维模型,无法了解启动分区中需要存在哪些内容,以及如果我使用 LVM 本身创建根卷,EC2 实例如何启动和运行 LVM?我想知道是否需要在 上创建一个特殊分区/boot,但是我应该在其中放入什么?事实上,我是否应该在我的 上拥有三个分区/dev/xvdf:“BIOS 引导分区”、一个“传统”(ext4 格式)分区/boot以及一个 LVM 管理的分区(用于其他所有分区)?

答案1

结果发现该问题与 LVM 无关。正如在为什么此更改会导致我的块设备无法启动?,真正的问题是,通过将//boot分成两个单独的分区,MBR 配置不再正确。我无法更新 GRUB 配置文件来解决此问题,因此最终我必须将/和保留/boot在同一分区上,并单独添加其他分区。不理想但有效。

答案2

启动 LVM 逻辑卷的关键是在内核中支持 LVM(当然),并且还要使用包含 LVM 支持的 initrd 进行启动。创建 initrd 并非易事,因此我建议您检查一下您的 Linux 发行版是否设置为从 LVM 引导。还要确保 EC2 使用 initrd 引导内核。

相关内容