Stratis 是一个卷管理文件系统volume-managing filesystem(VMF),类似于 ZFS 和 Btrfs。它使用了存储“池”的核心思想,该思想被各种 VMF 和 形如 LVM 的独立卷管理器采用。使用一个或多个硬盘(或分区)创建存储池,然后在存储池中创建卷volume。与使用 fdisk 或 GParted 执行的传统硬盘分区不同,存储池中的卷分布无需用户指定。
VMF 更进一步与文件系统层结合起来。用户无需在卷上部署选取的文件系统,因为文件系统和卷已经被合并在一起,成为一个概念上的文件树(ZFS 称之为数据集dataset,Brtfs 称之为子卷subvolume,Stratis 称之为文件系统),文件数据位于存储池中,但文件大小仅受存储池整体容量限制。
换一个角度来看:正如文件系统对其中单个文件的真实存储块的实际位置做了一层抽象abstract,而 VMF 对存储池中单个文件系统的真实存储块的实际位置做了一层抽象。
基于存储池,我们可以启用其它有用的特性。特性中的一部分理所当然地来自典型的 VMF 实现implementation,例如文件系统快照,毕竟存储池中的多个文件系统可以共享物理数据块physical data block;冗余redundancy,分层,完整性integrity等其它特性也很符合逻辑,因为存储池是操作系统中管理所有文件系统上述特性的重要场所。
上述结果表明,相比独立的卷管理器和文件系统层,VMF 的搭建和管理更简单,启用高级存储特性也更容易。
Stratis讲磁盘设备放置于一个精简配置的共享池中,stratis文件系统没有固定大小,也不会预分配未使用的块空间。一个共享池中可以创建多个文件系统,文件系统类型为xfs。因为在上文中提到,stratis基于xfs,默认为xfs系统。
这幅图中我们可以看到,几个硬盘转变为一个池,池化,而文件系统大小从池中来获取。
那么Stratis的优点是什么呢?
stratis注重文件系统的精简分配,可以实现我们用一个文件系统的时候不用指定任何大小。
没有限制,精简分配。
例如如图,我们把几块盘做成一个池,称之为池化。
最大就是池的大小,也就是几块硬盘合起来之后的大小,只需要将池子创建出来,文件系统不需要指定大小,需要多大的空间,直接从池子里面取。
接下来,我们开始管理精简配置的文件系统:
首先我们要先安装软件包
yum install -y stratis-cli stratisd
激活服务
systemctl enable --now stratisd
这句命令的意思是:开机自启动stratis服务并且立即生效。
[root@guochanghe ~]# stratis pool create pool01 /dev/sdc #创建池,先以一块盘为例子。
[root@guochanghe ~]# stratis pool list
Name Total Physical Size Total Physical Used #这两句命令的意思都是查看精简池的信息,但是因为是一块硬盘,所以显示的不是很明显,下面实验会看出来差别。
pool01 20 GiB 52 MiB
[root@guochanghe ~]# stratis blockdev list pool01
Pool Name Device Node Physical Size State Tier
pool01 /dev/sdc 20 GiB In-use Data
[root@guochanghe ~]# stratis pool add-data pool01 /dev/sdd #往精简池里面添加一块盘,增加池的容量。
[root@guochanghe ~]# stratis pool add-data pool01 /dev/sdd
[root@guochanghe ~]# stratis pool list
Name Total Physical Size Total Physical Used
pool01 40 GiB 72 MiB
[root@guochanghe ~]# stratis blockdev list pool01
Pool Name Device Node Physical Size State Tier
pool01 /dev/sdc 20 GiB In-use Data
pool01 /dev/sdd 20 GiB In-use Data
#这个时候就能看到,list 是查看硬盘合起来后的精简池信息,而stratis blockdev list pool01 是查看精简池中的硬盘。
**
**
[root@guochanghe ~]# stratis filesystem create pool01 fs01 #创建文件系统,用pool01这个池来创建
[root@guochanghe ~]# stratis filesystem list
Pool Name Name Used Created Device UUID
pool01 fs01 546 MiB Jun 07 2020 01:30 /stratis/pool01/fs01 642c927b1ce5441986145f987c7cc79e
#可以发现,这个文件系统的大小,位置,uuid都已经自动创建成功,与lvm相比节省了很多步骤。可以直接进行挂载,不需要再进行格式化,因为stratis基于xfs,所以文件系统默认为xfs
[root@guochanghe ~]# mount /stratis/pool01/fs01 /file
[root@guochanghe ~]# df -TH
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 3.0G 0 3.0G 0% /dev
tmpfs tmpfs 3.0G 0 3.0G 0% /dev/shm
tmpfs tmpfs 3.0G 11M 3.0G 1% /run
tmpfs tmpfs 3.0G 0 3.0G 0% /sys/fs/cgroup
/dev/sda2 xfs 11G 4.5G 6.3G 42% /
/dev/sda1 xfs 1.1G 158M 907M 15% /boot
/dev/sda5 xfs 5.4G 81M 5.3G 2% /home
tmpfs tmpfs 586M 17k 586M 1% /run/user/42
tmpfs tmpfs 586M 4.1k 586M 1% /run/user/0
/dev/mapper/stratis-1-a60646840ead47ac88d94c9c2d5ef06e-thin-fs-642c927b1ce5441986145f987c7cc79e xfs 1.1T 7.8G 1.1T 1% /file #可以看到,文件系统为xfs,这个1.1T是假的空间大小,真实空间大小就是这个池的大小。不要相信这个1.1T。不可能那么大的。
在创建快照之前要先把挂载给卸载掉
[root@guochanghe ~]# stratis filesystem snapshot pool01 fs01 snap01 #创建快照
[root@guochanghe ~]# stratis filesystem list pool01
Pool Name Name Used Created Device UUID
pool01 fs01 546 MiB Jun 07 2020 01:30 /stratis/pool01/fs01 642c927b1ce5441986145f987c7cc79e
pool01 snap01 546 MiB Jun 07 2020 01:37 /stratis/pool01/snap01 c21c80a3ea8148b39edb0d612abd6218
#可以看到 这个快照和源文件有着同等的大小,甚至有着自己的路径。但是,stratis和lvm快照的最大区别就是,lvm的快照和源文件有一定的关系,而stratis的快照做好之后,和之前的源文件就没有任何关系了。
接下来进行恢复快照
[root@guochanghe ~]# stratis filesystem destroy pool01 fs01 #删除原文件系统
[root@guochanghe ~]# stratis filesystem list pool01 #查看,可以发现fs01没了
Pool Name Name Used Created Device UUID
pool01 snap01 546 MiB Jun 07 2020 01:37 /stratis/pool01/snap01 c21c80a3ea8148b39edb0d612abd6218
[root@guochanghe ~]# stratis filesystem snapshot pool01 snap01 fs01 #根据快照再创建出原文件系统
[root@guochanghe ~]# stratis filesystem list pool01 #查看文件系统的信息。发现fs01回来了而且与原来没差别
Pool Name Name Used Created Device UUID
pool01 snap01 546 MiB Jun 07 2020 01:37 /stratis/pool01/snap01 c21c80a3ea8148b39edb0d612abd6218
pool01 fs01 546 MiB Jun 07 2020 01:43 /stratis/pool01/fs01 b88957fb96ac4265b12dd893630635ec
至此完成了恢复快照
到这里,Stratis就说完了,其实这个知识很简单,简单粗暴,容易理解。
接下来是Vdo的讲解:
Vdo高级存储功能:
红帽企业Linux8使用vdo功能,可以优化块设备上数据空间占用问题,它可以减少块设备上的磁盘使用空间,同时最大限度减少数据重复,从而节省磁盘空间。
Vdo包含两个模块:Kvdo用于控制数据压缩,uds用于重复数据的删除。
vdo层位于现在块设备(RAID或者本地磁盘)之上,存储层(如LVM和文件系统)位于vdo之上。
下图显示了KVM虚拟机架构中,vdo所在的位置。
对于Vdo的重删压缩,是什么一个意思呢?
比如 挂载到/data上,那么这个目录上如果有重复的数据,那么vdo就可以对这个目录上重复的数据进行删除重复和压缩的。这个功能是默认的
关于vdo的特性说明:
1、利用vdo创建的逻辑设备成为ydo卷,vdo卷与磁盘类似,可以将这些卷格式化为所需要的文件系统
类型。此外,还可以将vdo卷用作LVM物理卷。
2、在创建ydo卷时, 可以指定块设备,以及vdo向用户显示的逻辑设备的名称。也可以指定vdo卷的逻
辑大小,vdo卷的逻辑大小可以大于实际块设备的物理大小。
3、如果未指定逻辑大小, 则ydo会将实际物理大小视为卷的逻辑大小,这种方式有利于提高性能,但是
会降低存储空间的使用效率,应视情况而定。
P. 由于ydo卷采用了精简配置,因此用户只能看到正在使用的逻辑空间,而无法了解实际可用的物理空
间。
4、vdo卷的逻辑大小超过实际物理大小, 应使用vdostatus -verbose命令查看实际使用情况。
首先安装vdo的软件包
yum install -y vdo kmod-kvdo #默认已安装
创建vdo卷
[root@guochanghe ~]# vdo create --name=vdo0 --device=/dev/sdc --vdoLogicalSize=15G #创建一个15G的vdo卷
Creating VDO vdo0
Starting VDO vdo0
Starting compression on VDO vdo0
VDO instance 0 volume is ready at /dev/mapper/vdo0
[root@guochanghe ~]# vdo list #查看vdo卷列表
vdo0
[root@guochanghe ~]# vdostats --human-readable #用vdostatus来查看卷的状态
Device Size Used Available Use% Space saving%
/dev/mapper/vdo0 20.0G 4.0G 16.0G 20% 0%
[root@guochanghe ~]# mkfs.xfs /dev/mapper/vdo0 #将vdo格式化为xfs文件系统
meta-data=/dev/mapper/vdo0 isize=512 agcount=4, agsize=983040 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=3932160, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@guochanghe ~]# mount /dev/mapper/vdo0 /file01/ #挂载在file01目录上
[root@guochanghe ~]# df -TH /file01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vdo0 xfs 17G 147M 16G 1% /file01 #这个是逻辑上的空间
现在进行重复数据删除和压缩的功能
[root@guochanghe file01]# ll rhel-server-6.0-i386-dvd.iso
-rw-r--r--. 1 root root 2931056640 6月 7 02:17 rhel-server-6.0-i386-dvd.iso
我们先上传一个文件用来测试
[root@guochanghe ~]# vdostats --human-readable #上传第一个文件后的物理空间
Device Size Used Available Use% Space saving%
/dev/mapper/vdo0 20.0G 6.7G 13.3G 33% 2%
[root@guochanghe ~]# df -TH /file01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vdo0 xfs 17G 3.1G 14G 20% /file01
[root@guochanghe file01]# mv rhel-server-6.0-i386-dvd.iso rhel.iso #改个名字,再进行上传一次相等的数据。
[root@guochanghe ~]# df -TH /file01/ #可以看到,两个文件都占用了逻辑空间。
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vdo0 xfs 17G 6.1G 11G 38% /file01
[root@guochanghe ~]# !vd
vdostats --human-readable #但是可以看到,物理空间一直都没有动。
Device Size Used Available Use% Space saving%
/dev/mapper/vdo0 20.0G 6.7G 13.3G 33% 51%
vdo 的重复删除,其实有点类似于百度网盘,传进来之后进行计算,如果重复了就删除。
vdo的永久挂载,其实和普通的挂载不一样。具体怎么不一样,实战一下就知道了。
[root@guochanghe ~]# vim /etc/fstab
/dev/mapper/vdo0 /file01 xfs defaults 0 0 我们先以普通的方式进行挂载,看看会出现什么后果。
[root@guochanghe ~]# mount -a
[root@guochanghe ~]# df -Th /file01/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vdo0 xfs 15G 5.6G 9.4G 38% /file01
到这为止,我们可以发现,可以挂上,但是我们设置的是永久挂载,下一次开机呢?能不能挂上呢?试一下。
[root@guochanghe ~]# reboot
可以看到如图,是这么一个界面。紧急模式的界面。
输入密码
进入fstab里面开始修复/dev/mapper/vdo0
在defaults后面加上 ,x-systemd.requires=vdo.service
这是什么意思呢?
挂载选项 ,x-systemd.requires=vdo.service 意思为可延迟挂在文件系统,直到vdo.service启动为止。
然后在前面加上注释。
mount -a
reboot
修复成功
进入/etc/fstab里面取消掉注释,再进行重启一次测试。
成功
到这里,关于Stratis和Vdo高级存储的讲解和实战演练就到此结束了。
-----来自河南经贸19级计算机工程学院的一名普通学生,通过博客来分享自己日常收获到的新知识,会持续坚持,感谢大家的阅读,希望可以帮到你!
转载的希望可以放上本文章的链接,谢谢!