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



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

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

根据文档:

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

在我的例子中,这个卷的实际名称是/dev/xvdf

是否有可能从实例中知道为Amazon控制台中的卷指定了哪个名称?

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

这让我对基于硝基的实例感到抓狂,其中实例上的设备名称可能与AWS控制台中显示的顺序不同。幸运的是,根据AWS文档,实例上设备的序列号被设置为EBS卷ID。所以只要运行

lsblk -o +SERIAL

,它会给你显示在控制台的卷ID

这里正在响应

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

简而言之,将xvda1与在普通PC上的sda1完全相同

也在AWS文档

中提到

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

根据aws文档中的定义和@YairCarel的提示,设备驱动程序映射是特定于操作系统的。

但是对于一个特定的分布,它总是相同的。因此,如果你知道你正在使用的linux发行版,你可以计算出来。

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

使用amazon提供的命令来完成:

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

看起来Windows也有。

详细信息:https://medium.com/@ripon.banik/howto -find-ebs- volumeid -for-nvme- volume1148d7499dc

从AWS控制台您将永远无法知道,因为这个映射是由操作系统完成的。在Amazon AMI中,它可能有不同的设备,但总是有从您请求的原始设备到系统上实际设备的链接,因此您总是可以使用DeviceName作为实际设备。在RedHat中,这是不同的,但这是合乎逻辑的,顺序将被维持。

这是我的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 ''); 
    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在本例中为

参考

最新更新