安装并使用Stratis来管理RHEL 8/CentOS 8上的本地存储
如何在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