> 文章列表 > linux高级存储功能

linux高级存储功能

linux高级存储功能

高级存储功能

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)实现过程

  1. 消除0块
  2. 去重
  3. 压缩

 (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 挂载点目录或存储设备名

小黑软件网