Linux系统中指定的EBS卷名与实际设备名之间的链接

时间:2016-10-17 19:00:15

标签: amazon-web-services amazon-ec2 amazon-ebs

我有附加了EBS卷的EC2实例,因此describe-instances命令打印:

     "DeviceName": "/dev/sdf",
     "Ebs": {   "Status": "attached",
                "DeleteOnTermination": false,
                "VolumeId": "vol-04bfa2fab8e57a3dc",
                "AttachTime": "2016-09-26T09:39:08.000Z"   }

根据文件:

  

根据内核的块设备驱动程序,设备可能附加的名称与您指定的名称不同

在我的案例中,此卷的实际名称为/dev/xvdf

是否可以从实例中知道在亚马逊控制台中为卷指定了哪个名称?

反之亦然 - 知道linux将为实例外的卷使用哪个实际名称?

6 个答案:

答案 0 :(得分:5)

这使我对基于Nitro的实例不满意,其中实例上的设备名称可能未按AWS控制台中所示的顺序排序。幸运的是,根据AWS documentation,实例上设备的序列号已设置为EBS卷ID。因此,只需运行

lsblk -o +SERIAL

,它将为您提供控制台中显示的卷ID。

答案 1 :(得分:4)

正在回复here

  

您使用的是Xen VPS(或虚拟机); xvd *只是Xen磁盘存储设备(Xen Virtual block Device)。当您使用更高效的半虚拟化Xen磁盘驱动程序而不是直接的SCSI磁盘模拟时,它们会显示而不是sda等。如果列出Xen HVM上已安装的模块(驱动程序),则此驱动程序将显示为blkfront(如果您运行的是非常旧的Xen版本,则显示为xen_blk - 非常罕见)。

     

简而言之,完全按照常规PC上的sda1处理xvda1

AWS docs

中也提到过
  

根据内核的块设备驱动程序,可能使用与指定名称不同的名称附加设备。例如,如果指定设备名称为/ dev / sdh,则内核可能会将设备重命名为/ dev / xvdh或/ dev / hdh;在大多数情况下,尾随的字母保持不变。在某些版本的Red Hat Enterprise Linux(及其变体,如CentOS)中,甚至尾随的字母也可能会发生变化(/ dev / sda可能会变成/ dev / xvde)。在这些情况下,每个设备名称尾随字母增加相同的次数。例如,/ dev / sdb将成为/ dev / xvdf,/ dev / sdc将成为/ dev / xvdg。 Amazon Linux AMI使用您在启动时指定的名称创建符号链接,该名称指向重命名的设备路径,但其他AMI可能表现不同。

答案 2 :(得分:2)

从AWS控制台您将永远无法知道,因为此映射由操作系统完成。 在Amazon AMI中,它可能具有不同的设备,但始终存在从您请求的原始设备到系统上的实际设备的链接,因此您始终可以将DeviceName用作实际设备。 在RedHat中它是不同的,但订单将保持合理。

答案 3 :(得分:1)

作为defined in the aws documentation并由@YairCarel暗示,设备驱动程序映射是特定于操作系统的。

但对于一个特定的分布,它将始终是相同的。因此,如果您知道正在处理的Linux发行版,则可以将其计算回来。

例如 Amazon Linux 将在AWS控制台上保留该名称(或者至少为其创建一个符号链接)。 Ubuntu 将使用不同的前缀/dev/xvd?而不是/dev/sd?。 并且 Redhat 系列通常会使用固定偏移量增加尾随字母,因此/dev/xvdf会映射到/dev/sdb

答案 4 :(得分:1)

使用Amazon提供的命令来做到这一点:

$ sudo /sbin/ebsnvme-id /dev/nvme1n1
Volume ID: vol-031dbe1a58ac242cc
/dev/sdg

好像Windows也有它。

更多详细信息:https://medium.com/@ripon.banik/how-to-find-ebs-volume-id-for-nvme-volume-1148d7499dc

答案 5 :(得分:0)

这是我的bash脚本,用于在Ubuntu-18.04上为EBS卷创建正确的符号链接。它可以在启动时在UserData内部运行,因此已经以多行格式显示。

echo "--- Create symlinks ---"
disks=$(lsblk | grep "^nvme" | cut -d" " -f1)
for disk in $disks; \
do name=$(nvme id-ctrl --output binary /dev/$disk | cut -c3073-3104 | tr -d '\0'); \
    if [ -z "$name" ]; then name="xvdz"; fi; \
    ln -s /dev/$disk /dev/$name; \
done

echo "--- Mount SSD disk ---"
echo "/dev/sdz1 /opt/ephemeral ext4 errors=remount-ro 1 2" >> /etc/fstab
mkfs.ext4 /dev/xvdz

echo "--- Mount EBS disk created as xvdf ---"
echo "/dev/xvdf /opt/persist ext4 errors=remount-ro 1 2" >> /etc/fstab
mkfs.ext4 /dev/xvdf

mount -a

您必须安装nvme-cli工具才能正常工作。请注意SSD类型实例的特殊情况。 nvme内存中没有别名,因此我们将其手动定义为xvdz。

对于所有其他EBS卷,可以使用在AWS控制台/ CloudFormation / Terraform中定义的别名,例如 xvdf

Reference