AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1062962
Accepted
Rodrigo
Rodrigo
Asked: 2021-05-09 06:50:26 +0800 CST2021-05-09 06:50:26 +0800 CST 2021-05-09 06:50:26 +0800 CST

如何创建正确附加了多个基于硝基的卷的 EC2 AMI 映像

  • 772

我正在使用 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和/logson 上/dev/nvme2n1,但亚马逊不保证设备将使用此顺序命名。该实例可能最终拥有一个/logs容量为 100GB 的文件夹,而/data只有 10GB。

关于在为此 AMI 运行 EC2 实例时如何确保将卷安装在正确文件夹上的任何想法?

amazon-ec2 amazon-web-services amazon-ebs
  • 2 2 个回答
  • 212 Views

2 个回答

  • Voted
  1. Best Answer
    Azize
    2021-05-10T07:49:01+08:002021-05-10T07:49:01+08:00

    在您的脚本上,您有一个步骤可以创建文件系统,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 使用的其他答案:

    https://stackoverflow.com/questions/64568780/aws-nvme-mounted-to-different-directory-after-reboot/67453438?noredirect=1#comment119235037_67453438


    更新

    您对 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 非常有帮助。

    • 1
  2. Dmitriy Kupch
    2022-07-27T08:57:35+08:002022-07-27T08:57:35+08:00

    我会改用标签。

    1. 它更具用户可读性
    2. 即使设备名称被更改,它也能正常工作。

    这是一个例子:

    - name: FormatAndMountDataVolume
      action: ExecuteBash
      inputs:
        commands:
          - sudo mkdir /data
          - sudo mkfs -t xfs -L DATA /dev/xvdb
          - echo "LABEL=DATA  /data xfs  defaults,nofail  0  2" | sudo tee -a /etc/fstab
          - sudo mount /data
    
    • 0

相关问题

  • 权限被拒绝(公钥)。从本地 Ubuntu 到 Amazon EC2 服务器的 SSH

  • 管理员如何管理他们的 EC2 EBS 和快照?

  • 云有多大?[关闭]

  • EC2 映像启动

  • 如何将安全组添加到正在运行的 EC2 实例?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve