1. 程式人生 > 其它 >[Linux]紅帽高階儲存功能 - Stratis與VDO

[Linux]紅帽高階儲存功能 - Stratis與VDO

目錄

Stratis 卷管理檔案系統

介紹

紅帽的 Stratis 是新一代的儲存管理解決方案,稱為卷管理檔案系統。可以通過它建立檔案系統及調整其大小時以動態、透明的方式來管理卷層。

Stratis 以管理物理儲存池的服務形式執行,並透明地為所建立的檔案系統建立和管理卷。由於 Stratis 使用現有的儲存驅動程式和工具,因此 Stratis 也支援當前在 lvm、xfs 和裝置對映器中使用的所有高階儲存功能。Stratis 檔案系統沒有固定大小,也不再預分配未使用的塊空間。

Stratis 使用儲存的元資料來識別所管理的池、卷和檔案系統。因此絕不應該對 Stratis 建立的檔案系統進行手動重新格式化或重新配置;只應使用 Stratis 工具和命令對它們進行管理。手動配置 Stratis 檔案系統可能會導致該元資料丟失,並阻止 Stratis 識別它已建立的檔案系統。您可以使用不同組的塊裝置來建立多個池。在每個池中,您可以建立一個或多個檔案系統。目前每個池最多可以建立 2^24 個檔案系統。

在內部 Stratis 使用 Backstore 子系統來管理塊裝置,並使用 Thinpool 子系統來管理池。Backstore 有一個數據層,負責維護塊裝置磁碟上的元資料,以及檢測和糾正資料損壞。快取層使用高效能塊裝置作為資料層之上的快取。Thinpool 子系統管理與 Stratis 檔案系統關聯的精簡部署卷。該子系統使用 dm-tin裝置對映器驅動程式取代 LVM 進行虛擬卷大小調整和管理。dm-thin 可以建立虛擬大小比較大,但物理大小比較小的卷, 採用 XFS 格式。當物理大小快要滿時,Stratis 會自動將其擴大。

特點

使用Stratis管理分層儲存,有以下的好處:

  • 自動精簡配置(超額分配)
  • 檔案系統快照
  • 基於池的儲存管理
  • 儲存監控

Stratis相關概念:

  • blockdev:塊裝置
  • pool:儲存池
  • filesystem:檔案系統

對應關係:

  • 1個Pool,最多可以建立2²⁴個檔案系統,自動分配大小,當總資料量接近虛擬分配的大小則自動擴容,只要儲存池物理裝置充足,理論上無限擴充套件。

使用

  1. 安裝軟體包
[root@localhost /]# yum install -y stratis-cli stratisd
  1. 啟動服務並設定服務開機自啟
[root@localhost /]# systemctl enable --now stratisd
  1. 新增一塊SATA硬碟,建立儲存池
[root@localhost ~]# stratis pool create pool1 /dev/sdb
  1. 檢視可用池列表
[root@localhost ~]# stratis pool list
Name                  Total Physical   Properties                                   UUID
pool1   5 GiB / 37.63 MiB / 4.96 GiB      ~Ca,~Cr   d45d2be9-e1ca-4700-a03f-365eda2eac34
  1. 再次新增一塊硬碟,新增這個塊裝置到儲存池
[root@localhost ~]# stratis pool add-data pool1 /dev/sdc
  1. 檢視池的塊裝置
[root@localhost ~]# stratis blockdev list
Pool Name   Device Node   Physical Size   Tier
pool1       /dev/sdb              5 GiB   Data
pool1       /dev/sdc              5 GiB   Data

[root@localhost ~]# stratis pool list
Name                   Total Physical   Properties                                   UUID
pool1   10 GiB / 41.63 MiB / 9.96 GiB      ~Ca,~Cr   d45d2be9-e1ca-4700-a03f-365eda2eac34
  1. 為池建立動態、靈活的檔案系統
