在过去的几个月里,我的团队决定在我们的环境中更多地利用 Linux,并且我承担了大部分 Linux 管理流程。对于我们的所有资源,我们利用标签来帮助识别资源并将其分组。
对于我们的 Windows 计算机,我们使用 PowerShell 来获取磁盘的潜水符和标签,并相应地标记我们的卷。当我们需要更多磁盘空间时,当我们获得在服务器上扩展驱动器的票据时,这很有帮助。我们获取服务器名称、磁盘盘符和要添加的空间。但是,在控制台中查看时,我们可以看到附加的卷,但 AWS 控制台不会反映/dev/sda1
或xvdb
中显示的设备名称是 C: 驱动器还是 D: 或其他。
同样的问题也适用于 Linux 服务器。幸运的是,在这两种情况下,卷 ID 都会成为操作系统中磁盘的序列号。因此,我们可以使用它来匹配附加实例的卷 ID,并按照我们认为合适的方式向其添加标签。
寻找坐骑
在我们的环境中,我们将磁盘安装在相同的位置,但如果配置错误,我们将使用安装路径来获取设备 ID,然后对其进行标记。
使用findmnt
可以为我们提供挂载路径正在使用的源磁盘。我想查找/mnt/mdf/
并找到属于哪个磁盘。
$ findmnt -noheadings --output SOURCE --target /mnt/mdf /dev/nvme1n1
获取卷 ID
对我们来说幸运的是,当磁盘连接到计算机时,AWS 使用卷 ID 作为磁盘上的序列号。我们可以做一些跑腿工作并以我们需要的格式获得它。为此,我使用了命令nvme
并且可以通过apt install nvme-cli
进行安装。
$ sudo nvme id-ctrl -v /dev/nvme1n1 | grep "sn" sn : vol03f4v1o75f8lkbbqs
现在我们只需要后半部分,并在vol
和其余字符之间添加破折号。我们将使用cut
选择:
右侧的内容,然后使用tr
将vol
替换为vol-
。
$ sudo nvme id-ctrl -v /dev/nvme1n1 | grep "sn" | cut -d ":" -f2 | tr " vol" "vol-" vol-03f4v1o75f8lkbbqs
标记资源
标记 EBS 卷就像标记 EC2 实例一样。在本例中,我想按照操作系统查看卷的方式来标记 AWS 中的卷。
aws ec2 create-tags --resources vol-03f4v1o75f8lkbbqs ` --tags Key = os-drive-letter,Value = /dev/nvme1n1 Key = os-volume-name,Value = sqldata
这将创建标签:
os-drive-letter = /dev/nvme1n1 os-volume-name = sqldata
现在,当有人要求扩展 SQL 数据驱动器的卷时,如果连接了多个磁盘,我们就知道它到底是哪一个。
函数式编程
现在我们知道如何标记我们的卷,我们可以制作一个脚本和函数,使制作变得快速而简单。函数式脚本的伟大之处在于能够多次使用同一代码块并获得相同的期望结果。由于我们确实附加了多个卷并将它们安装在同一个位置,因此我们可以使用上面的逻辑来创建一个函数。
# Usage: # tag_volume "/mount/path" "label-to-use" tag_volume ( ) { [ -z " $1 " ] && echo "No mount path argument supplied" [ -z " $2 " ] && echo "No mount label supplied argument supplied" MOUNTPATH = $1 MOUNTLABEL = $2 echo "looking for $MOUNTPATH to label it as $MOUNTLABEL " MOUNT = " $( findmnt -noheadings --output SOURCE --target $MOUNTPATH ) " echo $MOUNT if [ [ $MOUNT ] ] ; then echo "Fount the mount path ' $MOUNTPATH ' as ' $MOUNT '" else echo "Could not find the mount path $MOUNTPATH " fi VOLID = " $( sudo nvme id-ctrl -v $MOUNT | grep "sn" | cut -d ":" -f2 | tr " vol" "vol-" ) " aws ec2 create-tags --resources $VOLID --tags Key = os-drive-letter,Value = $MOUNT Key = os-volume-name,Value = $MOUNTLABEL echo "On disk $MOUNT created $MOUNTLABEL tag for $VOLID " } tag_volume "/mnt/mdf" "sqldata" tag_volume "/mnt/ldf" "sqllogs" tag_volume "/mnt/tempdb" "tempdb" tag_volume "/" "root"
结论
我能够结合几个不同的流程来获取所需的信息,然后相应地标记附加的 EBS 卷。 tag_volume
脚本块是可重复的,可以轻松指定一些变量并让它完成工作;保持我的整体脚本和流程更短。
通过电子邮件回复
原文: https://claytonerrington.com/blog/tagging-aws-ebs-volumes/?utm_source=rss