安装并使用Stratis来管理RHEL 8/CentOS 8上的本地存储

时间:2020-02-23 14:31:06  来源:igfitidea点击:

如何在CentOS 8/RHEL 8上安装Stratis? Stratis是针对Linux的本地存储管理解决方案,致力于简化和易用性。它使用Linux的devicemapper子系统和XFS文件系统。Stratis还使我们可以访问高级存储功能,例如:精简配置文件系统快照基于池的管理监控。

作为系统管理员,我们可以轻松设置新存储并管理Stratis高级系统集成的复杂存储配置。它是使用存储池概念的混合用户和内核本地存储管理系统。

Stratis是RHEL 8的新本地存储管理器。我们可以在Red Hat Enterprise Linux 8(RHEL 8)上查看其他RHEL 8新功能。

Stratis术语

使用Stratis时,我们经常会遇到以下术语:
blockdev:这是一个块设备,例如磁盘或者磁盘分区.
pool:池由一个或者多个总大小固定的块设备组成,等于块设备的大小。
文件系统:每个池可以包含一个或者多个文件系统,用于存储文件。由于文件系统是精简配置的,因此其总大小没有固定的值。如果数据大小接近文件系统的虚拟大小,则Stratis会自动增加精简卷和文件系统的大小。

Stratis池位于/dev/stratis/<poolname>目录下。

Stratis支持的设备

Stratis可与以下块设备配合使用:iSCSI LVM逻辑卷设备映射器多路径硬盘LUKSSSDs NVMe存储设备mdraid

Stratis软件组件

Stratis提供了两个软件组件:Stratisd守护程序:管理块设备的集合,并提供D-Bus API。Stratis-cli:提供命令行工具" stratis",其本身使用D-Bus API与Stratisd进行通信。

在RHEL 8/CentOS 8上安装Stratis

RHEL 8附带了Stratisd和Stratis-cli,可以使用yum软件包管理工具轻松安装。

sudo yum -y install stratisd stratis-cli

成功安装后应输出:

Installed:
  stratisd-1.0.0-2.el8.x86_64                                              
  stratis-cli-1.0.0-2.el8.noarch                                           
  python3-dbus-client-gen-0.3-1.el8.noarch                                 
  python3-justbases-0.9-6.el8.noarch                                       
  python3-dbus-signature-pyparsing-0.03-2.el8.noarch                       
  python3-dbus-python-client-gen-0.6-2.el8.noarch                          
  python3-justbytes-0.11-2.el8.noarch                                      
  python3-into-dbus-python-0.06-2.el8.noarch                               
  python3-pyparsing-2.1.10-7.el8.noarch                                    

Complete!

我们可以使用rpm命令获取完整的软件包详细信息:

# rpm -qi stratisd stratis-cli
Name        : stratisd
Version     : 1.0.2
Release     : 1.el8
Architecture: x86_64
Install Date: Tue 11 Dec 2016 12:35:20 AM EST
Group       : Unspecified
Size        : 4102289
License     : MPLv2.0
Signature   : RSA/SHA256, Mon 08 Oct 2016 03:35:30 PM EDT, Key ID 199e2f91fd431d51
Source RPM  : stratisd-1.0.0-2.el8.src.rpm
Build Date  : Mon 08 Oct 2016 03:09:11 PM EDT
Build Host  : x86-vm-02.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : https://github.com/stratis-storage/stratisd
Summary     : Daemon that manages block devices to create filesystems
Description :
Daemon that manages block devices to create filesystems.
Name        : stratis-cli
Version     : 1.0.3
Release     : 1.el8
Architecture: noarch
Install Date: Tue 11 Dec 2016 12:35:21 AM EST
Group       : Unspecified
Size        : 128565
License     : ASL 2.0
Signature   : RSA/SHA256, Mon 08 Oct 2016 03:25:13 PM EDT, Key ID 199e2f91fd431d51
Source RPM  : stratis-cli-1.0.0-2.el8.src.rpm
Build Date  : Wed 03 Oct 2016 06:16:35 PM EDT
Build Host  : x86-vm-08.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : https://github.com/stratis-storage/stratis-cli
Summary     : Command-line tool for interacting with the Stratis daemon
Description :
stratis provides a command-line interface (CLI) for
interacting with the Stratis daemon, stratisd. stratis
interacts with stratisd via D-Bus.

启动Stratis服务

安装Stratis软件包后,我们需要启动该服务并启用它。

systemctl enable --now stratisd

确认服务状态:

