配置存储
Fedora CoreOS附带了一个简单的默认存储布局:根分区是最后一个分区,它会扩展到磁盘的完整大小。除引导分区外,所有数据都存储在根分区上。请参阅 磁盘布局部分 了解更多详细信息。
下面,我们提供了您可以定制的各种方式的示例。
*Fedora CoreOS要求根文件系统至少为8 GiB。*出于实际原因,某些平台的磁盘映像附带较小的根文件系统,该文件系统默认情况下会自动扩展以填满所有可用磁盘空间。如果在根文件系统之后添加其他分区,则必须确保显式调整根分区的大小,如下所示,使其至少为8 GiB。 目前,如果根文件系统小于8 GiB,则在登录时会发出警告。从2021年6月开始,如果根文件系统小于8GiB并且后面跟着另一个分区,则Fedora CoreOS将拒绝引导。有关更多详细信息,请参阅 这个错误 。 |
从Ignition引用块设备
下面的许多示例将引用块设备,例如 /dev/vda
。可用的数据块设备的名称取决于底层基础架构(裸机与云),通常还取决于特定的实例类型。例如,在AWS中,某些实例类型具有NVMe驱动器( /dev/nvme*
),其他人使用 /dev/xvda*
。
如果您的磁盘配置很简单,并且使用引导操作系统时所用的同一磁盘,则 /dev/disk/by-id/coreos-boot-disk
链接可用于方便地引用该设备。此链接仅在资源调配期间可用,目的是方便地引用启动操作系统时所用的同一磁盘。
在需要访问其他磁盘的情况下,最简单的做法是使用仅允许您访问SSH的Ignition配置启动一台计算机,并通过例如 lsblk
指挥部。
对于物理硬件,最佳做法是通过 /dev/disk/by-id/
或 /dev/disk/by-path
链接。
设置单独的/var装载
以下是要设置的Butane配置示例 /var
在同一主磁盘上的单独分区上:
variant: fcos
version: 1.4.0
storage:
disks:
- # The link to the block device the OS was booted from.
device: /dev/disk/by-id/coreos-boot-disk
# We do not want to wipe the partition table since this is the primary
# device.
wipe_table: false
partitions:
- number: 4
label: root
# Allocate at least 8 GiB to the rootfs. See NOTE above about this.
size_mib: 8192
resize: true
- size_mib: 0
# We assign a descriptive label to the partition. This is important
# for referring to it in a device-agnostic way in other parts of the
# configuration.
label: var
filesystems:
- path: /var
device: /dev/disk/by-partlabel/var
# We can select the filesystem we'd like.
format: ext4
# Ask Butane to generate a mount unit for us so that this filesystem
# gets mounted in the real root.
with_mount_unit: true
当然,您只能装载 /var
放到一个单独的分区中。例如,要装载 /var/lib/containers
:
variant: fcos
version: 1.4.0
storage:
disks:
- device: /dev/disk/by-id/coreos-boot-disk
wipe_table: false
partitions:
- number: 4
label: root
# Allocate at least 8 GiB to the rootfs. See NOTE above about this.
size_mib: 8192
resize: true
- size_mib: 0
label: containers
filesystems:
- path: /var/lib/containers
device: /dev/disk/by-partlabel/containers
format: xfs
with_mount_unit: true
或者,您也可以从单独的磁盘装载存储。例如,我们在这里挂载 /var/log
从上的分区 /dev/vdb
:
variant: fcos
version: 1.4.0
storage:
disks:
- device: /dev/vdb
wipe_table: false
partitions:
- size_mib: 0
start_mib: 0
label: log
filesystems:
- path: /var/log
device: /dev/disk/by-partlabel/log
format: xfs
with_mount_unit: true
在本例中,我们擦除磁盘并创建两个新分区。
variant: fcos
version: 1.4.0
storage:
disks:
-
# Mandatory. We use the World-Wide Number ID of the drive to ensure
# uniqueness.
device: /dev/disk/by-id/wwn-0x50014e2eb507fcdf
# This ensures that the partition table is re-created, along with all
# the partitions.
wipe_table: true
partitions:
# The first partition (slot number 1) is 32 GiB and starts at the
# beginning of the device. Its type_guid identifies it as a Linux
# swap partition.
- label: part1
number: 1
size_mib: 32768
start_mib: 0
type_guid: 0657fd6d-a4ab-43c4-84e5-0933c84b4f4f
# The second partition (implicit slot number 2) will be placed after
# partition 1 and will occupy the rest of the available space.
# Since type_guid is not specified, it will be a Linux native
# partition.
- label: part2
重新配置根文件系统
可以重新配置根文件系统本身。您可以使用路径 /dev/disk/by-label/root
来引用原始的根分区。您必须确保新文件系统的标签也是 root
。
您必须拥有至少4G的RAM,才能进行根目录重新配置。 |
下面是从XFS迁移到ext4,但重用主磁盘上的相同分区的示例:
variant: fcos
version: 1.4.0
storage:
filesystems:
- device: /dev/disk/by-partlabel/root
wipe_filesystem: true
format: ext4
label: root
与上一节类似,您还可以完全移动根文件系统。在这里,我们将根目录移到RAID0设备:
variant: fcos
version: 1.4.0
storage:
raid:
- name: myroot
level: raid0
devices:
- /dev/disk/by-id/virtio-disk1
- /dev/disk/by-id/virtio-disk2
filesystems:
- device: /dev/md/myroot
format: xfs
wipe_filesystem: true
label: root
你不需要 path 或 with_mount_unit 密钥;FCOS知道根分区是特殊的,会找出如何找到它并挂载它。
|
如果要跨多个驱动器复制引导盘以恢复驱动器故障,则需要镜像所有默认分区(根分区、引导分区、EFI系统分区和引导加载程序代码)。对于以下内容,有特殊的Butane配置语法:
variant: fcos
version: 1.4.0
boot_device:
mirror:
devices:
- /dev/sda
- /dev/sdb
定义文件系统
这个例子演示了创建文件系统的过程,方法是定义和标记分区,将它们组合到一个RAID阵列中,并将该阵列格式化为ext4。
variant: fcos
version: 1.4.0
storage:
disks:
# This defines two partitions, each on its own disk. The disks are
# identified by their WWN.
- device: /dev/disk/by-id/wwn-0x50014ee261e524e4
wipe_table: true
partitions:
-
# Each partition gets a human-readable label.
label: "raid.1.1"
# Each partition is placed at the beginning of the disk and is 64 GiB
# long.
number: 1
size_mib: 65536
start_mib: 0
- device: /dev/disk/by-id/wwn-0x50014ee0b8442cd3
wipe_table: true
partitions:
- label: "raid.1.2"
number: 1
size_mib: 65536
start_mib: 0
# We use the previously defined partitions as devices in a RAID1 md array.
raid:
- name: publicdata
level: raid1
devices:
- /dev/disk/by-partlabel/raid.1.1
- /dev/disk/by-partlabel/raid.1.2
# The resulting md array is used to create an EXT4 filesystem.
filesystems:
- path: /var/publicdata
device: /dev/md/publicdata
format: ext4
label: PUB
with_mount_unit: true
加密存储(Luk)
以下是在以下位置配置Luks设备的示例 /var/lib/data
。
variant: fcos
version: 1.4.0
storage:
luks:
- name: data
device: /dev/vdb
filesystems:
- path: /var/lib/data
device: /dev/mapper/data
format: xfs
label: DATA
with_mount_unit: true
根文件系统也可以移到Luks。在根文件系统的情况下,Luks设备必须由 带孔板 。有用于加密根文件系统的简化的Butane配置语法;例如:
variant: fcos
version: 1.4.0
boot_device:
luks:
tpm2: true
这相当于以下扩展配置:
variant: fcos
version: 1.4.0
storage:
luks:
- name: root
label: luks-root
device: /dev/disk/by-partlabel/root
clevis:
tpm2: true
wipe_volume: true
filesystems:
- device: /dev/mapper/root
format: xfs
wipe_filesystem: true
label: root
扩展配置不包括 path
或 with_mount_unit
密钥;FCOS知道根分区是特殊的,会找出如何找到它并挂载它。
调整根分区的大小
如果使用Ignition重新配置或移动根分区,则该分区不会在第一次引导时自动增长(请参阅中的相关讨论 这一期 )。在将根分区移动到新磁盘(或多个磁盘)的情况下,您应该使用 size_mib
菲尔德。如果适当地重新配置根文件系统(如上面的Luks示例所示),则可以使用 resize
字段:
variant: fcos
version: 1.4.0
storage:
disks:
- device: /dev/vda
partitions:
- label: root
number: 4
# 0 means to use all available space
size_mib: 0
resize: true
luks:
- name: root
device: /dev/disk/by-partlabel/root
clevis:
tpm2: true
wipe_volume: true
filesystems:
- device: /dev/mapper/root
format: xfs
wipe_filesystem: true
label: root
添加交换
此示例创建了一个跨越所有 sdb
设备,在其上创建一个交换区域,并创建一个系统交换单元,以便在引导时启用该交换区域。
variant: fcos
version: 1.4.0
storage:
disks:
- device: /dev/sdb
wipe_table: true
partitions:
- number: 1
label: swap
filesystems:
- device: /dev/disk/by-partlabel/swap
format: swap
wipe_filesystem: true
with_mount_unit: true
添加网络存储
可以将Fedora CoreOS系统配置为装载网络文件系统,如nFS和通用Internet文件系统。这是通过使用Ignition创建系统D单位来实现的最佳方法。通过创建标准挂载单元,可以在引导时挂载文件系统。或者,也可以在用户访问挂载点时通过创建额外的自动挂载单元来挂载文件系统。下面是每种类型的示例,分别适用于一个NFS文件系统。
配置NFS装载
创建一个系统d单元,以便在引导时挂载一个NFS文件系统。
这个 .mount 文件必须基于路径命名(例如 /var/mnt/data = var-mnt-data.mount )
|
variant: fcos
version: 1.3.0
systemd:
units:
- name: var-mnt-data.mount
enabled: true
contents: |
[Unit]
Description=Mount data directory
[Mount]
What=example.org:/data
Where=/var/mnt/data
Type=nfs4
[Install]
WantedBy=multi-user.target
variant: fcos
version: 1.3.0
systemd:
units:
- name: var-mnt-data.mount
contents: |
[Unit]
Description=Mount data directory
[Mount]
What=example.org:/data
Where=/var/mnt/data
Type=nfs4
[Install]
WantedBy=multi-user.target
- name: var-mnt-data.automount
enabled: true
contents: |
[Unit]
Description=Automount data directory
[Automount]
TimeoutIdleSec=20min
Where=/var/mnt/data
[Install]
WantedBy=multi-user.target
高级范例
此示例使用TPM2加密的根文件系统配置镜像引导盘,覆盖自动生成的根分区副本的大小,并添加加密的镜像 /var
占用剩余磁盘的分区。
variant: fcos
version: 1.4.0
boot_device:
luks:
tpm2: true
mirror:
devices:
- /dev/sda
- /dev/sdb
storage:
disks:
- device: /dev/sda
partitions:
# Override size of root partition on first disk, via the label
# generated for boot_device.mirror
- label: root-1
size_mib: 8192
# Add a new partition filling the remainder of the disk
- label: var-1
- device: /dev/sdb
partitions:
# Similarly for second disk
- label: root-2
size_mib: 8192
- label: var-2
raid:
- name: md-var
level: raid1
devices:
- /dev/disk/by-partlabel/var-1
- /dev/disk/by-partlabel/var-2
luks:
- name: var
device: /dev/md/md-var
# No key material is specified, so a random key will be generated
# and stored in the root filesystem
filesystems:
- device: /dev/mapper/var
path: /var
label: var
format: xfs
wipe_filesystem: true
with_mount_unit: true
磁盘布局
所有Fedora CoreOS系统都以相同的磁盘映像开始,根据引导加载所需的内容,不同的体系结构会略有不同。在第一次引导时,根文件系统被扩展以填充磁盘的其余部分。可以使用Butane配置来自定义磁盘映像,以重新分区磁盘并创建/重新格式化文件系统。裸机安装没有什么不同;安装程序只将原始映像复制到目标磁盘,并将指定的配置注入 /boot
用于第一次启动时使用。
看见 重新配置根文件系统 有关根分区的受支持更改的示例。 |
分区表
不鼓励使用分区号来引用特定分区,而应使用标签或UUID。Fedora CoreOS保留 boot
, boot-<number>
, root
, root-<number>
, BIOS-BOOT
, bios-<number>
, EFI-SYSTEM
,及 esp-<number>
标签,以及 md-boot
和 md-root
RAID设备名称。不支持使用这些标签创建分区、文件系统或RAID设备。
X86_64分区表
X86_64磁盘映像是使用保护性MBR格式化的GPT。它支持通过BIOS和UEFI启动(包括安全启动)。
分区表布局随着时间的推移而改变。当前布局为:
Number |
Label |
描述 |
分区类型 |
1 |
BIOS-BOOT |
包含BIOS GRUB镜像 |
原始数据 |
2 |
EFI-System |
包含EFI GRUB镜像和安全引导填充 |
FAT32 |
3 |
BOOT |
包含GRUB配置、内核/initramfs镜像 |
ext4 |
4 |
根 |
包含根文件系统 |
XFS |
在启动BIOS时,可以删除或重新格式化EFI系统分区。同样,在EFI引导时,可以删除或重新格式化BIOS引导分区。
已装载的文件系统
Fedora CoreOS使用OSTree,这是一个用于管理共享存储的多个可引导操作系统树的系统。这不同于Container Linux,后者使用双分区系统。在Fedora CoreOS中,每个操作系统版本都是 /
文件系统。所有部署共享相同 /var
它们可以位于同一文件系统上,也可以单独安装。
这显示了安装在上的Fedora CoreOS系统的默认装载点 /dev/vda
磁盘:
$ findmnt --real # Some details are elided
TARGET SOURCE FSTYPE OPTIONS
/ /dev/vda4[/ostree/deploy/fedora-coreos/deploy/$hash] xfs rw
|-/sysroot /dev/vda4 xfs ro
|-/etc /dev/vda4[/ostree/deploy/fedora-coreos/deploy/$hash/etc] xfs rw
|-/usr /dev/vda4[/ostree/deploy/fedora-coreos/deploy/$hash/usr] xfs ro
|-/var /dev/vda4[/ostree/deploy/fedora-coreos/deploy/var] xfs rw
`-/boot /dev/vda3 ext4 ro
EFI系统分区以前装载在 /boot/efi
,但情况已经不再是这样了。在配置了引导设备镜像的系统上,每个组成磁盘上都有独立的EFI分区。
不可变的 /
,只读 /usr
由于OSTree用于管理属于操作系统的所有文件,因此 /
和 /usr
装载点不可写。对操作系统的任何更改都应通过 rpm-ostree
。
类似地, /boot
挂载点不可写,默认情况下不挂载EFI系统分区。这些文件系统由管理 rpm-ostree
和 bootupd
,并且不能由管理员直接修改。
添加顶级目录(即 /foo
)当前不受支持,并且不被不可变属性所允许。
真实 /
(与文件系统的根目录中的 root
分区)以只读方式装载在 /sysroot
并且不能直接访问或修改。