ZFS - zfs
¶
ZFS 结合了物理卷管理和文件系统。ZFS 安装可以跨越一系列存储设备,并且可扩展性很强,允许您立即添加磁盘以扩展存储池中的可用空间。
ZFS 是一个基于块的文件系统,它使用校验和来验证、确认和纠正每次操作,从而防止数据损坏。为了以足够的速度运行,此机制需要一个具有大量 RAM 的强大环境。
此外,ZFS 还提供了快照和复制、RAID 管理、写时复制克隆、压缩和其他功能。
要使用 ZFS,请确保您的机器上安装了 zfsutils-linux
。
术语¶
ZFS 根据物理存储设备创建逻辑单元。这些逻辑单元称为 *ZFS 池* 或 *zpools*。每个 zpool 然后被划分为多个 *
*
ZFS 文件系统 * 可以看作是一个分区或一个已挂载的文件系统。*ZFS 卷* 代表一个块设备。
*ZFS 快照* 捕获 *
ZFS 文件系统 或 ZFS 卷的特定状态。ZFS 快照是只读的。*ZFS 克隆* 是 ZFS 快照的可写副本。
zfs
Incus 中的驱动程序¶
Incus 中的 zfs
驱动程序使用
Incus 假设它对 ZFS 池和
由于 ZFS 中写时复制的工作方式,父级deleted/
路径下,直到所有引用都消失,并且该对象可以安全删除。请注意,此方法可能会影响恢复快照。请参阅下面的 限制。
Incus 会在 ZFS 0.8 或更高版本上自动为所有新创建的池启用修剪支持。这通过允许控制器更好地重用块来延长 SSD 的寿命,并且还允许在使用循环回退的 ZFS 池时释放根文件系统上的空间。如果您运行的是 ZFS 版本低于 0.8,并且想要启用修剪,请升级到至少 0.8 版。然后使用以下命令确保将来自动为 ZFS 池启用修剪,并修剪所有当前未使用的空间
zpool upgrade ZPOOL-NAME
zpool set autotrim=on ZPOOL-NAME
zpool trim ZPOOL-NAME
限制¶
zfs
驱动程序有以下限制
- 从旧快照恢复
ZFS 不支持从除最新快照之外的快照恢复。但是,您可以从旧快照创建新实例。此方法可以帮助您确认特定快照是否包含您需要的内容。确定正确的快照后,您可以 删除较新的快照,这样您需要的快照就是最新的快照,您可以恢复它。
或者,您可以将 Incus 配置为在恢复期间自动丢弃较新的快照。为此,请设置卷的
zfs.remove_snapshots
配置(或存储池上的相应volume.zfs.remove_snapshots
配置,以适用于池中的所有卷)。但是,请注意,如果
zfs.clone_copy
设置为true
,则实例副本也会使用 ZFS 快照。在这种情况下,您无法将实例恢复到最后一次副本之前拍摄的快照,除非您也删除所有后代。如果这不是一种选择,您可以将想要的快照复制到一个新实例中,然后删除旧实例。但是,您会丢失实例可能具有的任何其他快照。- 观察 I/O 配额
I/O 配额不太可能影响
ZFS 文件系统 太多。这是因为 ZFS 是 Solaris 模块的移植(使用 SPL),而不是使用 Linux VFS API 的本机 Linux 文件系统,而 Linux VFS API 是应用 I/O 限制的地方。- ZFS 中的功能支持
某些功能,例如使用 idmaps 或委托 ZFS 数据集,需要 ZFS 2.2 或更高版本,因此目前还没有得到广泛支持。
配额¶
ZFS 提供了两种不同的配额属性:quota
和 refquota
。quota
限制了refquota
仅限制
默认情况下,Incus 在您为存储卷设置配额时使用 quota
属性。如果您想使用 refquota
属性,请为该卷设置 zfs.use_refquota
配置(或在存储池上设置相应的 volume.zfs.use_refquota
配置,用于池中的所有卷)。
您还可以设置 zfs.use_reserve_space
(或 volume.zfs.use_reserve_space
)配置,以便与 quota
或 refquota
一起使用 ZFS reservation
或 refreservation
。
配置选项¶
以下配置选项适用于使用 zfs
驱动程序的存储池以及这些池中的存储卷。
存储池配置¶
键 |
类型 |
默认值 |
描述 |
---|---|---|---|
|
string |
auto(可用磁盘空间的 20%,>= 5 GiB 且 <= 30 GiB) |
创建基于循环的池时的存储池大小(以字节为单位,支持后缀,可以增加以扩展存储池) |
|
string |
- |
现有块设备、循环文件或 ZFS 数据集/池的路径。多个块设备应以 |
|
bool |
|
在创建存储池之前擦除 |
|
string |
|
是否使用 ZFS 轻量级克隆而不是完整 |
|
bool |
|
在执行卸载操作时禁用 zpool 导出 |
|
string |
池的名称 |
zpool 的名称 |
提示
除了这些配置之外,您还可以为存储卷配置设置默认值。请参见 为存储卷配置默认值.
存储卷配置¶
键 |
类型 |
条件 |
默认值 |
描述 |
---|---|---|---|---|
|
string |
具有内容类型 |
与 |
存储卷的文件系统: |
|
string |
具有内容类型 |
与 |
基于块的文件系统卷的挂载选项 |
|
bool |
自定义块卷 |
与 |
启用跨多个实例共享卷 |
|
bool |
自定义卷 |
与 |
启用 ID 偏移覆盖(允许多个隔离实例附加) |
|
bool |
自定义卷 |
与 |
禁用卷的 ID 映射 |
|
string |
与 |
存储卷的大小/配额 |
|
|
string |
自定义卷 |
与 |
控制何时删除快照(预期表达式类似于 |
|
string |
自定义卷 |
与 |
表示快照名称的 Pongo2 模板字符串(用于计划快照和未命名的快照)[1] |
|
string |
自定义卷 |
与 |
Cron 表达式( |
|
string |
与 |
ZFS 块的大小,范围为 512 到 16 MiB(必须为 2 的幂) - 对于块卷,即使设置了更高的值,最大值也将为 128 KiB |
|
|
bool |
与 |
是否使用格式化的 |
|
|
bool |
ZFS 2.2 或更高版本 |
与 |
控制是否将 ZFS 数据集及其下方的任何内容委派给使用它的容器。允许在容器中使用 |
|
bool |
与 |
根据需要删除快照 |
|
|
bool |
与 |
使用 |
|
|
bool |
与 |
使用 |
存储桶配置¶
要为本地存储池驱动程序启用存储桶并允许应用程序通过 S3 协议访问这些存储桶,您必须配置 core.storage_buckets_address
服务器设置。
键 |
类型 |
条件 |
默认值 |
描述 |
---|---|---|---|---|
|
string |
合适的驱动程序 |
与 |
存储桶的大小/配额 |