Filesystems

如何為 Amazon Linux 創建可引導的 EBS 卷

  • February 17, 2017

背景

我的目標是使用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 引導核心。

引用自:https://unix.stackexchange.com/questions/344797