标签 Stratis 下的文章

在一个有许多加密磁盘的环境中,解锁所有的磁盘是一项困难的任务。 网络绑定磁盘加密 Network bound disk encryption (NBDE)有助于自动解锁 Stratis 卷的过程。这是在大型环境中的一个关键要求。Stratis 2.1 版本增加了对加密的支持,这在《Stratis 加密入门》一文中介绍过。Stratis 2.3 版本最近在使用加密的 Stratis 池时引入了对网络绑定磁盘加密(NBDE)的支持,这是本文的主题。

Stratis 网站 将 Stratis 描述为一个“易于使用的 Linux 本地存储管理”。短视频《使用 Stratis 管理存储》对基础知识进行了快速演示。该视频是在 Red Hat Enterprise Linux 8 系统上录制的,然而,视频中显示的概念也适用于 Fedora Linux 中的 Stratis。

先决条件

本文假设你熟悉 Stratis,也熟悉 Stratis 池加密。如果你不熟悉这些主题,请参考这篇 文章 和前面提到的 Stratis 概述视频

NBDE 需要 Stratis 2.3 或更高版本。本文中的例子使用的是 Fedora Linux 34 的预发布版本。Fedora Linux 34 的最终版本将包含 Stratis 2.3。

网络绑定磁盘加密(NBDE)概述

加密存储的主要挑战之一是有一个安全的方法在系统重启后再次解锁存储。在大型环境中,手动输入加密口令并不能很好地扩展。NBDE 解决了这一问题,允许以自动方式解锁加密存储。

在更高层次上,NBDE 需要环境中的 Tang 服务器。客户端系统(使用 Clevis Pin)只要能与 Tang 服务器建立网络连接,就可以自动解密存储。如果网络没有连接到 Tang 服务器,则必须手动解密存储。

这背后的想法是,Tang 服务器只能在内部网络上使用,因此,如果加密设备丢失或被盗,它将不再能够访问内部网络连接到 Tang 服务器,因此不会被自动解密。

关于 Tang 和 Clevis 的更多信息,请参见手册页(man tangman clevis)、Tang 的 GitHub 页面Clevis 的 GitHub 页面

设置 Tang 服务器

本例使用另一个 Fedora Linux 系统作为 Tang 服务器,主机名为 tang-server。首先安装 tang 包。

dnf install tang

然后用 systemctl 启用并启动 tangd.socket

systemctl enable tangd.socket --now

Tang 使用的是 TCP 80 端口,所以你也需要在防火墙中打开该端口。

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=80/tcp

最后,运行 tang-show-keys 来显示输出签名密钥指纹。你以后会需要这个。

# tang-show-keys
l3fZGUCmnvKQF_OA6VZF9jf8z2s

创建加密的 Stratis 池

上一篇关于 Stratis 加密的文章详细介绍了如何设置加密的 Stratis 池,所以本文不会深入介绍。

第一步是捕获一个将用于解密 Stratis 池的密钥。即使使用 NBDE,也需要设置这个,因为在 NBDE 服务器无法到达的情况下,可以用它来手动解锁池。使用以下命令捕获 pool1 密钥。

# stratis key set --capture-key pool1key
Enter key data followed by the return key:

然后我将使用 /dev/vdb 设备创建一个加密的 Stratis 池(使用刚才创建的 pool1key),命名为 pool1

# stratis pool create --key-desc pool1key pool1 /dev/vdb。

接下来,在这个 Stratis 池中创建一个名为 filesystem1 的文件系统,创建一个挂载点,挂载文件系统,并在其中创建一个测试文件:

# stratis filesystem create pool1 filesystem1
# mkdir /filesystem1
# mount /dev/stratis/pool1/filesystem1 /filesystem1
# cd /filesystem1
# echo "this is a test file" > testfile

将 Stratis 池绑定到 Tang 服务器上

此时,我们已经创建了加密的 Stratis 池,并在池中创建了一个文件系统。下一步是将你的 Stratis 池绑定到刚刚设置的 Tang 服务器上。使用 stratis pool bind nbde 命令进行。

