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