[root@localhost ~]# stratis filesystem create pool1 fs1

  1. 檢視檔案系統
[root@localhost ~]# stratis filesystem list
Pool Name   Name   Used      Created             Device                   UUID            
pool1       fs1    546 MiB   Apr 13 2022 15:22   /dev/stratis/pool1/fs1   b28ec1f4-21ed-4d89-84f5-d8ca91ef12ce

[root@localhost ~]# blkid /dev/stratis/pool1/fs1
/dev/stratis/pool1/fs1: UUID="b28ec1f4-21ed-4d89-84f5-d8ca91ef12ce" TYPE="xfs"
  1. 掛載檔案系統

這裡的 x-systemd.requires=stratisd.service,是通過 systemd 來確保 stratisd.service(Stratis服務的守護程序)啟動,再掛載這個檔案系統,否則電腦將無法開機。

[root@localhost ~]# vim /etc/fstab
...
UUID=b28ec1f4-21ed-4d89-84f5-d8ca91ef12ce /dir1 xfs     defaults,x-systemd.requires=stratisd.service    0 0

[root@localhost ~]# mount -a

[root@localhost ~]# df -hT
Filesystem                                                                                      Type      Size  Used Avail Use% Mounted on
...
/dev/mapper/stratis-1-d45d2be9e1ca4700a03f365eda2eac34-thin-fs-b28ec1f421ed4d8984f5d8ca91ef12ce xfs       1.0T  7.2G 1017G   1% /dir1
  1. 建立檔案測試
[root@localhost ~]# echo hello world > /dir1/file1
  1. 建立快照
[root@localhost ~]# stratis filesystem snapshot pool1 fs1 snap1

[root@localhost ~]# stratis filesystem list
Pool Name   Name    Used      Created             Device                     UUID         
pool1       fs1     546 MiB   Apr 13 2022 15:22   /dev/stratis/pool1/fs1     b28ec1f4-21ed-4d89-84f5-d8ca91ef12ce
pool1       snap1   546 MiB   Apr 13 2022 15:31   /dev/stratis/pool1/snap1   6dafb135-a4f8-49a8-a757-0c78cb430fb2

[root@localhost ~]# rm -rf /dir1/file1 

[root@localhost ~]# mount /dev/stratis/pool1/snap1 /dir2

[root@localhost ~]# cat /dir2/file1

VDO 虛擬資料優化器

介紹

LVM只能解決容量的問題,但不具備資料壓縮的能力。

VDO(Virtual Data Optimize):虛擬資料優化器,通過壓縮或刪除儲存裝置上的資料來優化空間,VDO層放置在現有塊儲存裝置上層,例如RAID裝置或本地磁碟的頂部。

特點

  • kvdo:用於控制資料壓縮
  • uds:用於重複資料刪除

vdo不僅能對資料進行壓縮,還能對重複的資料進行優化。

Linux下依賴vdo.service服務,否則是不能使用vdo的

使用

  1. 安裝軟體包(預設已安裝)
[root@localhost ~]# yum install -y vdo
  1. 建立VDO卷
[root@localhost ~]# vdo create --name=vdo1 --device=/dev/sdb --vdoLogicalSize=10G
Creating VDO vdo1
      The VDO volume can address 6 GB in 3 data slabs, each 2 GB.
      It can grow to address at most 16 TB of physical storage in 8192 slabs.
      If a larger maximum size might be needed, use bigger slabs.
Starting VDO vdo1
Starting compression on VDO vdo1
VDO instance 0 volume is ready at /dev/mapper/vdo1
  1. 檢視VDO卷的屬性與狀態
[root@localhost ~]# vdo status --name=vdo1
VDO status:
  Date: '2022-04-13 16:34:12+08:00'
  Node: localhost.localdomain
Kernel module:
  Loaded: true
  Name: kvdo
  Version information:
    kvdo version: 6.2.2.117
