Stratis
是一个卷管理文件系统(VMF),类似于 ZFS 和 Btrfs。它使用了存储“池”的核心思想,该思想被各种 VMF 和 形如 LVM 的独立卷管理器采用。使用一个或多个硬盘(或分区)创建存储池,然后在存储池中创建卷。与使用 fdisk 或 GParted 执行的传统硬盘分区不同,存储池中的卷分布无需用户指定。
VMF 更进一步与文件系统层结合起来。用户无需在卷上部署选取的文件系统,因为文件系统和卷已经被合并在一起,成为一个概念上的文件树(ZFS 称之为数据集,Brtfs 称之为子卷,Stratis 称之为文件系统),文件数据位于存储池中,但文件大小仅受存储池整体容量限制。
换一个角度来看:正如文件系统对其中单个文件的真实存储块的实际位置做了一层抽象,而 VMF 对存储池中单个文件系统的真实存储块的实际位置做了一层抽象。
基于存储池,我们可以启用其它有用的特性。特性中的一部分理所当然地来自典型的 VMF 实现,例如文件系统快照,毕竟存储池中的多个文件系统可以共享物理数据块;冗余,分层,完整性等其它特性也很符合逻辑,因为存储池是操作系统中管理所有文件系统上述特性的重要场所。
上述结果表明,相比独立的卷管理器和文件系统层,VMF 的搭建和管理更简单,启用高级存储特性也更容易。
安装 Stratis
对于非开发人员,现在尝试 Stratis 最简单的方法是在 Fedora 28 中。
你可以用以下命令安装 Stratis 守护进程和 Stratis 命令行工具:
dnf install stratis-cli stratisd
创建一个池
Stratis 有三个概念:blockdevs、池和文件系统。 Blockdevs 是组成池的块设备,例如磁盘或磁盘分区。一旦创建池,就可以从中创建文件系统。
假设你的系统上有一个名为 vdg 的块设备,它目前没有被使用或挂载,你可以在它上面创建一个 Stratis 池:
stratis pool create mypool /dev/vdg
这假设 vdg 是完全清零并且是空的。如果它没有被使用,但有旧数据,则可能需要使用 pool create 的 -force 选项。如果正在使用,请勿将它用于 Stratis。
如果你想从多个块设备创建一个池,只需在 pool create 命令行中列出它们。你也可以稍后使用 blockdev add-data 命令添加更多的 blockdevs。请注意,Stratis 要求 blockdevs 的大小至少为 1 GiB。
创建文件系统
在你创建了一个名为 mypool 的池后,你可以从它创建文件系统:
stratis fs create mypool myfs1
从 mypool 池创建一个名为 myfs1 的文件系统后,可以使用 Stratis 在 /dev/stratis 中创建的条目来挂载并使用它:
mkdir myfs1
mount /dev/stratis/mypool/myfs1 myfs1
文件系统现在已被挂载在 myfs1 上并准备可以使用。
快照
除了创建空文件系统之外,你还可以创建一个文件系统作为现有文件系统的快照:
stratis fs snapshot mypool myfs1 myfs1-experiment
这样做后,你可以挂载新的 myfs1-experiment,它将初始包含与 myfs1 相同的文件内容,但它可能随着文件系统的修改而改变。无论你对 myfs1-experiment 所做的任何更改都不会反映到 myfs1 中,除非你卸载了 myfs1 并将其销毁:
umount myfs1
stratis fs destroy mypool myfs1
然后进行快照以重新创建并重新挂载它:
stratis fs snapshot mypool myfs1-experiment myfs1
mount /dev/stratis/mypool/myfs1 myfs1
获取信息
Stratis 可以列出系统中的池:
stratis pool list
随着文件系统写入更多数据,你将看到 “Total Physical Used” 值的增加。当这个值接近 “Total Physical Size” 时要小心。我们仍在努力处理这个问题。
列出池中的文件系统:
stratis fs list mypool
列出组成池的 blockdevs:
stratis blockdev list mypool
目前只提供这些最少的信息,但它们将在未来提供更多信息。
摧毁池
当你了解了 Stratis 可以做什么后,要摧毁池,首先确保从它创建的所有文件系统都被卸载并销毁,然后使用 pool destroy 命令:
umount myfs1
umount myfs1-experiment (if you created it)
stratis fs destroy mypool myfs1
stratis fs destroy mypool myfs1-experiment
stratis pool destroy mypool
stratis pool list 现在应该显示没有池。
VDO高级存储功能
红帽企业Linux8使用vdo功能,可以优化块设备上数据空间占用问题,它可以减少块设备上的磁盘使用空间,同时最大限度减少数据重复,从而节省磁盘空间。
Vdo包含两个模块:Kvdo用于控制数据压缩,uds用于重复数据的删除。
vdo层位于现在块设备(RAID或者本地磁盘)之上,存储层(如LVM和文件系统)位于vdo之上。