美文网首页
ansible获取集群上的未分区的磁盘

ansible获取集群上的未分区的磁盘

作者: 迷茫_小青年 | 来源:发表于2019-05-23 18:13 被阅读0次

背景:
当一个服务有多块磁盘的时候,我们需要对系统上磁盘进行分区,可是格式化。如果磁盘多,服务器多操作起来非常麻烦 。

下面这个列子就是获取机器上所有sd*的磁盘并进行分区。
(注意:这里有一个bug是,如果机器上有没有分区,直接格式化磁盘一定不要用了。解释下:“正常的一块磁盘比如/dev/sdd。要先分区,删除一个额外的块设备/de/sdd1。然后对这个sdd1进行mkfs。有的人偷懒。直接对/dev/sdd进行mkfs。然后挂载就会变成/dev/sdd 没有分区编号” 再执行这个task就会对这个磁盘重新进行分区。后果就是原来的磁盘的数据都丢了 )

---

- hosts: hadoop

  tasks:
    - name: 获取磁盘分区
      parted:
        device: "/dev/{{ item.key }}"
        number: 1
        state: present
      when: item.key | regex_search('sd[b-w]$')
      with_dict: "{{ ansible_device_links.ids }}"

逐步分析:
with_dict: "{{ ansible_device_links.ids }}"
这步就是通过fact获取机器上的磁盘信息。
元数据大概是这样的

"ansible_device_links": {
            "ids": {
                "sda": [
                    "usb-Generic-_SD_MMC_CRW_29203008282014000-0:0"
                ],
                "sdb": [
                    "scsi-35000c500b81bcbfb",
                    "wwn-0x5000c500b81bcbfb"
                ],
                "sdx1": [
                    "scsi-3600508b1001c4453a2619115558dfd36-part1",
                    "wwn-0x600508b1001c4453a2619115558dfd36-part1"
                ],
                "sdx2": [
                    "scsi-3600508b1001c4453a2619115558dfd36-part2",
                    "wwn-0x600508b1001c4453a2619115558dfd36-part2"
                ],
                "sdx3": [
                    "scsi-3600508b1001c4453a2619115558dfd36-part3",
                    "wwn-0x600508b1001c4453a2619115558dfd36-part3"
                ]
            },
            "labels": {},
            "masters": {},
            "uuids": {
                "sdb1": [
                    "1067e310-5304-4cf0-92ec-9b20179f4c79"
                ],
                "sdc1": [
                    "02ae9984-e69f-4349-88fd-8372a6eee0d4"
                ],
                "sdd1": [
                    "bc73f7e5-6ceb-42e3-ba7c-6553ac6cd5e8"
                ],
                "sde1": [
                    "5912aa5e-0d77-4a35-a1a5-eb9af2d3877b"
                ],
                "sdx1": [
                    "6546-7FE7"
                ],
                "sdx2": [
                    "17fabefd-0b1f-4f05-bbb4-a6f20edf5c2c"
                ],
                "sdx3": [
                    "e83ac11d-d662-4bf1-84c3-a93fb229bb2c"
                ]
            }
         }

通过ansible_device_links.ids 这个变量能直接获取到磁盘相关的字典表。然后实用with_dict 直接循环ansible_device_links.ids 字典变量。得到类似这样的数据格式

(item={'value': [u'scsi-35000c500b81bfb43', u'wwn-0x5000c500b81bfb43'], 'key': u'sdk'})
(item={'value': [u'scsi-3600508b1001c93a12a34f685a294bfe3-part3', u'wwn-0x600508b1001c93a12a34f685a294bfe3-part3'], 'key': u'sdx3'})

我们只要获取key即可得到想要的磁盘编号信息。

但是key会有已经分区过的磁盘编号,比如第二条sdx3 类似这种。

when: item.key | regex_search('sd[b-w]$')

对item.key 进行过滤。后面的表达式为真的继续执行。
表达式的意思sd两个字母后面是b到w结尾。
因为我已经已知sda 和sdx 不是我想要的磁盘。

相关文章

  • ansible获取集群上的未分区的磁盘

    背景:当一个服务有多块磁盘的时候,我们需要对系统上磁盘进行分区,可是格式化。如果磁盘多,服务器多操作起来非常麻烦 ...

  • CentOS7-扩容挂载磁盘

    1.1查看新磁盘,可以看到/dev/sdb是新的未挂载的磁盘; 输入n进行分区 选择分区类型(p主分区) 选择分区...

  • 磁盘分区丢失

    磁盘分区丢失,最大的嫌疑是分区表被破坏,因此可以按照下面方法排查磁盘分区信息: 1、获取分区表: dd if=/d...

  • 磁盘分区

    磁盘分区工作原理 磁盘是按柱面来分区的。磁盘分区:磁盘分区登记的地点叫做磁盘分区表磁盘分区表用来存放分区结果信息的...

  • go语言检查磁盘分区使用情况

    go语言检查磁盘分区使用情况 利用系统调用syscall.Statfs获取磁盘分区使用情况 函数Partition...

  • 磁盘分区

    磁盘分区:linux磁盘分区主要分为三种:主磁盘分区、扩展磁盘分区、逻辑分区主分区:至少一个、最多4个,且主分区+...

  • df 命令查看磁盘空间

    df命令 df命令用于显示磁盘分区上的可使用的磁盘空间。 默认显示单位为KB。 可用该命令来获取硬盘被占用了多少空...

  • shirou/gopsutil/disk

    shirou/gopsutil/disk子包用于获取磁盘信息,包括IO统计、分区、使用率等。 分区信息 disk....

  • 磁盘分区及格式化

    一、磁盘分区基础 我们都了解Linux系统上的磁盘分区有两种类型,即MBR和GPT两种分区结构; MBR分区的主引...

  • 无镜--kafka之控制器(二)

    分区状态机和副本状态机 分区状态机和副本状态机需要获取集群中的所有分区和所有副本,控制器上下文会从ZK中读取集群的...

网友评论

      本文标题:ansible获取集群上的未分区的磁盘

      本文链接:https://www.haomeiwen.com/subject/mtibzqtx.html