67.10. 启用缓存来提高逻辑卷性能
您可以在 LVM 逻辑卷中添加缓存以提高性能。LVM 然后使用快速设备(如 SSD)将 I/O 操作缓存到逻辑卷中。
下面的过程会从快速设备创建一个特殊的 LV,并将这个特殊 LV 附加到原始 LV,以便提高性能。
67.10.1. LVM 中的缓存方法
LVM 提供以下缓存类型。每种模式适合逻辑卷中的不同类型的 I/O 模式。
dm-cache
这个方法可通过在更快的卷上缓存数据来加快频繁使用数据的访问速度。这个方法会缓存读写操作。
dm-cache
方法创建类型为缓存
的逻辑卷。dm-writecache
这个方法只缓存写操作。使用快速卷进行写入操作,然后将其迁移到后台较慢的磁盘中。快速卷通常是一个 SSD 或持久内存(PMEM)磁盘。
dm-writecache
方法创建类型为writecache
的逻辑卷。
其他资源
-
系统中
lvmcache (7)
手册页
67.10.2. LVM 缓存组件
LVM 支持向 LVM 逻辑卷添加缓存的支持。LVM 缓存使用以下 LVM 逻辑卷类型:
- 主 LV
- 较大、较慢且原始的卷。
- 缓存池 LV
-
可用于缓存主 LV 数据的复合 LV。它有两个子 LV:存储缓存数据的数据和管理缓存数据的元数据。您可以为数据和元数据配置特定的磁盘。您只能使用具有
dm-cache
的缓存池。 - Cachevol LV
-
可用于缓存主 LV 数据的线性 LV。您无法为数据和元数据配置单独的磁盘。
cachevol
只能与dm-cache
或dm-writecache
一起使用。
所有这些关联的 LV 必须位于同一卷组中。
您可以将主逻辑卷(LV)与更快速、通常是较小的保存缓存数据的 LV 相结合。快速 LV 是从快速块设备(如 SSD 驱动器)创建的。当您为逻辑卷启用缓存时,LVM 会重新命名并隐藏原始卷,并显示由原始逻辑卷组成的新逻辑卷。新逻辑卷的组成取决于缓存方法以及您是否使用 cachevol
或 cachepool
选项。
cachevol
和 cachepool
选项会公开对缓存组件的放置不同级别的控制:
-
使用
cachevol
选项,快速设备会同时存储数据块的缓存副本以及用于管理缓存的元数据。 使用
cachepool
选项,单独的设备可以存储数据块的缓存副本以及用于管理缓存的元数据。dm-writecache
方法与cachepool
不兼容。
在所有配置中,LVM 会公开一个生成的设备,它会将所有缓存组件组合在一起。得到的设备的名称与原来的较慢的逻辑卷的名称相同。
其它资源
-
系统中
lvmcache (7)
手册页 - 创建并管理精简配置的卷(精简卷)
67.10.3. 为逻辑卷启用 dm-cache 缓存
这个过程使用 dm-cache
方法启用逻辑卷中常用数据缓存。
先决条件
-
您希望使用
dm-cache
加快的逻辑卷存在于系统中。 - 包含较慢逻辑卷的卷组还包含在快速块设备中未使用的物理卷。
流程
在快速设备中创建
cachevol
卷:# lvcreate --size cachevol-size --name <fastvol> <vg> </dev/fast-pv>
替换以下值:
cachevol-size
-
cachevol
卷的大小,如5G
fastvol
-
cachevol
卷的名称 vg
- 卷组名称
/dev/fast-pv
快速块设备的路径,如
/dev/sdf
例 67.3. 创建一个
cachevol
卷# lvcreate --size 5G --name fastvol vg /dev/sdf Logical volume "fastvol" created.
将
cachevol
卷附加到主逻辑卷以开始缓存:# lvconvert --type cache --cachevol <fastvol> <vg/main-lv>
替换以下值:
fastvol
-
cachevol
卷的名称 vg
- 卷组名称
main-lv
较慢的逻辑卷名称
例 67.4. 将
cachevol
卷附加到主 LV# lvconvert --type cache --cachevol fastvol vg/main-lv Erase all existing data on vg/fastvol? [y/n]: y Logical volume vg/main-lv is now cached.
验证
验证新创建的逻辑卷是否启用了
dm-cache
:# lvs --all --options +devices <vg> LV Pool Type Devices main-lv [fastvol_cvol] cache main-lv_corig(0) [fastvol_cvol] linear /dev/fast-pv [main-lv_corig] linear /dev/slow-pv
其他资源
-
系统中
lvmcache (7)
手册页
67.10.4. 使用 cachepool 为逻辑卷启用 dm-cache 缓存
这个过程可让您单独创建缓存数据和缓存元数据逻辑卷,然后将卷合并到缓存池中。
先决条件
-
您希望使用
dm-cache
加快的逻辑卷存在于系统中。 - 包含较慢逻辑卷的卷组还包含在快速块设备中未使用的物理卷。
流程
在快速设备中创建
cachepool
卷:# lvcreate --type cache-pool --size <cachepool-size> --name <fastpool> <vg /dev/fast>
替换以下值:
cachepool-size
-
cachepool
的大小,如5G
fastpool
-
cachepool
卷的名称 vg
- 卷组名称
/dev/fast
到快速块设备的路径,如
/dev/sdf1
注意您可以使用
--poolmetadata
选项指定创建 cache-pool 时池元数据的位置。例 67.5. 创建一个
cachepool
卷# lvcreate --type cache-pool --size 5G --name fastpool vg /dev/sde Logical volume "fastpool" created.
将
cachepool
附加到主逻辑卷中开始缓存:# lvconvert --type cache --cachepool <fastpool> <vg/main>
替换以下值:
fastpool
-
cachepool
卷的名称 vg
- 卷组名称
main
较慢的逻辑卷名称
例 67.6. 将
cachepool
附加到主 LV# lvconvert --type cache --cachepool fastpool vg/main Do you want wipe existing metadata of cache pool vg/fastpool? [y/n]: y Logical volume vg/main is now cached.
验证
检查具有
cache-pool
类型的新创建的设备卷:# lvs --all --options +devices <vg> LV Pool Type Devices [fastpool_cpool] cache-pool fastpool_pool_cdata(0) [fastpool_cpool_cdata] linear /dev/sdf1(4) [fastpool_cpool_cmeta] linear /dev/sdf1(2) [lvol0_pmspare] linear /dev/sdf1(0) main [fastpoool_cpool] cache main_corig(0) [main_corig] linear /dev/sdf1(O)
其他资源
-
系统中
lvcreate (8)
,lvmcache (7)
, 和lvconvert (8)
man page
67.10.5. 为逻辑卷启用 dm-writecache 缓存
这个过程允许使用 dm-writecache
方法将 I/O 操作缓存到逻辑卷中。
先决条件
-
您希望使用
dm-writecache
加快的逻辑卷存在于系统中。 - 包含较慢逻辑卷的卷组还包含在快速块设备中未使用的物理卷。
- 如果较慢的逻辑卷处于活跃状态,请停用它。
流程
如果一个较慢的逻辑卷是活跃的,取消激活它:
# lvchange --activate n <vg>/<main-lv>
替换以下值:
vg
- 卷组名称
main-lv
- 较慢的逻辑卷名称
在快速设备中创建一个已停用的
cachevol
卷:# lvcreate --activate n --size <cachevol-size> --name <fastvol> <vg> </dev/fast-pv>
替换以下值:
cachevol-size
-
cachevol
卷的大小,如5G
fastvol
-
cachevol
卷的名称 vg
- 卷组名称
/dev/fast-pv
快速块设备的路径,如
/dev/sdf
例 67.7. 创建一个停用的
cachevol
卷# lvcreate --activate n --size 5G --name fastvol vg /dev/sdf WARNING: Logical volume vg/fastvol not zeroed. Logical volume "fastvol" created.
将
cachevol
卷附加到主逻辑卷以开始缓存:# lvconvert --type writecache --cachevol <fastvol> <vg/main-lv>
替换以下值:
fastvol
-
cachevol
卷的名称 vg
- 卷组名称
main-lv
较慢的逻辑卷名称
例 67.8. 将
cachevol
卷附加到主 LV# lvconvert --type writecache --cachevol fastvol vg/main-lv Erase all existing data on vg/fastvol? [y/n]?: y Using writecache block size 4096 for unknown file system block size, logical block size 512, physical block size 512. WARNING: unable to detect a file system block size on vg/main-lv WARNING: using a writecache block size larger than the file system block size may corrupt the file system. Use writecache block size 4096? [y/n]: y Logical volume vg/main-lv now has writecache.
激活生成的逻辑卷:
# lvchange --activate y <vg/main-lv>
替换以下值:
vg
- 卷组名称
main-lv
- 较慢的逻辑卷名称
验证
检查新创建的设备:
# lvs --all --options +devices vg LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices main-lv vg Cwi-a-C--- 500.00m [fastvol_cvol] [main-lv_wcorig] 0.00 main-lv_wcorig(0) [fastvol_cvol] vg Cwi-aoC--- 252.00m /dev/sdc1(0) [main-lv_wcorig] vg owi-aoC--- 500.00m /dev/sdb1(0)
其他资源
-
系统中
lvmcache (7)
手册页
67.10.6. 为逻辑卷禁用缓存
这个过程禁用 dm-cache
或 dm-writecache
缓存,该缓存在逻辑卷中当前启用。
先决条件
- 在逻辑卷中启用了缓存。
流程
取消激活逻辑卷:
# lvchange --activate n <vg>/<main-lv>
使用卷组名称替换 vg,使用启用了缓存的逻辑卷的名称替换 main-lv。
分离
cachevol
或cachepool
卷:# lvconvert --splitcache <vg>/<main-lv>
替换以下值:
使用卷组名称替换 vg,使用启用了缓存的逻辑卷的名称替换 main-lv。
例 67.9. 分离
cachevol
或cachepool
卷# lvconvert --splitcache vg/main-lv Detaching writecache already clean. Logical volume vg/main-lv writecache has been detached.
验证
检查逻辑卷不再连接在一起:
# lvs --all --options +devices <vg> LV Attr Type Devices fastvol -wi------- linear /dev/fast-pv main-lv -wi------- linear /dev/slow-pv
其他资源
-
系统中
lvmcache (7)
手册页