5.2. 缓存逻辑卷
您可以使用 dm-cache
或 dm-writecache
目标缓存逻辑卷。
dm-cache
使用更快的存储设备(SSD)作为较慢的存储设备(HDD)的缓存。它缓存读和写数据,优化频繁使用的数据的访问时间。它在混合工作负载环境中非常有用,其中增强读写操作可带来显著的性能改进。
dm-writecache
使用更快的存储介质(SSD)来在提交到主存储设备(HDD)之前临时保存写数据,来优化写操作。对于写密集型应用程序来说很有用,其中写性能可能会减缓数据传输过程。
5.2.1. 使用 dm-cache 缓存逻辑卷
当使用 dm-cache
缓存 LV 时,会创建一个缓存池。缓存池是一个组合了缓存数据的 LV,它存储实际缓存的内容,以及缓存元数据,跟踪缓存中存储的内容。然后,这个池与特定 LV 关联,来缓存其数据。
dm-cache
以两种块类型为目标:经常访问(热)的块被移到缓存中,而不太频繁访问(冷)的块保留在较慢的设备上。
先决条件
- 管理访问权限.
流程
显示您要缓存的 LV 及其卷组:
lvs -o lv_name,vg_name
# lvs -o lv_name,vg_name LV VG LogicalVolumeName VolumeGroupName
Copy to Clipboard Copied! 创建缓存池:
lvcreate --type cache-pool --name CachePoolName --size Size VolumeGroupName /FastDevicePath
# lvcreate --type cache-pool --name CachePoolName --size Size VolumeGroupName /FastDevicePath
Copy to Clipboard Copied! 将 CachePoolName 替换为缓存池的名称。使用缓存池的大小替换 Size。将 VolumeGroupName 替换为卷组的名称。将 /FastDevicePath 替换为快速设备(如 SSD 或 NVME)的路径。
将缓存池附加到 LV:
lvconvert --type cache --cachepool VolumeGroupName/CachePoolName VolumeGroupName/LogicalVolumeName
# lvconvert --type cache --cachepool VolumeGroupName/CachePoolName VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied!
验证
验证 LV 现在是否被缓存了:
lvs -o lv_name,pool_lv
# lvs -o lv_name,pool_lv LV Pool LogicalVolumeName [CachePoolName_cpool]
Copy to Clipboard Copied!
5.2.2. 使用 dm-writecache 缓存逻辑卷
当使用 dm-writecache
缓存 LV 时,会创建逻辑卷和物理存储设备之间的缓存层。DM-writecache
通过将写入操作临时存储在更快的存储介质中(如 SSD)来进行操作,然后再将其写回主存储设备,从而优化写入密集型工作负载。
先决条件
- 管理访问权限.
流程
显示您要缓存的逻辑卷及其卷组:
lvs -o lv_name,vg_name
# lvs -o lv_name,vg_name LV VG LogicalVolumeName VolumeGroupName
Copy to Clipboard Copied! 创建缓存卷:
lvcreate --name CacheVolumeName --size Size VolumeGroupName /FastDevicePath
# lvcreate --name CacheVolumeName --size Size VolumeGroupName /FastDevicePath
Copy to Clipboard Copied! 将 CacheVolumeName 替换为缓存卷的名称。使用缓存池的大小替换 Size。将 VolumeGroupName 替换为卷组的名称。将 /FastDevicePath 替换为快速设备(如 SSD 或 NVME)的路径。
取消激活缓存卷:
lvchange -an VolumeGroupName/CacheVolumeName
# lvchange -an VolumeGroupName/CacheVolumeName
Copy to Clipboard Copied! 将 VolumeGroupName 替换为卷组的名称。将 CacheVolumeName 替换为缓存卷的名称。
将缓存卷附加到 LV:
lvconvert --type writecache --cachevol CacheVolumeName VolumeGroupName/LogicalVolumeName
# lvconvert --type writecache --cachevol CacheVolumeName VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! 将 CacheVolumeName 替换为缓存卷的名称。将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
验证
验证 LV 现在是否被缓存了:
lvs -o lv_name,pool_lv
# lvs -o lv_name,pool_lv LV Pool LogicalVolumeName [CacheVolumeName_cvol]
Copy to Clipboard Copied!
5.2.3. 取消逻辑卷的缓存
使用两种主要方法从 LV 中删除缓存。
- 分割
- 您可以从 LV 中分离缓存,但保留缓存卷本身。在这种情况下,LV 将不再受益于缓存机制,但缓存卷及其数据将保持不变。虽然缓存卷被保留了,但缓存中的数据无法被重复使用,并将在下次在缓存设置中使用时被擦除。
- 取消缓存
- 您可以从 LV 中分离缓存,并完全删除缓存卷。此操作可以有效地销毁缓存,从而释放空间。
先决条件
- 管理访问权限.
流程
显示缓存的 LV:
lvs -o lv_name,pool_lv,vg_name
# lvs -o lv_name,pool_lv,vg_name LV Pool VG LogicalVolumeName [CacheVolumeName_cvol] VolumeGroupName
Copy to Clipboard Copied! 分离或删除缓存的卷:
要分离缓存的卷,请使用:
lvconvert --splitcache VolumeGroupName/LogicalVolumeName
# lvconvert --splitcache VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! 要分离和删除缓存的卷,请使用:
lvconvert --uncache VolumeGroupName/LogicalVolumeName
# lvconvert --uncache VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
验证
验证 LV 是否没有被缓存:
lvs -o lv_name,pool_lv
# lvs -o lv_name,pool_lv
Copy to Clipboard Copied!