当你进行 Tang 绑定时,需要向该命令传递几个参数:

  • 池名(在本例中,pool1
  • 钥匙描述符名称(本例中为 pool1key
  • Tang 服务器名称(在本例中,http://tang-server

记得之前在 Tang 服务器上,运行了 tang-show-keys,显示 Tang 输出的签名密钥指纹是 l3fZGUCmnvKQF_OA6VZF9jf8z2s。除了前面的参数外,还需要用参数 -thumbprint l3fZGUCmnvKQF_OA6VZF9jf8z2s 传递这个指纹,或者用 -trust-url 参数跳过对指纹的验证。

使用 -thumbprint 参数更安全。例如:

# stratis pool bind nbde pool1 pool1key http://tang-server --thumbprint l3fZGUCmnvKQF_OA6VZF9jf8z2s

用 NBDE 解锁 Stratis 池

接下来重启主机,并验证你可以用 NBDE 解锁 Stratis 池,而不需要使用密钥口令。重启主机后,该池不再可用:

# stratis pool list
Name Total Physical Properties

要使用 NBDE 解锁池,请运行以下命令:

# stratis pool unlock clevis

注意,你不需要使用密钥口令。这个命令可以在系统启动时自动运行。

此时,Stratis 池已经可以使用了:

# stratis pool list
Name Total Physical Properties
pool1 4.98 GiB / 583.65 MiB / 4.41 GiB ~Ca, Cr

你可以挂载文件系统,访问之前创建的文件:

# mount /dev/stratis/pool1/filesystem1 /filesystem1/
# cat /filesystem1/testfile
this is a test file

轮换 Tang 服务器密钥

最好定期轮换 Tang 服务器密钥,并更新 Stratis 客户服务器以使用新的 Tang 密钥。

要生成新的 Tang 密钥,首先登录到 Tang 服务器,查看 /var/db/tang 目录的当前状态。然后,运行 tang-show-keys 命令:

# ls -al /var/db/tang
total 8
drwx------. 1 tang tang 124 Mar 15 15:51 .
drwxr-xr-x. 1 root root 16 Mar 15 15:48 ..
-rw-r--r--. 1 tang tang 361 Mar 15 15:51 hbjJEDXy8G8wynMPqiq8F47nJwo.jwk
-rw-r--r--. 1 tang tang 367 Mar 15 15:51 l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk
# tang-show-keys
l3fZGUCmnvKQF_OA6VZF9jf8z2s

要生成新的密钥,运行 tangd-keygen 并将其指向 /var/db/tang 目录:

# /usr/libexec/tangd-keygen /var/db/tang

如果你再看看 /var/db/tang 目录,你会看到两个新文件:

# ls -al /var/db/tang
total 16
drwx------. 1 tang tang 248 Mar 22 10:41 .
drwxr-xr-x. 1 root root 16 Mar 15 15:48 ..
-rw-r--r--. 1 tang tang 361 Mar 15 15:51 hbjJEDXy8G8wynMPqiq8F47nJwo.jwk
-rw-r--r--. 1 root root 354 Mar 22 10:41 iyG5HcF01zaPjaGY6L_3WaslJ_E.jwk
-rw-r--r--. 1 root root 349 Mar 22 10:41 jHxerkqARY1Ww_H_8YjQVZ5OHao.jwk
-rw-r--r--. 1 tang tang 367 Mar 15 15:51 l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk

如果你运行 tang-show-keys,就会显示出 Tang 所公布的密钥:

# tang-show-keys
l3fZGUCmnvKQF_OA6VZF9jf8z2s
iyG5HcF01zaPjaGY6L_3WaslJ_E

你可以通过将两个原始文件改名为以句号开头的隐藏文件,来防止旧的密钥(以 l3fZ 开头)被公布。通过这种方法,旧的密钥将不再被公布,但是它仍然可以被任何没有更新为使用新密钥的现有客户端使用。一旦所有的客户端都更新使用了新密钥,这些旧密钥文件就可以删除了。

# cd /var/db/tang
# mv hbjJEDXy8G8wynMPqiq8F47nJwo.jwk   .hbjJEDXy8G8wynMPqiq8F47nJwo.jwk
# mv l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk   .l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk

此时,如果再运行 tang-show-keys,Tang 只公布新钥匙:

# tang-show-keys
iyG5HcF01zaPjaGY6L_3WaslJ_E

下一步,切换到你的 Stratis 系统并更新它以使用新的 Tang 密钥。当文件系统在线时, Stratis 支持这样做。

首先,解除对池的绑定:

# stratis pool unbind pool1

接下来,用创建加密池时使用的原始口令设置密钥:

# stratis key set --capture-key pool1key
Enter key data followed by the return key:

最后,用更新后的密钥指纹将 Stratis 池绑定到 Tang 服务器上:

# stratis pool bind nbde pool1 pool1key http://tang-server --thumbprint iyG5HcF01zaPjaGY6L_3WaslJ_E

Stratis 系统现在配置为使用更新的 Tang 密钥。一旦使用旧的 Tang 密钥的任何其他客户系统被更新,在 Tang 服务器上的 /var/db/tang 目录中被重命名为隐藏文件的两个原始密钥文件就可以被备份和删除了。

如果 Tang 服务器不可用怎么办?

接下来,关闭 Tang 服务器,模拟它不可用,然后重启 Stratis 系统。

重启后,Stratis 池又不可用了:

# stratis pool list
Name Total Physical Properties

如果你试图用 NBDE 解锁,会因为 Tang 服务器不可用而失败:

# stratis pool unlock clevis
Execution failed:
An iterative command generated one or more errors: The operation 'unlock' on a resource of type pool failed. The following errors occurred:
Partial action "unlock" failed for pool with UUID 4d62f840f2bb4ec9ab53a44b49da3f48: Cryptsetup error: Failed with error: Error: Command failed: cmd: "clevis" "luks" "unlock" "-d" "/dev/vdb" "-n" "stratis-1-private-42142fedcb4c47cea2e2b873c08fcf63-crypt", exit reason: 1 stdout: stderr: /dev/vdb could not be opened.

此时,在 Tang 服务器无法到达的情况下,解锁池的唯一选择就是使用原密钥口令:

# stratis key set --capture-key pool1key
Enter key data followed by the return key:

然后你可以使用钥匙解锁池:

# stratis pool unlock keyring

接下来,验证池是否成功解锁:

# stratis pool list
Name Total Physical Properties
pool1 4.98 GiB / 583.65 MiB / 4.41 GiB ~Ca, Cr

via: https://fedoramagazine.org/network-bound-disk-encryption-with-stratis/

作者:briansmith 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Stratis 在其 官方网站 上被描述为“易于使用的 Linux 本地存储管理”。请看这个 短视频,快速演示基础知识。该视频是在 Red Hat Enterprise Linux 8 系统上录制的。视频中显示的概念也适用于 Fedora 中的 Stratis。

Stratis 2.1 版本引入了对加密的支持。继续阅读以了解如何在 Stratis 中开始加密。

先决条件

加密需要 Stratis 2.1 或更高版本。这篇文章中的例子使用的是 Fedora 33 的预发布版本。Stratis 2.1 将用在 Fedora 33 的最终版本中。

你还需要至少一个可用的块设备来创建一个加密池。下面的例子是在 KVM 虚拟机上完成的,虚拟磁盘驱动器为 5GB(/dev/vdb)。

在内核密钥环中创建一个密钥

Linux 内核 密钥环 keyring 用于存储加密密钥。关于内核密钥环的更多信息,请参考 keyrings 手册页(man keyrings)。

使用 stratis key set 命令在内核钥匙圈中设置密钥。你必须指定从哪里读取密钥。要从标准输入中读取密钥,使用 -capture-key 选项。要从文件中读取密钥,使用 -keyfile-path <file> 选项。最后一个参数是一个密钥描述。它将稍后你创建加密的 Stratis 池时使用。

例如,要创建一个描述为 pool1key 的密钥,并从标准输入中读取密钥,可以输入:

# stratis key set --capture-key pool1key
Enter desired key data followed by the return key:

该命令提示我们输入密钥数据/密码,然后密钥就创建在内核密钥环中了。

要验证密钥是否已被创建,运行 stratis key list

# stratis key list
Key Description
pool1key

这将验证是否创建了 pool1key。请注意,这些密钥不是持久的。如果主机重启,在访问加密的 Stratis 池之前,需要再次提供密钥(此过程将在后面介绍)。

如果你有多个加密池,它们可以有一个单独的密钥,也可以共享同一个密钥。

也可以使用以下 keyctl 命令查看密钥:

# keyctl get_persistent @s
318044983
# keyctl show
Session Keyring
 701701270 --alswrv      0     0  keyring: _ses
 649111286 --alswrv      0 65534   \_ keyring: _uid.0
 318044983 ---lswrv      0 65534   \_ keyring: _persistent.0
1051260141 --alswrv      0     0       \_ user: stratis-1-key-pool1key

创建加密的 Stratis 池

现在已经为 Stratis 创建了一个密钥,下一步是创建加密的 Stratis 池。加密池只能在创建池时进行。目前不可能对现有的池进行加密。

使用 stratis pool create 命令创建一个池。添加 -key-desc 和你在上一步提供的密钥描述(pool1key)。这将向 Stratis 发出信号,池应该使用提供的密钥进行加密。下面的例子是在 /dev/vdb 上创建 Stratis 池,并将其命名为 pool1。确保在你的系统中指定一个空的/可用的设备。

# stratis pool create --key-desc pool1key pool1 /dev/vdb

你可以使用 stratis pool list 命令验证该池是否已经创建:

# stratis pool list
Name                     Total Physical   Properties
pool1   4.98 GiB / 37.63 MiB / 4.95 GiB      ~Ca, Cr

在上面显示的示例输出中,~Ca 表示禁用了缓存(~ 否定了该属性)。Cr 表示启用了加密。请注意,缓存和加密是相互排斥的。这两个功能不能同时启用。

接下来,创建一个文件系统。下面的例子演示了创建一个名为 filesystem1 的文件系统,将其挂载在 /filesystem1 挂载点上,并在新文件系统中创建一个测试文件:

# stratis filesystem create pool1 filesystem1
# mkdir /filesystem1
# mount /stratis/pool1/filesystem1 /filesystem1
# cd /filesystem1
# echo "this is a test file" > testfile

重启后访问加密池

当重新启动时,你会发现 Stratis 不再显示你的加密池或它的块设备:

# stratis pool list
Name   Total Physical   Properties
# stratis blockdev list
Pool Name   Device Node   Physical Size   Tier

要访问加密池,首先要用之前使用的相同的密钥描述和密钥数据/口令重新创建密钥:

# stratis key set --capture-key pool1key
Enter desired key data followed by the return key:

接下来,运行 stratis pool unlock 命令,并验证现在可以看到池和它的块设备:

# stratis pool unlock
# stratis pool list
Name                      Total Physical   Properties
pool1   4.98 GiB / 583.65 MiB / 4.41 GiB      ~Ca, Cr
# stratis blockdev list
Pool Name   Device Node   Physical Size   Tier
pool1       /dev/dm-2          4.98 GiB   Data

接下来,挂载文件系统并验证是否可以访问之前创建的测试文件:

# mount /stratis/pool1/filesystem1 /filesystem1/
# cat /filesystem1/testfile
this is a test file

使用 systemd 单元文件在启动时自动解锁 Stratis 池

可以在启动时自动解锁 Stratis 池,无需手动干预。但是,必须有一个包含密钥的文件。在某些环境下,将密钥存储在文件中可能会有安全问题。

下图所示的 systemd 单元文件提供了一个简单的方法来在启动时解锁 Stratis 池并挂载文件系统。欢迎提供更好的/替代方法的反馈。你可以在文章末尾的评论区提供建议。

首先用下面的命令创建你的密钥文件。确保用之前输入的相同的密钥数据/密码来代替passphrase

# echo -n passphrase > /root/pool1key

确保该文件只能由 root 读取:

# chmod 400 /root/pool1key
# chown root:root /root/pool1key

/etc/systemd/system/stratis-filesystem1.service 创建包含以下内容的 systemd 单元文件:

[Unit]
Description = stratis mount pool1 filesystem1 file system
After = stratisd.service

[Service]
ExecStartPre=sleep 2
ExecStartPre=stratis key set --keyfile-path /root/pool1key pool1key
ExecStartPre=stratis pool unlock
ExecStartPre=sleep 3
ExecStart=mount /stratis/pool1/filesystem1 /filesystem1
RemainAfterExit=yes

[Install]
WantedBy = multi-user.target

接下来,启用服务,使其在启动时运行:

# systemctl enable stratis-filesystem1.service

现在重新启动并验证 Stratis 池是否已自动解锁,其文件系统是否已挂载。

结语

在今天的环境中,加密是很多人和组织的必修课。本篇文章演示了如何在 Stratis 2.1 中启用加密功能。


via: https://fedoramagazine.org/getting-started-with-stratis-encryption/

作者:briansmith 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过从命令行运行它,得到这个易于使用的 Linux 存储工具的主要用途。

正如本系列的第一部分第二部分中所讨论的,Stratis 是一个具有与 ZFSBtrfs 相似功能的卷管理文件系统。在本文中,我们将介绍如何在命令行上使用 Stratis。

安装 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 现在应该显示没有池。

就是这些!有关更多信息,请参阅手册页:“man stratis”。


via: https://opensource.com/article/18/5/stratis-storage-linux-command-line

作者:Andy Grover 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

深入了解这个强大而不繁琐的 Linux 存储管理系统。

在本系列第一部分中提到,Stratis 是一个 卷管理文件系统 volume-managing filesystem (VMF),功能特性类似于 ZFSBtrfs。在设计 Stratis 过程中,我们研究了已有解决方案开发者做出的取舍。

为何不使用已有解决方案

理由千差万别。先说说 ZFS,它最初由 Sun Microsystems 为 Solaris (目前为 Oracle 所有)开发,后移植到 Linux。但 CDDL 协议授权的代码无法合并到 GPL 协议授权的 Linux 源码树中。CDDL 与 GPLv2 是否真的不兼容有待讨论,但这种不确定性足以打消企业级 Linux 供应商采用并支持 ZFS 的积极性。

Btrfs 发展也很好,没有授权问题。它已经多年被很多用户列为“最佳文件系统”,但在稳定性和功能特性方面仍有待提高。

我们希望打破现状,解决已有方案的种种问题,这种渴望促成了 Stratis。

Stratis 如何与众不同

ZFS 和 Btrfs 让我们知道一件事情,即编写一个内核支持的 VMF 文件系统需要花费极大的时间和精力,才能消除漏洞、增强稳定性。涉及核心数据时,提供正确性保证是必要的。如果 Stratis 也采用这种方案并从零开始的话,开发工作也需要十数年,这是无法接受的。

相反地,Stratis 采用 Linux 内核的其它一些已有特性:device mapper 子系统以及久经考验的高性能文件系统 XFS,其中前者被 LVM 用于提供 RAID、精简配置和其它块设备特性而广为人知。Stratis 将已有技术作为(技术架构中的)层来创建存储池,目标是通过集成为用户提供一个看似无缝的整体。

Stratis 从 ZFS 学到哪些

对很多用户而言,ZFS 影响了他们对下一代文件系统的预期。通过查看人们在互联网上关于 ZFS 的讨论,我们设定了 Stratis 的最初开发目标。ZFS 的设计思路也潜在地为我们指明应该避免哪些东西。例如,当挂载一个在其它主机上创建的存储池时,ZFS 需要一个“ 导入 import ”步骤。这样做出于某些原因,但每一种原因都似乎是 Stratis 需要解决的问题,无论是否采用同样的实现方式。

对于增加新硬盘或将已有硬盘替换为更大容量的硬盘,ZFS 有一些限制,尤其是存储池做了冗余配置的时候,这一点让我们不太满意。当然,这么设计也是有其原因的,但我们更愿意将其视为可以改进的空间。

最后,一旦掌握了 ZFS 的命令行工具,用户体验很好。我们希望让 Stratis 的命令行工具能够保持这种体验;同时,我们也很喜欢 ZFS 命令行工具的发展趋势,包括使用 位置参数 positional parameters 和控制每个命令需要的键盘输入量。

(LCTT 译注:位置参数来自脚本,$n 代表第 n 个参数)

Stratis 从 Btrfs 学到哪些

Btrfs 让我们满意的一点是,有单一的包含位置子命令的命令行工具。Btrfs 也将冗余(选择对应的 Btrfs profiles)视为存储池的特性之一。而且和 ZFS 相比实现方式更好理解,也允许增加甚至移除硬盘。

(LCTT 译注:Btrfs profiles 包括 single/DUP 和 各种 RAID 等类型)

最后,通过了解 ZFS 和 Btrfs 共有的特性,例如快照的实现、对发送/接收的支持,让我们更好的抉择 Stratis 应该包括的特性。

Stratis 从 LVM 学到哪些

在 Stratis 设计阶段早期,我们仔细研究了 LVM。LVM 目前是 Linux device mapper (DM) 最主要的使用者;事实上,DM 就是由 LVM 的核心开发团队维护的。我们研究了将 LVM 真的作为 Stratis 其中一层的可能性,也使用 DM 做了实验,其中 Stratis 可以作为 对等角色 peer 直接与 LVM 打交道。我们参考了 LVM 的 磁盘元数据格式 on-disk metadata format (也结合 ZFS 和 XFS 的相应格式),获取灵感并定义了 Stratis 的磁盘元数据格式。

在提到的项目中,LVM 与 Stratis 内在地有最多的共性,毕竟它们都使用 DM。不过从使用的角度来看,LVM 内在工作更加透明,为专业用户提供相当多的控制和选项,使其可以精确配置 卷组 volume group (存储池)的 布局 layout ;但 Stratis 不采用这种方式。

多种多样的解决方案

基于自由和开源软件工作的明显好处在于,没有什么组件是不可替代的。包括内核在内的每个组成部分都是开源的,可以查看修改源代码,如果当前的软件不能满足用户需求可以用其它软件替换。新项目产生不一定意味着旧项目的终结,只要都有足够的(社区)支持,两者可以并行存在。

对于寻找一个不存在争议、简单易用、强大的本地存储管理解决方案的人而言,Stratis 是更好满足其需求的一种尝试。这意味着一种设计思路所做的抉择不一定对所有用户适用。考虑到用户的其它需求,另一种设计思路可能需要艰难的做出抉择。所有用户可以选择最适合其的工作的工具并从这种自由选择中受益。


via: https://opensource.com/article/18/4/stratis-lessons-learned

作者:Andy Grover 选题:lujun9972 译者:pinewall 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

关注于易用性,Stratis 为桌面用户提供了一套强力的高级存储功能。

对桌面 Linux 用户而言,极少或仅在安装系统时配置本地存储。Linux 存储技术进展比较慢,以至于 20 年前的很多存储工具仍在今天广泛使用。但从那之后,存储技术已经提升了不少,我们为何不享受新特性带来的好处呢?

本文介绍 Startis,这是一个新项目,试图让所有 Linux 用户从存储技术进步中受益,适用场景可以是仅有一块 SSD 的单台笔记本,也可以是包含上百块硬盘的存储阵列。Linux 支持新特性,但由于缺乏易于使用的解决方案,使其没有被广泛采用。Stratis 的目标就是让 Linux 的高级存储特性更加可用。

简单可靠地使用高级存储特性

Stratis 希望让如下三件事变得更加容易:存储初始化配置;后续变更;使用高级存储特性,包括 快照 snapshots 精简配置 thin provisioning ,甚至 分层 tiering

Stratis:一个卷管理文件系统

Stratis 是一个 卷管理文件系统 volume-managing filesystem (VMF),类似于 ZFSBtrfs。它使用了存储“池”的核心思想,该思想被各种 VMF 和 形如 LVM) 的独立卷管理器采用。使用一个或多个硬盘(或分区)创建存储池,然后在存储池中创建 volume 。与使用 fdiskGParted 执行的传统硬盘分区不同,存储池中的卷分布无需用户指定。

VMF 更进一步与文件系统层结合起来。用户无需在卷上部署选取的文件系统,因为文件系统和卷已经被合并在一起,成为一个概念上的文件树(ZFS 称之为 数据集 dataset ,Brtfs 称之为 子卷 subvolume ,Stratis 称之为文件系统),文件数据位于存储池中,但文件大小仅受存储池整体容量限制。

换一个角度来看:正如文件系统对其中单个文件的真实存储块的实际位置做了一层 抽象 abstract ,而 VMF 对存储池中单个文件系统的真实存储块的实际位置做了一层抽象。

基于存储池,我们可以启用其它有用的特性。特性中的一部分理所当然地来自典型的 VMF 实现 implementation ,例如文件系统快照,毕竟存储池中的多个文件系统可以共享 物理数据块 physical data block 冗余 redundancy ,分层, 完整性 integrity 等其它特性也很符合逻辑,因为存储池是操作系统中管理所有文件系统上述特性的重要场所。

上述结果表明,相比独立的卷管理器和文件系统层,VMF 的搭建和管理更简单,启用高级存储特性也更容易。

Stratis 与 ZFS 和 Btrfs 有哪些不同?

作为新项目,Stratis 可以从已有项目中吸取经验,我们将在第二部分深入介绍 Stratis 采用了 ZFS、Brtfs 和 LVM 的哪些设计。总结一下,Stratis 与其不同之处来自于对功能特性支持的观察,来自于个人使用及计算机自动化运行方式的改变,以及来自于底层硬件的改变。

首先,Stratis 强调易用性和安全性。对个人用户而言,这很重要,毕竟他们与 Stratis 交互的时间间隔可能很长。如果交互不那么友好,尤其是有丢数据的可能性,大部分人宁愿放弃使用新特性,继续使用功能比较基础的文件系统。

第二,当前 API 和 DevOps 式 Devops-style 自动化的重要性远高于早些年。Stratis 提供了支持自动化的一流 API,这样人们可以直接通过自动化工具使用 Stratis。

第三,SSD 的容量和市场份额都已经显著提升。早期的文件系统中很多代码用于优化机械介质访问速度慢的问题,但对于基于闪存的介质,这些优化变得不那么重要。即使当存储池过大而不适合使用 SSD 的情况,仍可以考虑使用 SSD 充当 缓存层 caching tier ,可以提供不错的性能提升。考虑到 SSD 的优良性能,Stratis 主要聚焦存储池设计方面的 灵活性 flexibility 可靠性 reliability

最后,与 ZFS 和 Btrfs 相比,Stratis 具有明显不一样的 实现模型 implementation model (我会在第二部分进一步分析)。这意味着对 Stratis 而言,虽然一些功能较难实现,但一些功能较容易实现。这也加快了 Stratis 的开发进度。

了解更多

如果希望更多了解 Stratis,可以查看本系列的第二部分。你还可以在 Stratis 官网 找到详细的设计文档

如何参与

如果希望参与开发、测试 Stratis 或给出反馈,请订阅我们的邮件列表

GitHub 上的开发项目包括 守护进程 (使用 Rust 开发)和 命令行工具 (使用 Python 开发)两部分。

可以在 Freenode IRC 网络的 #stratis-storage 频道加入我们。

Andy Grover 将在今年的 LinuxFest Northwest 会议上演讲。查看会议安排注册参会


via: https://opensource.com/article/18/4/stratis-easy-use-local-storage-management-linux

作者:Andy Grover 选题:lujun9972 译者:pinewall 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出