如何為 Amazon Linux 創建可引導的 EBS 卷
背景
我的目標是使用Packer創建一個 Amazon 系統映像 (AMI),其中有幾個不同的路徑安裝到不同的文件系統以提高安全性。例如
/tmp
,應該使用該noexec
選項安裝到文件系統。我想創建一個用於製作 AMI 的自動化流程這一事實意味著我無法在實例本身中執行重新安裝命令,因此我改用 Packer amazon-chroot builder。這意味著我執行一個 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 引導分區”的“128”分區周圍搞砸了。當新的 EC2 實例啟動時,我還對我的 LVM 創建的邏輯卷應該如何“啟動”感到困惑。
基本上,如果我使用 LVM 創建根卷本身,我缺少關於該引導分區中需要存在什麼以及 EC2 實例如何引導和執行 LVM 的心智模型?我想知道我是否需要在 上創建一個特殊的分區
/boot
,但是我在裡面放了什麼?事實上,我是否應該在我/dev/xvdf
的 .BIOS 上擁有三個分區,一個“傳統”(ext4 格式)分區/boot
和一個 LVM 管理的分區用於其他所有分區?
事實證明,該問題與 LVM 無關。正如在為什麼此更改會使我的塊設備無法啟動?,真正的問題是,通過將
/
和/boot
分成兩個單獨的分區,MBR 配置不再正確。我無法更新 GRUB 配置文件來解決這個問題,所以最終我不得不將其保留在同一個分區上,/
並/boot
分別添加我的其他分區。不理想,但它有效。
啟動 LVM 邏輯卷的關鍵是在核心中支持 LVM(當然),並且還要使用包含 LVM 支持的 initrd 啟動。創建 initrd 並非易事,因此我建議您查看您的 Linux 發行版是否設置為從 LVM 引導。還要確保 EC2 正在使用 initrd 引導核心。