Configuration:
  File: /etc/vdoconf.yml
  Last modified: '2022-04-13 16:33:40'
VDOs:
  vdo1:
    Acknowledgement threads: 1
    Activate: enabled
    Bio rotation interval: 64
    Bio submission threads: 4
    Block map cache size: 128M
    Block map period: 16380
    Block size: 4096
    CPU-work threads: 2
    Compression: enabled
    Configured write policy: auto
    Deduplication: enabled
    Device mapper status: 0 20971520 vdo /dev/sdb normal - online online 1049638 2621440
    Emulate 512 byte: disabled
    Hash zone threads: 1
    Index checkpoint frequency: 0
    Index memory setting: 0.25
    Index parallel factor: 0
    Index sparse: disabled
    Index status: online
    Logical size: 10G
    Logical threads: 1
    Max discard size: 4K
    Physical size: 10G
    Physical threads: 1
    Slab size: 2G
    Storage device: /dev/sdb
    UUID: VDO-59a6cb34-0ba6-4e3d-81b8-967710ca668f
    VDO statistics: not available
  1. 顯示VDO卷列表
[root@localhost ~]# vdo list
vdo1
  1. 停止和啟動VDO卷
[root@localhost ~]# vdo stop -n vdo1
Stopping VDO vdo1

[root@localhost ~]# vdo start -n vdo1
Starting VDO vdo1
Starting compression on VDO vdo1
VDO instance 1 volume is ready at /dev/mapper/vdo1

  1. 檢視VDO捲上是否啟用了壓縮(Compression)和重複資料(Deduplication)刪除功能
[root@localhost ~]# vdo status --name=vdo1 | grep Dedu
    Deduplication: enabled


[root@localhost ~]# vdo status --name=vdo1 | grep Com
    Compression: enabled
  1. 格式化VDO卷
[root@localhost ~]# mkfs.xfs -K /dev/mapper/vdo1
meta-data=/dev/mapper/vdo1       isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=2621440, 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
  1. 檢查裝置事件處理是否完成
[root@localhost ~]# udevadm settle
  1. 建立掛載點,設定開機自動掛載
[root@localhost ~]# mkdir /mnt/vdo1

[root@localhost ~]# blkid | grep vdo1
/dev/mapper/vdo1: UUID="b4373f24-2c29-4893-bce3-fb608025107d" TYPE="xfs"

[root@localhost ~]# vim /etc/fstab
...
UUID=b4373f24-2c29-4893-bce3-fb608025107d /mnt/vdo1 xfs defaults,x-systemd.requires=vdo.service 0 0

[root@localhost ~]# mount /mnt/vdo1/

  1. 檢視卷初始資訊
[root@localhost /]# vdostats --human-readable
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo1         10.0G      4.0G      6.0G  40%           N/A
  1. 準備一個大檔案用於測試
[root@localhost /]# dd if=/dev/urandom of=/root/testfile1 bs=1M count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB, 300 MiB) copied, 12.8609 s, 24.5 MB/s

[root@localhost /]# ls -lh /root/testfile1 
-rw-r--r--. 1 root root 300M Apr 13 17:06 /root/testfile1
  1. 把檔案複製到VDO卷掛載目錄
[root@localhost /]# cp /root/testfile1 /mnt/vdo1/testfile1.1
[root@localhost /]# vdostats --human-readable
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo1         10.0G      4.3G      5.7G  42%            3%
  1. 重複多次操作觀察Used與Saving%的變化
[root@localhost /]# cp /root/testfile1 /mnt/vdo1/testfile1.2
[root@localhost /]# vdostats --human-readable
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo1         10.0G      4.3G      5.7G  43%           48%

[root@localhost /]# cp /root/testfile1 /mnt/vdo1/testfile1.3
[root@localhost /]# vdostats --human-readable
Device                    Size      Used Available Use% Space saving%
/dev/mapper/vdo1         10.0G      4.3G      5.7G  43%           65%