使用示例(CentOS/RHEL 8)创建Stratis文件系统(精简配置)

时间:2020-01-09 10:37:54  来源:igfitidea点击:

我将为我们提供"在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