$sudo 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 Tue 2016-12-11 00:41:15 EST; 3s ago
     Docs: man:stratisd(8)
 Main PID: 2988 (stratisd)
    Tasks: 1 (limit: 5056)
   Memory: 868.0K
   CGroup: /system.slice/stratisd.service
           └─2988 /usr/libexec/stratisd --debug

Dec 11 00:41:15 rhel8.localdomain--static systemd[1]: Started A daemon that manages a pool of block devices to create flexible file systems.
Dec 11 00:41:15 rhel8.localdomain--static stratisd[2988]: DEBUG libstratis::stratis::buff_log: BuffLogger: pass_through: true hold time: none
Dec 11 00:41:15 rhel8.localdomain--static stratisd[2988]:  INFO stratisd: Using StratEngine
Dec 11 00:41:15 rhel8.localdomain--static stratisd[2988]: DEBUG stratisd: Engine state:
Dec 11 00:41:15 rhel8.localdomain--static stratisd[2988]: StratEngine {
Dec 11 00:41:15 rhel8.localdomain--static stratisd[2988]:     pools: {},
Dec 11 00:41:15 rhel8.localdomain--static stratisd[2988]:     incomplete_pools: {},
Dec 11 00:41:15 rhel8.localdomain--static stratisd[2988]:     watched_dev_last_event_nrs: {}
Dec 11 00:41:15 rhel8.localdomain--static stratisd[2988]: }
Dec 11 00:41:15 rhel8.localdomain--static stratisd[2988]:  INFO stratisd: DBUS API is now available

创建Stratis池

为此,我们将需要未使用或者安装的块设备,以从中创建Stratis池。每个块设备都应击败至少1 GiB。

在RHEL 8服务器上,我具有以下块设备:

# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   20G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
vdb           252:16   0   10G  0 disk 
vdc           252:32   0   10G  0 disk 
vdd           252:48   0   10G  0 disk 
vde           252:64   0   10G  0 disk

会用单块设备/dev/vdb创建第一个池,用三个块设备/dev/vdc,/dev/vdd,/dev/vdd创建另一个池

这些块设备不应具有分区表,请通过以下命令进行确认:

sudo blkid -p /<devicepath>

如果它具有分区表并且要使用它,请首先清除设备,以便Stratis可以使用它。

sudo wipefs -a /<devicepath>

用一个块设备创建一个池

要使用一个块设备/dev/vdb创建一个池,请使用:

sudo stratis pool create mypool1 /dev/vdb

列出具有以下内容的可用池:

$sudo stratis pool list
Name       Total Physical Size  Total Physical Used
mypool1                 10 GiB               52 MiB

创建具有三个块设备的池

现在让我们用三个块设备/dev/vdc,/dev/vdd,/dev/vdd创建另一个池

sudo stratis pool create mypool2 /dev/vdc /dev/vdd /dev/vde

我们现在应该有两个池:

$sudo stratis pool list
Name       Total Physical Size  Total Physical Used
mypool1                 10 GiB               52 MiB
mypool2                 30 GiB               60 MiB

从输出中,我们可以看到卷的大小是所有块设备原始存储的总和。

从池中创建文件系统

准备好池之后,可以使用以下语法在池上创建Stratis文件系统:

sudo stratis fs create <poolname>  <filesystemname>

请参阅下面的示例。

在mypool1上创建一个文件系统
sudo stratis fs create mypool1 logs
在mypool2上创建文件系统
sudo stratis fs create mypool2  data
sudo stratis fs create mypool2  web

要列出创建的文件系统,请使用:

$sudo stratis fs list
Pool Name  Name  Used     Created            Device                     
mypool1    logs  546 MiB  Dec 11 2016 01:00  /dev/stratis/mypool1/logs  
mypool2    data  546 MiB  Dec 11 2016 01:04  /dev/stratis/mypool2/data

我们还可以将输出限制为指定的池:

$sudo stratis fs list mypool2
Pool Name  Name  Used     Created            Device                     
mypool2    data  546 MiB  Dec 11 2016 01:04  /dev/stratis/mypool2/data  
mypool2    web   546 MiB  Dec 11 2016 01:06  /dev/stratis/mypool2/web

lsblk输出应类似于以下内容:

$sudo lsblk 
NAME                                                                                        MAJ:MIN RM  SIZE RO TYPE    MOUNTPOINT
sr0                                                                                          11:0    1 1024M  0 rom     
vda                                                                                         252:0    0   20G  0 disk    
├─vda1                                                                                      252:1    0    1G  0 part    /boot
└─vda2                                                                                      252:2    0   19G  0 part    
  ├─rhel-root                                                                               253:0    0   17G  0 lvm     /
  └─rhel-swap                                                                               253:1    0    2G  0 lvm     [SWAP]
