使用示例(CentOS/RHEL 8)创建Stratis文件系统(精简配置)
我将为我们提供"在RHEL 8 Linux主机上安装和配置stratis"的概述,包括安装必备的rpm和启动所需的守护程序服务,创建池,精简配置文件系统并安装这些文件系统以访问和存储我们的数据。
Stratis
Stratis是一个称为"卷管理"文件系统,它是Red Hat对Btrfs和ZFS的回答。
卷管理文件系统意味着它也可以使用卷的概念。
因此,它是常规文件系统和存储设备之间的一层。
并且在Stratis之上需要常规文件系统。
说明:
目前,在撰写本文时,仅支持常规文件系统的是XFS。
Stratis构建在任何块设备之上,并且包括LVM设备,这很有趣,因为Stratis正在使用卷的概念,并且我们知道LVM也正在使用卷的概念。
因此,我们可以通过以下方式配置Stratis:在服务器上,我们将拥有两个不同级别的卷。
该池启用了许多有用的高级功能,例如:
文件系统快照
精简配置
缓存层-与缓存层一起使用,这意味着它以非常有效的方式处理缓存。
" Programmatic API"(编程API)-这意味着应用程序可以直接处理Stratis进程以配置存储。
Stratis建筑
在Stratis架构的顶部,有一个游泳池。
池是由一个或者多个存储设备(称为" blockdev")创建的,现在" blockdev"基本上是块设备,例如磁盘或者磁盘分区。Stratis将为每个池创建一个"/dev/stratis/my-pool"目录,该目录包含指向代表池中文件系统的设备的链接。
这里的"池"由一个或者多个块设备组成。池具有固定的总大小,等于块设备的大小。
池中的块设备可能未精简配置。精简配置正在文件系统级别进行。
XFS文件系统放在池顶部的一个卷中,它是其中不可或者缺的一部分。
因此,文件系统和卷是捆绑在一起的,它们结合在一起。每个池可以包含一个或者多个文件系统。
文件系统是精简配置的,并且没有固定的大小。
每个文件系统都可以增长到池的大小。
精简配置卷是文件系统的集成部分,随着更多数据添加到文件系统中而自动增长
在RHEL 8 Linux上安装
此过程将使用我用于安装操作系统的RHEL 8 vanilla DVD安装所有使用Stratis所需的软件包。
我将使用RHEL 8 Linux节点来演示本文中的步骤。
说明:
为了能够使用yum命令安装必备的rpm,我们必须有一个存储库。
我们可以使用subscription-manager注册Red Hat节点,也可以使用香草RHEL 8 DVD ISO创建离线仓库。
[root@node4 dvd]# yum install stratis-cli stratisd Updating Subscription Management repositories. Last metadata expiration check: 0:00:44 ago on Mon 17 Jun 2019 11:55:57 AM IST. Dependencies resolved. =================================================================================================================================================================== Package Arch Version Repository Size =================================================================================================================================================================== Installing: stratis-cli noarch 1.0.0-2.el8 rhel_dvd_appstream 50 k stratisd x86_64 1.0.0-2.el8 rhel_dvd_appstream 1.2 M Installing dependencies: python3-dbus-client-gen noarch 0.3-1.el8 rhel_dvd_appstream 25 k python3-dbus-python-client-gen noarch 0.6-2.el8 rhel_dvd_appstream 24 k python3-dbus-signature-pyparsing noarch 0.03-2.el8 rhel_dvd_appstream 19 k python3-into-dbus-python noarch 0.06-2.el8 rhel_dvd_appstream 27 k python3-justbases noarch 0.9-6.el8 rhel_dvd_appstream 45 k python3-justbytes noarch 0.11-2.el8 rhel_dvd_appstream 40 k python3-pyparsing noarch 2.1.10-7.el8 rhel_dvd_baseos 142 k Transaction Summary =================================================================================================================================================================== Install 9 Packages Total size: 1.5 M Installed size: 5.0 M Is this ok [y/N]: y Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installed: python3-pyparsing-2.1.10-7.el8.noarch Installing : python3-pyparsing-2.1.10-7.el8.noarch 1/9 Installed: python3-pyparsing-2.1.10-7.el8.noarch Installed: python3-dbus-signature-pyparsing-0.03-2.el8.noarch Installing : python3-dbus-signature-pyparsing-0.03-2.el8.noarch 2/9 Installed: python3-dbus-signature-pyparsing-0.03-2.el8.noarch Installed: python3-into-dbus-python-0.06-2.el8.noarch Installing : python3-into-dbus-python-0.06-2.el8.noarch 3/9 Installed: python3-into-dbus-python-0.06-2.el8.noarch Installed: python3-dbus-python-client-gen-0.6-2.el8.noarch Installing : python3-dbus-python-client-gen-0.6-2.el8.noarch 4/9 Installed: python3-dbus-python-client-gen-0.6-2.el8.noarch Installed: stratisd-1.0.0-2.el8.x86_64 Installing : stratisd-1.0.0-2.el8.x86_64 5/9 Running scriptlet: stratisd-1.0.0-2.el8.x86_64 5/9 Installed: stratisd-1.0.0-2.el8.x86_64 Installed: python3-justbases-0.9-6.el8.noarch Installing : python3-justbases-0.9-6.el8.noarch 6/9 Installed: python3-justbases-0.9-6.el8.noarch Installed: python3-justbytes-0.11-2.el8.noarch Installing : python3-justbytes-0.11-2.el8.noarch 7/9 Installed: python3-justbytes-0.11-2.el8.noarch Installed: python3-dbus-client-gen-0.3-1.el8.noarch Installing : python3-dbus-client-gen-0.3-1.el8.noarch 8/9 Installed: python3-dbus-client-gen-0.3-1.el8.noarch Installed: stratis-cli-1.0.0-2.el8.noarch Installing : stratis-cli-1.0.0-2.el8.noarch 9/9 Installed: stratis-cli-1.0.0-2.el8.noarch Running scriptlet: stratis-cli-1.0.0-2.el8.noarch 9/9 Verifying : python3-dbus-client-gen-0.3-1.el8.noarch 1/9 Verifying : python3-dbus-python-client-gen-0.6-2.el8.noarch 2/9 Verifying : python3-dbus-signature-pyparsing-0.03-2.el8.noarch 3/9 Verifying : python3-into-dbus-python-0.06-2.el8.noarch 4/9 Verifying : python3-justbases-0.9-6.el8.noarch 5/9 Verifying : python3-justbytes-0.11-2.el8.noarch 6/9 Verifying : stratis-cli-1.0.0-2.el8.noarch 7/9 Verifying : stratisd-1.0.0-2.el8.x86_64 8/9 Verifying : python3-pyparsing-2.1.10-7.el8.noarch 9/9 Installed: stratis-cli-1.0.0-2.el8.noarch stratisd-1.0.0-2.el8.x86_64 python3-dbus-client-gen-0.3-1.el8.noarch python3-dbus-python-client-gen-0.6-2.el8.noarch python3-dbus-signature-pyparsing-0.03-2.el8.noarch python3-into-dbus-python-0.06-2.el8.noarch python3-justbases-0.9-6.el8.noarch python3-justbytes-0.11-2.el8.noarch python3-pyparsing-2.1.10-7.el8.noarch Complete!
确保stratisd
服务已启用并正在运行
[root@node4 dvd]# systemctl enable --now stratisd Created symlink /etc/systemd/system/sysinit.target.wants/stratisd.service → /usr/lib/systemd/system/stratisd.service. [root@node4 dvd]# systemctl status stratisd ● stratisd.service - A daemon that manages a pool of block devices to create flexible file systems Loaded: loaded (/usr/lib/systemd/system/stratisd.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-06-17 11:57:24 IST; 10s ago Docs: man:stratisd(8) Main PID: 11631 (stratisd) Tasks: 1 (limit: 24008) Memory: 756.0K CGroup: /system.slice/stratisd.service └─11631 /usr/libexec/stratisd --debug Jun 17 11:57:24 node4.example systemd[1]: Started A daemon that manages a pool of block devices to create flexible file systems. Jun 17 11:57:24 node4.example stratisd[11631]: DEBUG libstratis::stratis::buff_log: BuffLogger: pass_through: true hold time: none Jun 17 11:57:24 node4.example stratisd[11631]: INFO stratisd: Using StratEngine Jun 17 11:57:24 node4.example stratisd[11631]: DEBUG stratisd: Engine state: Jun 17 11:57:24 node4.example stratisd[11631]: StratEngine { Jun 17 11:57:24 node4.example stratisd[11631]: pools: {}, Jun 17 11:57:24 node4.example stratisd[11631]: incomplete_pools: {}, Jun 17 11:57:24 node4.example stratisd[11631]: watched_dev_last_event_nrs: {} Jun 17 11:57:24 node4.example stratisd[11631]: } Jun 17 11:57:24 node4.example stratisd[11631]: INFO stratisd: DBUS API is now available
准备工作
现在,我们的服务已启动并成功运行。
接下来,我们需要将在其上创建" stratis文件系统"的设备。
其中我在RHEL 8虚拟机上添加了三个虚拟磁盘。
[root@node4 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk ├─sda1 8:1 0 512M 0 part /boot └─sda2 8:2 0 7.5G 0 part ├─rhel-root 253:0 0 6.6G 0 lvm / └─rhel-swap 253:1 0 956M 0 lvm [SWAP] sdb 8:16 0 2G 0 disk sdc 8:32 0 2G 0 disk sdd 8:48 0 2G 0 disk sr0 11:0 1 6.5G 0 rom sr1 11:1 1 1024M 0 rom
如果所选块设备包含文件系统,分区表或者RAID签名,请擦除它们:
[root@node4 ~]# wipefs -a /dev/sdb /dev/sdc /dev/sdd
要在块设备上创建Stratis池,请使用:
[root@node4 ~]# stratis pool create my-pool /dev/sdb /dev/sdc
其中我正在创建一个名为my-pool的新池,其中将包含/dev/sdb
和/dev/sdc
块设备
要检查系统中部分Stratis的块设备的列表,请执行以下操作:
[root@node4 ~]# stratis blockdev list Pool Name Device Node Physical Size State Tier my-pool /dev/sdb 2 GiB Not-in-use Data my-pool /dev/sdc 2 GiB In-use Data
要进行验证,请列出系统上的所有池:
[root@node4 ~]# stratis pool list Name Total Physical Size Total Physical Used my-pool 4 GiB 56 MiB
将块设备添加到现有池
接下来,要将一个或者多个块设备添加到现有池中,请使用:
[root@node4 ~]# stratis pool add-data my-pool /dev/sdd
其中我将/dev/sdd
添加到我现有的池中,即my-pool
接下来验证stratis池中的块设备列表
[root@node4 ~]# stratis blockdev list Pool Name Device Node Physical Size State Tier my-pool /dev/sdb 2 GiB Not-in-use Data my-pool /dev/sdc 2 GiB In-use Data my-pool /dev/sdd 2 GiB Not-in-use Data
创建Stratis文件系统
此过程在现有池上创建Stratis文件系统。
[root@node4 ~]# stratis filesystem create my-pool test-fs1 [root@node4 ~]# stratis filesystem create my-pool test-fs2
这里的test-fs1和test-fs2是我在my-pool下创建的两个文件系统。
要进行验证,请列出池中的文件系统:
[root@node4 ~]# stratis filesystem list Pool Name Name Used Created Device my-pool test-fs1 546 MiB Jun 17 2019 12:05 /dev/stratis/my-pool/test-fs1 my-pool test-fs2 546 MiB Jun 17 2019 12:06 /dev/stratis/my-pool/test-fs2
我们还可以使用以下命令列出池中可用的文件系统:
[root@node4 ~]# stratis fs list Pool Name Name Used Created Device my-pool test-fs1 546 MiB Jun 17 2019 12:05 /dev/stratis/my-pool/test-fs1 my-pool test-fs2 546 MiB Jun 17 2019 12:06 /dev/stratis/my-pool/test-fs2
挂载Stratis文件系统
此过程将安装现有的Stratis文件系统以访问内容。
当前,我的节点包含以下分区和文件系统。
[root@node4 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.5M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/rhel-root 6.4G 1.4G 4.8G 23% / /dev/sda1 488M 124M 329M 28% /boot tmpfs 379M 0 379M 0% /run/user/0
现在,我将为上面创建的两个stratis文件系统创建新的挂载点。
我将使用以下名称在/
下创建目录
[root@node4 ~]# mkdir /test-fs1 [root@node4 ~]# mkdir /test-fs2
现在,由于我有两个可用的挂载点,因此请使用Stratis在Device下的/dev/stratis /
目录中维护的条目:
[root@node4 ~]# stratis fs list Pool Name Name Used Created Device my-pool test-fs1 546 MiB Jun 17 2019 12:05 /dev/stratis/my-pool/test-fs1 my-pool test-fs2 546 MiB Jun 17 2019 12:06 /dev/stratis/my-pool/test-fs2 [root@node4 ~]# mount /dev/stratis/my-pool/test-fs1 /test-fs1/ [root@node4 ~]# mount /dev/stratis/my-pool/test-fs2 /test-fs2/
要验证stratis文件系统是否已成功安装:
[root@node4 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.5M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/rhel-root 6.4G 1.4G 4.8G 23% / /dev/sda1 488M 124M 329M 28% /boot tmpfs 379M 0 379M 0% /run/user/0 /dev/mapper/stratis-1-a35d85c5802c49b59bb8c81104d43bb4-thin-fs-0f6d34239dcb4955803a1054c3a65972 1.0T 7.2G 1017G 1% /test-fs2 /dev/mapper/stratis-1-a35d85c5802c49b59bb8c81104d43bb4-thin-fs-bf11c663d9da4bc390a81440a9184312 1.0T 7.2G 1017G 1% /test-fs1
提示:
" df"报告文件系统的大小为" 1 TB"。
这是因为stratis文件系统没有固定的大小,并且它们使用精简资源调配,因此stratis将自动调整这些文件系统的大小以根据需要在空间上扩展。
检查池中的可用空间
[root@node4 ~]# stratis pool list Name Total Physical Size Total Physical Used my-pool 6 GiB 1.12 GiB
因此,在这种情况下,总池大小为6 GB,仅使用1.2 GB。
要检查文件系统占用的空间:
[root@node4 ~]# stratis filesystem list Pool Name Name Used Created Device my-pool test-fs1 546 MiB Jun 17 2019 12:05 /dev/stratis/my-pool/test-fs1 my-pool test-fs2 546 MiB Jun 17 2019 12:06 /dev/stratis/my-pool/test-fs2
如我们所见,文件系统使用的大小为" 546 MB"。
持久安装Stratis文件系统
此过程将永久装入Stratis文件系统,以便在引导系统后自动可用该文件系统。
使用lsblk
命令获取可用的stratis文件系统的UUID:
[root@node4 ~]# lsblk --output=UUID /dev/stratis/my-pool/test-fs1 UUID bf11c663-d9da-4bc3-90a8-1440a9184312 [root@node4 ~]# lsblk --output=UUID /dev/stratis/my-pool/test-fs2 UUID 0f6d3423-9dcb-4955-803a-1054c3a65972
以超级用户身份编辑"/etc/fstab"文件,并为文件系统添加一行(由UUID标识)。
使用xfs
作为文件系统类型,并添加x-systemd.requires = stratisd.service
选项。
[root@node4 ~]# vim /etc/fstab UUID=bf11c663-d9da-4bc3-90a8-1440a9184312 /test-fs1 xfs defaults,x-systemd.requires=stratisd.service 0 0 UUID=0f6d3423-9dcb-4955-803a-1054c3a65972 /test-fs2 xfs defaults,x-systemd.requires=stratisd.service 0 0
接下来卸载stratis文件系统以验证更改
[root@node4 ~]# umount /test-fs1 [root@node4 ~]# umount /test-fs2/ [root@node4 ~]# df -h | egrep test-fs1|test-fs2
重新生成安装单元,以便系统注册新配置:
[root@node4 ~]# systemctl daemon-reload
尝试挂载文件系统以验证配置是否有效:
[root@node4 ~]# mount -a
因此,fstab目录下的所有分区都已成功挂载,包括Stratis文件系统。
[root@node4 ~]# df -h | egrep test-fs1|test-fs2 /dev/mapper/stratis-1-a35d85c5802c49b59bb8c81104d43bb4-thin-fs-bf11c663d9da4bc390a81440a9184312 1.0T 7.2G 1017G 1% /test-fs1 /dev/mapper/stratis-1-a35d85c5802c49b59bb8c81104d43bb4-thin-fs-0f6d34239dcb4955803a1054c3a65972 1.0T 7.2G 1017G 1% /test-fs2