如何要求 Curtin 使用 GPT 而不是带有 MAAS 的 MBR?

如何要求 Curtin 使用 GPT 而不是带有 MAAS 的 MBR?

我正在使用 MAAS 部署具有 3TB 第一个磁盘的 AMD64 节点,但我只得到 2TB 分区,因为 curtin 使用 MBR 而不是 GPT 进行分区。

答案1

Curtin 尝试为给定节点选择最合适的分区表类型:

  • 对于以 BIOS 模式启动的系统,它默认为MBR 存储的 DOS 分区表
  • 对于以 UEFI 模式启动的系统(包括基于 ARMv8 且支持 UEFI 的系统,如 Cavium Thunder 和 APM X-Gene),它默认为GPT分区表

因此,获取 GPT 分区表的最简单方法是将节点配置为以 UEFI 模式启动,该模式受支持从 MAAS 1.5 开始

另外还有两种方法可以让 curtin 创建 GPT 分区:

  • 您可以修改 MAAS 提供给 curtin 的 curtin 配置/etc/maas/preseeds/curtin_userdata以包括:

    block-meta:
        format: gpt
    
  • 如果您有最多 4 个分区,您可以在安装后轻松将 DOS 分区表转换为 GPT 分区。Curtin 努力在分区中留出足够的空间以允许转换成功进行,并且从r224 及以后确保. 转换可以通过以下方式完成:

    sgdisk --mbrtogpt <device>
    

答案2

我尝试了许多解决方法(包括 kiko 的解决方案中建议的方法),但都无济于事。

以下内容运行非常可靠,至少在 Xenial 上运行 MAAS 2.3.5 时:

  1. 像平常一样调试节点并对其磁盘进行分区(例如:使用 Web UI),但在部署节点之前停止。
  2. 运行以下命令行查询:(maas $USER block-devices read $nodeid例如$nodeid,可以从 Web UI 上的 URL 读取;它是节点的内部六个字母数字标识符)
  3. 抓住块设备id。你会看到那个partition_table_type顽固地说"MBR"
  4. 现在登录 MAAS 的 Postgres DB:sudo -u postgres psql -d maasdb
  5. 将分区方案更新为 GPT,update maasserver_partitiontable set table_type='GPT' where block_device_id=$block_dev_id(用您在步骤 3 中读到的 id 替换 `$block_dev_id)
  6. (可选)重复步骤 2 中的查询并检查是否partition_table_type已更新为GPT
  7. 部署节点并享受您的 GPT 分区表。

这不是特别好,因为直接在 MAAS 的数据库中进行黑客攻击感觉有点禁区,但在我们得到通过公共 API 做到这一点的方法之前,这是第二好的方法。我想到的 API 类型是这样的:maas $USER block-device update $node_id $block_device_id partition_table_type=GPT。此 API 已经存在并允许更新name块设备的据记载,但却忽略了更有用的partition_table_type属性。

注意:如果您需要在 GPT 目标磁盘上保留未分区的空间,请注意此过程似乎会触发一个“功能”,即该空间会被您在 MAAS 中布置的最后一个分区吸收。一种解决方法是创建一个一次性分区并在部署后将其删除。

相关内容