vdb                                                                                         252:16   0   10G  0 disk    
└─stratis-1-private-68bf465c93eb4aa98ed2264b38d8c42a-physical-originsub                     253:2    0  1.8G  0 stratis 
  ├─stratis-1-private-68bf465c93eb4aa98ed2264b38d8c42a-flex-thinmeta                        253:3    0   16M  0 stratis 
  │ └─stratis-1-private-68bf465c93eb4aa98ed2264b38d8c42a-thinpool-pool                      253:6    0  1.8G  0 stratis 
  │   ├─stratis-1-68bf465c93eb4aa98ed2264b38d8c42a-thin-fs-217bee04c2f14266b496eaada54a0311 253:12   0    1T  0 stratis 
  │   └─stratis-1-68bf465c93eb4aa98ed2264b38d8c42a-thin-fs-1f563ecb6e0c497ab3fc24d5b2e33fe1 253:13   0    1T  0 stratis 
  ├─stratis-1-private-68bf465c93eb4aa98ed2264b38d8c42a-flex-thindata                        253:4    0  1.8G  0 stratis 
  │ └─stratis-1-private-68bf465c93eb4aa98ed2264b38d8c42a-thinpool-pool                      253:6    0  1.8G  0 stratis 
  │   ├─stratis-1-68bf465c93eb4aa98ed2264b38d8c42a-thin-fs-217bee04c2f14266b496eaada54a0311 253:12   0    1T  0 stratis 
  │   └─stratis-1-68bf465c93eb4aa98ed2264b38d8c42a-thin-fs-1f563ecb6e0c497ab3fc24d5b2e33fe1 253:13   0    1T  0 stratis 
  └─stratis-1-private-68bf465c93eb4aa98ed2264b38d8c42a-flex-mdv                             253:5    0   16M  0 stratis 
vdc                                                                                         252:32   0   10G  0 disk    
vdd                                                                                         252:48   0   10G  0 disk    
vde                                                                                         252:64   0   10G  0 disk    
└─stratis-1-private-557de29f274a45d583c62cafbab8edd6-physical-originsub                     253:7    0  816M  0 stratis 
  ├─stratis-1-private-557de29f274a45d583c62cafbab8edd6-flex-thinmeta                        253:8    0   16M  0 stratis 
  │ └─stratis-1-private-557de29f274a45d583c62cafbab8edd6-thinpool-pool                      253:11   0  768M  0 stratis 
  ├─stratis-1-private-557de29f274a45d583c62cafbab8edd6-flex-thindata                        253:9    0  768M  0 stratis 
  │ └─stratis-1-private-557de29f274a45d583c62cafbab8edd6-thinpool-pool                      253:11   0  768M  0 stratis 
  └─stratis-1-private-557de29f274a45d583c62cafbab8edd6-flex-mdv                             253:10   0   16M  0 stratis

挂载Stratis文件系统

要挂载文件系统,请使用Stratis在/dev/stratis /目录中维护的条目。请参阅以下示例:

sudo mkdir /data
sudo mount /dev/stratis/mypool2/data /data

也挂载/dev/stratis/mypool2/web

sudo mount /dev/stratis/mypool2/web /srv

检查电流安装点:

$sudo df -hT | grep stratis

输出为:

/etc/fstab中添加一个持久的挂载点

要配置持久性挂载,请获取文件系统的UUID。

# blkid -p /dev/stratis/mypool2/web
/dev/stratis/mypool2/web: UUID="7d3b49be-51d5-499c-b12b-b5ebe118c416" TYPE="xfs" USAGE="filesystem"

# blkid -p /dev/stratis/mypool2/data
/dev/stratis/mypool2/data: UUID="a6f40f25-140c-43e3-97af-e9e771f08a54" TYPE="xfs" USAGE="filesystem"

复制打印的UUID并将挂载选项添加到/etc/fstab文件中

echo "UUID=7d3b49be-51d5-499c-b12b-b5ebe118c416 /srv xfs defaults 0 0" | sudo tee -a /etc/fstab
echo "UUID=a6f40f25-140c-43e3-97af-e9e771f08a54 /data xfs defaults 0 0" | sudo tee -a /etc/fstab

测试:

sudo umount /data
sudo umount /srv
sudo mount -a

其他Stratis管理命令

以下是我们可以在Stratis池上执行的其他管理任务。

删除Stratis文件系统

在删除Stratis文件系统之前,需要先卸载它

sudo umount /mountpoint

然后销毁它:

sudo stratis filesystem destroy <poolname<  <filesystemname>

sudo umount /srv
sudo stratis filesystem destroy mypool2 web

确认:

