curtin/autoinstall 存储部分在配置中的交换安装上失败

curtin/autoinstall 存储部分在配置中的交换安装上失败

我正在使用自动安装的存储部分进行简单的自定义 /dev/sda 磁盘布局:sda1 (512MB) /boot、sda2 (2GB) swap、sda3 (-1) /。我无法正确定义交换。科廷文档声称它是:

  1. 定义分区,
  2. 定义格式为 fstype: swap,
  3. 定义安装没有带有一些选项的路径:(选项:pri=1,discard=pages)。

我的简单配置:

  storage:
    version: 1
#    swap:
#      filename: /dev/sda2
#      size: 2GB
#      maxsize: 2GB
    config:
      - type: disk
        id: sda
        path: /dev/sda
        ptable: msdos
        name: system-disk
        wipe: superblock
        grub_device: true
      - type: partition
        id: sda-sda1
        number: 1
        size: 512MB
        device: sda
        name: boot-partition
        flag: boot
      - type: partition
        id: sda-sda2
        number: 2
        size: 2GB
        device: sda
        name: swap-partition
        flag: swap
      - type: partition
        id: sda-sda3
        number: 3
        size: -1
        device: sda
        name: root-partition
      - type: format
        id: sda-sda1-fs
        fstype: ext4
        label: boot
        volume: sda-sda1
      - type: format
        id: sda-sda2-fs
        fstype: swap
        label: swap
        volume: sda-sda2
      - type: format
        id: sda-sda3-fs
        fstype: ext4
        label: root
        volume: sda-sda3
      - type: mount
        id: sda-sda1-fs-mount1
        path: /boot
        device: sda-sda1-fs
      - type: mount
        id: sda-sda2-fs-mount1
        options: pri=2,discard=pages
        device: sda-sda2-fs
      - type: mount
        id: sda-sda3-fs-mount1
        path: /
        device: sda-sda3-fs

安装时我得到的是:“ TypeError: __init__() missing 1 required positional argument: 'path'”。如果我删除 id 为 sda-​​sda2-fs-mount1 的条目(用于交换的条目)并取消注释指向 /dev/sda2 的交换部分。我得到了可用的交换。如何仅使用配置部分来定义交换。在我看来,混合使用几种解决方案并不是一个优雅的解决方案。

答案1

我会尝试添加参数path: none,看看是否有效。查看源代码科廷,这似乎是在没有路径值且文件系统为“交换”时所做的

https://github.com/canonical/curtin/blob/b4f5078663d9cbfd31a7d23b77c458e6a7447226/curtin/commands/block_meta.py#L1107

我没有像这样设置交换,但你的链接指向某个人四年前的要点片段。科廷文档位于 https://curtin.readthedocs.io/en/latest/topics/storage.html?#mount-command

引自 mount 部分

必须指定目标挂载点的路径以及目标文件系统

如果指定的设备被格式化为交换空间,那么将会在目标系统的 /etc/fstab 中添加一个条目以使用该交换空间。

我发现科廷docs 之前是错误的,所以我找到了这个文件,它似乎定义了架构要求。我不确定如何解析它,但在我看来,这path不是必需的,因为你有一个device参数

https://github.com/canonical/curtin/blob/master/curtin/block/schemas.py

还有可能下位性是产生错误的原因。 下位性进行自己的 yaml 验证。它使用此架构,但看起来该storage部分没有要求。我猜他们依赖于科廷用于验证

https://ubuntu.com/server/docs/install/autoinstall-schema

相关内容