【问题标题】:ansible: Error creating 16 partitions using parted moduleansible:使用 parted 模块创建 16 个分区时出错
【发布时间】:2019-08-09 16:27:41
【问题描述】:

我正在尝试使用 ansible 从 4TB 块设备创建 16 个分区。我正在使用分开的模块:https://docs.ansible.com/ansible/latest/modules/parted_module.html#examples

根据 dmesg,我验证了设备已连接并且内核可以看到它:

[root@ZUSE1DLMSORDB1 YoCp19h2cn]# dmesg | grep sdd
[    5.837562] sd 5:0:0:11: [sdd] 8589934592 512-byte logical blocks: (4.39 TB/4.00 TiB)
[    5.837564] sd 5:0:0:11: [sdd] 4096-byte physical blocks
[    5.858252] sd 5:0:0:11: [sdd] Write Protect is off
[    5.858254] sd 5:0:0:11: [sdd] Mode Sense: 0f 00 10 00
[    5.858449] sd 5:0:0:11: [sdd] Write cache: disabled, read cache: enabled, supports DPO and FUA
[    5.911159]  sdd: sdd1
[    5.930018] sd 5:0:0:11: [sdd] Attached SCSI disk

根据我的阅读,如果我需要创建很多分区,我需要使用 GPT 分区表创建一个扩展分区(?)。 GPT 分区表的原因是扩展分区会大于 2TiB。创建扩展分区后,我可以创建 16 个逻辑分区。 (我认为我的假设是正确的。)

这是我创建的剧本,但不幸的是我在运行它时遇到了错误。

---
- name: Create a new extended (to hold all the logical partitions) partition
  parted:
    device: /dev/sdd
    number: 1
    part_type: extended
    label: gpt
    name: UberPartition
    state: present

- name: Create 16 (= 4096 / 256) logical partitions
  parted:
    device: /dev/sdd1
    number: "{{ item }}"
    part_type: logical
    part_end: 16%
    unit: GB
    state: present
  with_sequence: count=16

当我运行它时,我收到以下错误(我正在通过 AWX 运行 playbook):

{
    "_ansible_parsed": true,
    "changed": false,
    "_ansible_item_label": "2",
    "err": "/sbin/parted: invalid token: logical\nError: Expecting a partition type.\n",
    "_ansible_no_log": false,
    "_ansible_item_result": true,
    "invocation": {
        "module_args": {
            "part_start": "0%",
            "part_end": "16%",
            "name": "disk_2",
            "align": "optimal",
            "number": 2,
            "label": "msdos",
            "state": "present",
            "part_type": "logical",
            "flags": null,
            "device": "/dev/sdd",
            "unit": "GB"
        }
    },
    "item": "2",
    "rc": 1,
    "msg": "Error while running parted script: /sbin/parted -s -m -a optimal /dev/sdd -- unit GB mkpart logical 0% 16%",
    "_ansible_ignore_errors": null,
    "out": ""
}

我不知道出了什么问题。我尝试了无数不同的东西,但似乎没有任何效果。任何帮助将不胜感激。

【问题讨论】:

  • 嗨,根据文档docs.ansible.com/ansible/latest/modules/parted_module.html,part_type 只能使用“'msdos' 或 'dvh' 分区表”来指定。
  • GPT 还支持多达 128 个分区。你为什么要做一些“超级分区”,然后是逻辑分区?
  • 这就是我缺乏磁盘分区知识导致我做蠢事的地方。所以说我可以创建 16 个 GPT 分区?
  • 如果磁盘是 GPT - 是的:)。
  • 你可能不得不为我把这件事弄得一团糟。什么是磁盘 GPT?这不是我用 parted/fdisk 做的吗?如果有,怎么做?

标签: ansible parted


【解决方案1】:

我使用百分比来做到这一点,有 16 个相等的分区,我使用了与 @Gerb 描述的相同的剧本。

`

    - name: Create 16 equal partition  
      parted:
        device: /dev/sdd
        number: "{{ (item | int | abs) + 1 }}"
        label: linx
        flags: [ lvm ]
        name: "disk{{ (item | int | abs) + 1 }}"
        part_start: "{{ (item | int | abs) * 6.25 }}%"
        part_end: "{{ (item | int | abs) * 6.25 + 6.25 }}%"
        unit: "%"
        state: present
      with_sequence: start=0 count=16

`

请注意,100/16 = 6.25

【讨论】:

    【解决方案2】:

    我能够使用这个剧本创建 16 个分区:

    ---
    - name: Create 16 (= 4096 / 256) partitions
      parted:
        device: /dev/sdd
        number: "{{ (item | int | abs) + 1 }}"
        label: gpt
        name: "disk_{{ (item | int | abs) + 1 }}"
        part_start: "{{ (item | int | abs) * 256 }}GB"
        part_end: "{{ (item | int | abs) * 256 + 256 }}GB"
        unit: GB
        state: present
      with_sequence: start=0 count=16
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-15
      • 2017-07-23
      • 2021-04-29
      • 1970-01-01
      • 2013-09-04
      • 2017-07-09
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多