# sudo stratis filesystem list mypool2
Pool Name  Name  Used     Created            Device                     
mypool2    data  546 MiB  Dec 11 2016 01:04  /dev/stratis/mypool2/data

将磁盘添加到现有池

要将另一个磁盘添加到池中,请使用:

sudo stratis pool add-data <poolname> /<devicepath>

例:

sudo stratis pool add-data mypool1 /dev/vdf

确认:

$sudo stratis pool list 
Name       Total Physical Size  Total Physical Used
mypool1                 20 GiB             1.12 GiB
mypool2                 30 GiB              606 MiB

创建Stratis快照

Stratis Snapshot是源FS的"可读写"精简配置的时间点副本。

要创建Stratis快照,请使用:

sudo stratis fs snapshot <poolname> <fsname> <snapshotname>

例:

sudo stratis fs snapshot  mypool2  web websnapshot-$(date +%Y-%m-%d)

确认:

$sudo stratis filesystem list mypool2
Pool Name  Name                    Used     Created            Device                                       
mypool2    web                     546 MiB  Dec 11 2016 01:06  /dev/stratis/mypool2/web                     
mypool2    websnapshot-2016-12-11  546 MiB  Dec 11 2016 03:34  /dev/stratis/mypool2/websnapshot-2016-12-11  
mypool2    data                    546 MiB  Dec 11 2016 01:04  /dev/stratis/mypool2/data

我们可以独立于源文件系统安装和操作Snapshot。

sudo  mount /dev/stratis/mypool2/websnapshot-2016-12-11 /mnt
for i in {1..10}; do sudo touch /mnt/$i.txt; done
ls /mnt
ls /srv
sudo umount /mnt

将Stratis文件系统还原到以前的快照

可以将Statis文件系统还原为先前创建的快照。见下文

FirstUnmount并删除原始文件系统:

sudo umount /srv
sudo stratis filesystem destroy mypool2 web

然后以原始文件系统的名称创建快照的副本:

sudo  stratis filesystem snapshot mypool2  websnapshot-2016-12-11 web

挂载快照

sudo mount /dev/stratis/mypool2/web /srv

该文件系统应包含我们添加到快照的数据

$ls /srv/
10.txt     1.txt  3.txt  5.txt  7.txt  9.txt
1..10.txt  2.txt  4.txt  6.txt  8.txt

还要在/etc/fstab上更改UUID以匹配新的文件系统UUID。

# blkid -p /dev/stratis/mypool2/web
/dev/stratis/mypool2/web: UUID="110b737f-2117-4624-8c97-c3def8b2a539" TYPE="xfs" USAGE="filesystem"

# grep srv /etc/fstab 
UUID=110b737f-2117-4624-8c97-c3def8b2a539 /srv xfs defaults 0 0

删除Stratis快照

要删除快照,请卸载快照。

sudo unmount /snapmountpoint

现在销毁快照:

sudo stratis filesystem destroy <poolname> <snapshotname>

例:

sudo stratis filesystem destroy mypool2 websnapshot-2016-12-11

检查:

# sudo stratis filesystem list mypool2
Pool Name  Name  Used     Created            Device                     
mypool2    web   546 MiB  Dec 11 2016 03:58  /dev/stratis/mypool2/web   
mypool2    data  546 MiB  Dec 11 2016 01:04  /dev/stratis/mypool2/data

重命名文件系统

要重命名文件系统,请使用以下语法:

$sudo stratis filesystem rename <poolname> <old-fsname>  <new-fsname>

下面的示例将logs文件系统重命名为备份

sudo stratis filesystem rename mypool1  logs  backups

确认:

$sudo stratis filesystem list mypool1
Pool Name  Name     Used     Created            Device                        
mypool1    backups  546 MiB  Dec 11 2016 01:00  /dev/stratis/mypool1/backups

删除Stratis池

要完全销毁Stratis池,我们需要:卸载池上的所有文件系统销毁文件系统:销毁池

在下面的示例中,我们将销毁" mypool2"

1.列出可用的文件系统

$sudo stratis filesystem list mypool2
Pool Name  Name  Used     Created            Device                     
mypool2    data  546 MiB  Dec 11 2016 01:04  /dev/stratis/mypool2/data

2.卸载文件系统

sudo umount /dev/stratis/mypool2/data

3.销毁文件系统:

sudo stratis filesystem destroy mypool2 data

4.销毁池

sudo stratis pool destroy mypool2

4.确认该池不再存在:

$sudo stratis pool list
Name       Total Physical Size  Total Physical Used
mypool1                 20 GiB             1.12 GiB

6.Remove/etc/fstab行以销毁文件系统

sudo vim /etc/fstab