使用 LVM Cache 为机械硬盘配置 SSD 缓存

4次阅读
没有评论

共计2890个字符,预计需要花费8分钟才能阅读完成。

简介

本文介绍如何使用 Linux LVM Cache 将 SSD 作为机械硬盘(HDD)的缓存层,实现兼顾大容量与高性能的存储方案。

什么是 LVM Cache

LVM Cache 是 Linux LVM(Logical Volume Manager)基于 Device Mapper(dm-cache)提供的块设备缓存功能,可以将 SSD 作为 HDD 的高速缓存,而对文件系统和应用完全透明。

优点:

  • 提高随机读写性能
  • 保留 HDD 大容量
  • 无需修改应用程序
  • 支持 XFS、EXT4 等文件系统

工作原理

应用程序
    │
文件系统(XFS/EXT4)
    │
Logical Volume
    │
LVM Cache
 ├── SSD Cache
 └── HDD Data

读取时优先从 SSD 获取数据;缓存未命中时从 HDD 读取并自动缓存。写入时根据缓存模式决定是否先写入 SSD。

Writeback 与 Writethrough 模式

模式 读性能 写性能 安全性
Writeback ★★★★★ ★★★★★ ★★★
Writethrough ★★★★★ ★★★ ★★★★★

Writeback

  • 性能最佳
  • 后台回写 HDD
  • SSD 损坏可能导致尚未回写的数据丢失

Writethrough

  • 同时写 SSD 与 HDD
  • 更安全
  • 写入性能略低

开始配置

环境说明

以下是我的硬件配置:

  • 固态硬盘(SSD):/dev/nvme1n1
  • 机械硬盘(HDD):/dev/sda

以下是我创建的:

  • VG:disk_cache
  • Cache Pool:cachepool
  • LV:disk

为 SSD 分区

由于我不想使用整个固态硬盘作为加速盘,因此我用 sudo fdisk /dev/nvme1n1 进行了分区。

最终创建了分区 /dev/nvme1n1p2,用于给机械硬盘加速。

创建 PV

PV(Physical Volume,物理卷)是 LVM 的核心。它可以是整块物理硬盘、RAID 磁盘阵列,或者是硬盘分区。当这些物理存储设备经过 LVM 初始化后,就会被赋予元数据并转化为供 LVM 调用的基本存储单元。

简单来说,就是创建 PV 后,就代表 LVM 可以管理这块硬盘或者分区了。

首先为 SSD 创建 PV,用以下命令:

sudo pvcreate /dev/nvme1n1p2

使用 LVM Cache 为机械硬盘配置 SSD 缓存

接着,用同样的命令为 HDD 创建 PV:

sudo pvcreate /dev/sda

使用 LVM Cache 为机械硬盘配置 SSD 缓存

如果 HDD 已使用过,可以先用命令 sudo wipefs -a /dev/sda 进行擦除。

创建 VG

在 LVM 中,VG(Volume Group,卷组)是将多块硬盘或分区整合在一起所形成的“集中存储池”。可以将 VG 理解为一个虚拟的大型硬盘,其容量等于组成它的所有物理设备的容量总和。

这里我们直接创建名为 disk_cache 的 VG,并将 /dev/nvme1n1p2/dev/sda 加入到这个 VG。

sudo vgcreate disk_cache /dev/nvme1n1p2 /dev/sda

使用 LVM Cache 为机械硬盘配置 SSD 缓存

创建 LV

在 LVM 中,LV 代表(Logical Volume,逻辑卷)。它是 LVM 最终划分出来、供系统挂载并使用的逻辑分区。可以直接在其上创建文件系统(如 ext4 或 xfs),就像操作传统硬盘分区一样。

首先,为 SSD 创建缓存池,用命令:

sudo lvcreate --type cache-pool -n cachepool -l 100%PVS disk_cache /dev/nvme1n1p2

使用 LVM Cache 为机械硬盘配置 SSD 缓存

这样就创建好一个名叫 cachepool 的缓存池了。

接着创建 HDD 的 LV:

sudo lvcreate -n disk -l 100%PVS disk_cache /dev/sda

使用 LVM Cache 为机械硬盘配置 SSD 缓存

此时,HDD 就创建好了一个没有经过 SSD 加速的 LV 了。

启用 LVM Cache

这时候,我们只需要启用 LVM Cache,就能利用 SSD 为 HDD 进行加速了,如下命令:

sudo lvconvert \
--type cache \
--cachepool disk_cache/cachepool \
--cachemode writeback \
disk_cache/disk

使用 LVM Cache 为机械硬盘配置 SSD 缓存

格式化并挂载

先用格式化为 xfs 文件系统:

sudo mkfs.xfs -f /dev/disk_cache/disk

然后用以下命令挂载即可:

sudo mkdir -p /mnt/disk
sudo mount /dev/disk_cache/disk /mnt/disk

使用 LVM Cache 为机械硬盘配置 SSD 缓存

此时,用 lsblk 命令可以看见:

使用 LVM Cache 为机械硬盘配置 SSD 缓存

开机启动

首先,需要获取分区的 UUID 信息:

sudo blkid /dev/disk_cache/disk

使用 LVM Cache 为机械硬盘配置 SSD 缓存

然后用 vim 命令,写入 /etc/fstab 文件:

UUID=<UUID> /mnt/disk xfs defaults 0 0

使用 LVM Cache 为机械硬盘配置 SSD 缓存

最后用以下命令验证是否挂载成功即可:

sudo mount -a

其他

常用命令

功能 命令
查看 PV pvs
查看 VG vgs
查看 LV lvs
查看缓存模式 lvs -o +cache_mode
查看缓存使用率 lvs -o +data_percent
查看缓存策略 lvs -o +cache_policy
查看 Device Mapper dmsetup status
分离缓存 lvconvert --splitcache VG/LV
删除缓存池 lvremove VG/cachepool
查看 UUID blkid
查看块设备 lsblk

查看缓存状态

sudo lvs
sudo lvs -a
sudo lvs -o +cache_mode
sudo lvs -o +data_percent
sudo lvs -o +metadata_percent
sudo lvs -o +cache_policy
sudo lvs -a -o +devices

推荐:

sudo lvs -o lv_name,vg_name,cache_mode,data_percent,metadata_percent,devices

Cache 调优

查看 Device Mapper:

sudo dmsetup status
sudo dmsetup table

切换模式:

sudo lvchange --cachemode writethrough disk_cache/disk
sudo lvchange --cachemode writeback disk_cache/disk

删除 Cache

sudo umount /mnt/disk
sudo lvconvert --splitcache disk_cache/disk

删除 Cache Pool:

sudo lvremove disk_cache/cachepool
sudo vgreduce disk_cache /dev/nvme1n1p2
sudo pvremove /dev/nvme1n1p2

常见问题

为什么缓存没有立即生效?

LVM Cache 会根据访问热点自动建立缓存,多次访问同一数据后命中率会逐渐提高。

SSD 损坏会怎样?

  • Writeback:可能丢失未回写数据。
  • Writethrough:通常不会丢失数据。

推荐搭配

  • 家庭 NAS:Writeback + UPS + 企业级 SSD
  • 重要数据:Writethrough

总结

LVM Cache 是一种块设备级缓存方案,能够在不改变应用程序的情况下,为机械硬盘提供 SSD 级的热点数据访问能力。对于 NAS、媒体服务器和大容量存储场景,推荐使用 Writeback + UPS + 企业级 SSD 获得最佳性能;对于关键数据,建议选择 Writethrough 模式以提升可靠性。

正文完
 0
评论(没有评论)
验证码