如何創建正確附加了多個基於硝基的捲的 EC2 AMI 映像
我正在使用 EC2 映像生成器來自動化為 mongoDB 伺服器創建 AMI 映像的過程。
此圖像有兩卷:
/data
- 100 GB/logs
- 10 GB為了實現這個設置,我創建了一個附加了 3 個卷的圖像建構器配方(一個用於 root
/
)。然後,映像生成器組件格式化並安裝卷。以下是執行此操作的步驟片段:
- name: FormatAndMountDataVolume action: ExecuteBash inputs: commands: - sudo mkdir /data - sudo mkfs -t xfs /dev/nvme1n1 - echo "/dev/nvme1n1 /data xfs defaults,nofail 0 2" | sudo tee -a /etc/fstab - sudo mount -a - sudo chown -R mongodb:mongodb /data - name: FormatAndMountLogsVolume action: ExecuteBash inputs: commands: - sudo mkdir /logs - sudo mkfs -t xfs /dev/nvme2n1 - echo "/dev/nvme2n1 /logs xfs defaults,nofail 0 2" | sudo tee -a /etc/fstab - sudo mount -a - sudo chown -R mongodb:mongodb /logs
它工作正常並創建了圖像。問題是這些實例使用 Nitro-System,它們的文件說明如下:
設備名稱為 /dev/nvme0n1、/dev/nvme1n1 等。您在塊設備映射中指定的設備名稱使用 NVMe 設備名稱(/dev/nvme
$$ 0-26 $$n1)。塊設備驅動程序可以按照與您為塊設備映射中的捲指定的順序不同的順序分配 NVMe 設備名稱。
因此,上述 AMI 存在潛在問題。它將目錄掛載到
/data
設備/dev/nvme1n1
和/logs
on 上/dev/nvme2n1
,但亞馬遜不保證設備將使用此順序命名。該實例可能最終擁有一個/logs
容量為 100GB 的文件夾,而/data
只有 10GB。關於在為此 AMI 執行 EC2 實例時如何確保將捲安裝在正確文件夾上的任何想法?
在您的腳本上,您有一個步驟可以創建文件系統,
mkfs
另一個步驟可以將其添加到fstab
文件中。在添加之前
fstab
獲取UUID
剛剛格式化的來自設備。使用它
UUID
來添加安裝指令fstab
,而不是設備路徑。這就是您可以更改程式碼的方式。
commands: - sudo mkdir /data - sudo mkfs -t xfs /dev/nvme1n1 - echo "$(blkid /dev/nvme1n1 | awk '{print $2}') /data xfs defaults,nofail 0 2" | sudo tee -a /etc/fstab
請參閱有關 UUID 使用的其他答案:
更新
您關於 AMI 的概念以及卷與其相關的時間是不正確的。
卷會在您生成 AMI 時準確附加,無論您使用哪種機制來生成它。
當您使用映像生成器生成 AMI 時,它將在其上附加卷並執行您添加的命令以格式化您的設備(請參閱註釋)。正是在您創建 AMI 的那一刻。不是在創建實例時。
所以,文件系統已經存在
UUID
,fstab
已經配置好了。您稍後從此 AMI 創建的每個實例都將與此 AMI 完全相同。
請參閱此範例,我創建一個實例,使用 格式化設備
xfs
,通過 安裝它fstab
,停止它並生成一個 AMI。然後我從這個 AMI 啟動了一個新實例,看到所有設備
UUID
都是相同的,即使是來自根卷的設備。在生成 AMI 之前,實例名稱
ip-172-31-12-219
:[root@ip-172-31-12-219 ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT nvme1n1 └─nvme1n1p1 xfs e24884d7-26a2-457d-bf51-875907986bf0 /mnt/disk10 nvme0n1 ├─nvme0n1p1 xfs / 7b355c6b-f82b-4810-94b9-4f3af651f629 / └─nvme0n1p128
上面 AMI 的另一個實例,實例名稱
ip-172-31-8-239
:[root@ip-172-31-8-239 ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT nvme1n1 └─nvme1n1p1 xfs e24884d7-26a2-457d-bf51-875907986bf0 /mnt/disk10 nvme0n1 ├─nvme0n1p1 xfs / 7b355c6b-f82b-4810-94b9-4f3af651f629 / └─nvme0n1p128
當您從控制台生成 AMI 時,您可以看到此消息。
在映像創建過程中,Amazon EC2 會為上述每個卷創建一個快照。
這意味著當您從此 AMI 創建實例時,所有捲都是從這些快照“還原”的。每個位和字節都是相同的。
我希望我在這裡澄清了你的疑問。
筆記
完全脫離主題,您正在磁碟上而不是分區上創建文件系統。沒關係,支持。但不建議這樣做。
您可以搜尋有關每個選項的更多資訊。一個優點是分區對齊,這對 SSD 非常有幫助。