我正在使用自动安装的存储部分进行简单的自定义 /dev/sda 磁盘布局:sda1 (512MB) /boot、sda2 (2GB) swap、sda3 (-1) /。我无法正确定义交换。科廷文档声称它是:
- 定义分区,
- 定义格式为 fstype: swap,
- 定义安装没有带有一些选项的路径:(选项: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://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
部分没有要求。我猜他们依赖于科廷用于验证