高级存储功能
1、Stratis管理分层存储
通过Stratis,便捷的使用精简配置(thin provisioning),快照(snapshots)和基于池(pool-based)的管理和监控的等高级存储功能。
(1)简介
Stratis 是一个卷管理文件系统volume-managing filesystem(VMF),类似于 ZFS 和 Btrfs。它使用了存储“池”的核心思想,该思想被各种 VMF 和 形如 LVM 的独立卷管理器采用。
(2)核心思想
Stratis的核心思想是提供一种简单、易用、可靠和灵活的方式来管理Linux系统上的存储。它提供了一个现代化的、灵活的层次结构,可以支持不同类型的存储设备,包括传统硬盘驱动器、闪存驱动器和云存储等。Stratis设计之初就考虑到了对系统管理员的友好性,它采用了类似于传统存储管理工具(例如LVM和MD)的命令行界面,同时也提供了一个可选的图形用户界面(GUI)来简化管理过程。Stratis的设计重点在于简单性、易用性和灵活性,同时也考虑到了数据完整性和安全性等方面的问题。
(3)使用
使用一个或多个硬盘(或分区)创建存储池,然后在存储池中创建卷volume。
流程及案例:
1.将物理硬盘加入存储池中
2.文件系统是通过<精简配置>构建在池中
3.文件系统构建在池中,那么文件系统的空间有多大?
<1> 通过精简方式构建
<2> 文件系统大小:数据大小即为使用大小
<3> 意义:动态过程,随着数据量的写入,文件系统使用量随之增大。不像使用LV(LV大小固定,空间不够人为扩容),扩容过程是动态的,写入多少数据就占多少空间。
例:
你的pool是100G,你在pool之上构建的文件系统最开始很小<1M>,当你往文件系统写数据的时候,动态的从pool分配空间。文件系统扩容不需要人为的干预了。
文件系统到100G时,可以在pool中+硬盘
4.一个池可以创建多个文件系统
5.stratis是通过元数据来管理,不用人为分区和格式化
6.对于stratis而言有stratic-cli,还有对应的服务stratisd.service
(stratis-cli通过D-BUS和stratisd.service进行通信)
(4)案例
- 新增两块5G硬盘
- 前置配置yum源
[root@localhost ~]# lsblk --- 查看硬盘识别情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
[root@localhost yum.repos.d]# more redhat.repo
[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS/
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///mnt/AppStream/
gpgcheck=0
[root@localhost yum.repos.d]# df -h --- 查看挂载情况
[root@localhost yum.repos.d]# vim + /etc/fstab --- 实现永久挂载
/dev/sr0 /mnt iso9660 defaults 0 0
[root@localhost yum.repos.d]# mount -a --- 读取文件/etc/fstab中没有挂载的,然后实现挂载
[root@localhost yum.repos.d]# df -h
/dev/sr0 6.7G 6.7G 0 100% /mnt --- 挂载成功
- 安装软件包以及启动服务
[root@localhost ~]# yum install stratisd stratis-cli --- 下载
[root@localhost ~]# systemctl enable --now stratisd --- 设置下次开机启动和当前启动
[root@localhost ~]# systemctl is-enabled stratisd --- 查看下次开机启动情况
enabled
[root@localhost ~]# systemctl is-active stratisd --- 查看当前启动情况
active
- 创建池以及在池中创建文件系统
[root@localhost ~]# stratis pool create redhat /dev/sdb --- 创建池,名为redhat,将/dev/sdb硬盘划分进去
[root@localhost ~]# stratis pool list --- 查看创建池情况
Name Total Physical Size Total Physical Used
redhat 5 GiB 52 MiB
[root@localhost ~]# stratis filesystem list redhat --- 列出redhat池的文件系统
[root@localhost ~]# stratis filesystem create redhat rhce --- 在redhat池中创建名为rhce的文件系统
[root@localhost ~]# stratis filesystem list redhat --- 查看创建文件系统情况
Pool Name Name Used Created Device UUID
redhat rhce 546 MiB Apr 11 2023 09:52 /stratis/redhat/rhce d6d30e4fb6f04754ab1107c556e9e42b
[root@localhost ~]# mkdir /media/stratis --- 创建挂载点
[root@localhost ~]# mount /stratis/redhat/rhce /media/stratis/ --- 挂载文件系统,临时挂载
[root@localhost ~]# df -h --- 查看挂载情况
/dev/mapper/stratis-1-d2e05a343b9f4765ba5af5d253aed144-thin-fs-d6d30e4fb6f04754ab1107c556e9e42b 1.0T 7.2G 1017G 1% /media/stratis --- 挂载成功
[root@localhost ~]# echo hello > /media/stratis/hello.txt --- 在挂载文件中创建hello.txt文件,将hello写入
- 扩容
[root@localhost ~]# stratis pool add-data redhat /dev/sdc --- 对redhat池扩容,将/dev/sdc硬盘添加
[root@localhost ~]# stratis pool list
Name Total Physical Size Total Physical Used
redhat 10 GiB 602 MiB
- 创建快照
[root@localhost ~]# stratis filesystem snapshot redhat rhce snap01 --- 在redhat池中rhce文件系统中创建快照
[root@localhost ~]# mount /stratis/redhat/snap01 /media/snap/ --- 将快照挂载到/media/snap文件下
[root@localhost ~]# ls /media/snap/ --- 查看快照下的文件
hello.txt
[root@localhost ~]# ls /media/stratis/ --- 查看挂载池的文件
hello.txt
- 一个池中可以创建多个文件系统
[root@localhost ~]# stratis filesystem create redhat rhcsa --- 在redhat池中创建名为rhcsa的文件系统
[root@localhost ~]# stratis filesystem list redhat --- 查看redhat池中的文件系统
Pool Name Name Used Created Device UUID
redhat rhce 546 MiB Apr 11 2023 09:52 /stratis/redhat/rhce d6d30e4fb6f04754ab1107c556e9e42b
redhat snap01 546 MiB Apr 11 2023 10:06 /stratis/redhat/snap01 04fafc9f9dce4674a43c6ac0e5922d0f
redhat rhcsa 546 MiB Apr 11 2023 10:13 /stratis/redhat/rhcsa 54e5118e7f394778858657a5872cac2e
- 删除文件系统
[root@localhost ~]# stratis filesystem destroy redhat rhcsa --- 删除未经操作的文件系统
[root@localhost ~]# stratis filesystem list redhat
Pool Name Name Used Created Device UUID
redhat rhce 546 MiB Apr 11 2023 09:52 /stratis/redhat/rhce d6d30e4fb6f04754ab1107c556e9e42b
redhat snap01 546 MiB Apr 11 2023 10:06 /stratis/redhat/snap01 04fafc9f9dce4674a43c6ac0e5922d0f
- 删除已挂载快照或文件系统时,操作之前应先卸除挂载
[root@localhost ~]# umount /media/snap --- 卸除挂载快照
[root@localhost ~]# umount /media/stratis --- 卸除挂载的文件系统
[root@localhost ~]# stratis filesystem destroy redhat snap01 --- 删除快照
[root@localhost ~]# stratis filesystem destroy redhat rhce --- 删除文件系统
- 删除池
[root@localhost ~]# stratis pool destroy redhat
2、VDO压缩存储和删除重复数据
VDO(Virtual Optimize --- 虚拟数据优化):通过压缩或删除设备上的数据来优化空间
(压缩和去重是为了更好的提供存储空间的利用率)
VDO(Virtual Data Optimize)是RHEL8/Centos8上新推出的一个存储相关技术(最早在7.5测试版中开始测试),是Redhat收购的Permabit公司的技术。
<1> 作用:VDO的主要作用是节省磁盘空间,比如让1T的磁盘能装下1.5T的数据,从而降低数据中心的成本。
<2> 实现:关键原理主要是重删和压缩,重删就是硬盘里拷贝来相同的数据,以前要占多份空间,现在只需要1份空间就可以了。类似我们在百度网盘中上传一个大型软件安装包,能实现秒传,其实是之前就有,所以无需再传一遍,也无需再占百度一份空间。另一方面是数据压缩,类似于压缩软件的算法,也可以更加节省磁盘空间。
(1)加载内核模块
- kvdo:压缩数据
- uds:优化重复数据
(2)位置
<1> vdo设备位于现有的存储的顶部:比如块设备,LV(逻辑卷)
<2> 不能在stratis管理分层存储上使用VDO
<3> VDO一般使用在重复数据率高的场景下。比如:虚拟化或云平台;KVM
(3)实现过程
- 消除0块
- 去重
- 压缩
(4)案例
- 安装komd-kvdo vdo 软件包以及创建vdo卷
[root@localhost ~]# yum install vdo kmod-kvdo
[root@localhost ~]# vdo create --name=vdo1 --device=/dev/sdb --vdoLogicalSize=5G --- 创建vdo卷
Creating VDO vdo1 --- 创建vdo1
Starting VDO vdo1
Starting compression on VDO vdo1 --- 启动vdo1
VDO instance 0 volume is ready at /dev/mapper/vdo1 --- 识别的设备名为/dev/mapper/vdo1
[root@localhost ~]# vdo list --- 查看vdo
vdo1
[root@localhost ~]# vdo status -n vdo1 --- 详细查看
- 实现挂载
[root@localhost ~]# mkfs.xfs /dev/mapper/vdo1 --- 格式化vdo1
[root@localhost ~]# mount /dev/mapper/vdo1 /data --- 挂载
[root@localhost ~]# df -h --- 查看挂载情况
/dev/mapper/vdo1 5.0G 69M 5.0G 2% /data
[root@localhost ~]# vdostats --human-readable --- 查看卷的初始统计状态和信息
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 5.0G 3.0G 2.0G 60% 98%
- 检测去重
[root@localhost ~]# vdo status -n=vdo1 | grep Deduplication --- 查看去重功能是否开启
Deduplication: enabled
root@localhost ~]# cp /mnt/images/install.img /data --- 拷贝文件到挂载目录下
[root@localhost ~]# du -sh /mnt/images/install.img --- 查看拷贝文件大小
448M /mnt/images/install.img
[root@localhost ~]# vdostats --human-readable --- 查看卷的状态和信息
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 5.0G 3.4G 1.6G 68% 2%
[root@localhost ~]# cp /mnt/images/install.img /data/install.img1 --- 再次拷贝文件到挂载目录下
[root@localhost ~]# vdostats --human-readable --- 查看是否去重
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 5.0G 3.4G 1.6G 68% 50% --- 占用内存无变化,去重成功
- 总结:复制相同文件,文件存在,但是空间不会发生变化
[root@localhost ~]# ll /data
total 917032
-r--r--r--. 1 root root 469520384 Apr 11 11:14 install.img
-r--r--r--. 1 root root 469520384 Apr 11 11:15 install.img1
[root@localhost ~]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/vdo1 5.0G 3.4G 1.6G 68% 50%
- 删除vdo(应先卸除挂载)
[root@localhost ~]# umount /data
[root@localhost ~]# vdo remove -n=vdo1
Removing VDO vdo1
Stopping VDO vdo1
- 开机自动挂载
PS:vdo开机自动挂载,需要添加参数,以下其中一种方法即可
defaults,_netdev --- 网络设备启动好后再挂载
defaults,x-systemd.requires=vdo.service --- vdo.service服务启动后再执行挂载
[root@localhost ~]# vim /etc/fstab
/dev/sr0 /mnt iso9660 defaults 0 0
/dev/mapper/vdo1 /data xfs defaults._netdev 0 0
附:3、存储相关命令
(1)du:显示文件或目录所占用的磁盘空间
参数 | 含义 |
-a | 列出所有文件和目录容量,默认仅统计目录下面的文件量而已 |
-h | 以人们易读懂的容量格式(G/M)显示 |
-s | 列出总量,不列出每个个别目录占用的容量 |
-S | 不包括子目录下的总计,与 -s 不同 |
-k | 以KB为容量显示 |
-m | 以MB为容量显示 |
(2)df:列出文件系统的整体磁盘使用量
参数 | 含义 |
-a | 列出所有文件系统,包括系统特有的/proc文件系统 |
-k | 以KB容量显示各文件系统 |
-m | 以MB容量显示各文件系统 |
-h | 以人们较易阅读的GB,MB,KB等格式自行显示 |
-H | 以M=1000K替代M=1024K的进位方式 |
-T | 连同该分区的文件系统名称(例如ext3)也列出 |
-i | 不用硬盘容量,而以 inode 的数量来显示 |
(3)挂载和卸载
- 挂载命令:mount [-t 文件系统类型] 设备名 挂载点目录
- 卸载磁盘分区:umount 挂载点目录或存储设备名