文章摘要
文章探讨了如何利用LVM技术将SSD作为HDD的缓存,以在保证存储容量的同时提升访问速度。虽然SSD价格下降使得HDD在大多数场景中不再必要,但在需要大量存储的特定情况下,如家庭镜像服务器,使用SSD缓存HDD仍是一种经济高效的解决方案。
文章总结
快速且经济的海量存储:使用LVM在SSD上缓存HDD
自固态硬盘(SSD)问世以来,用户面临一个选择:要么使用SSD以获得极高的速度,尤其是在非顺序读写(“随机I/O”)方面,要么使用传统的机械硬盘(HDD)以获得更便宜的存储,尽管HDD在顺序I/O方面稍慢,而在随机I/O方面则极其缓慢。
将常用数据缓存到SSD上,其余数据存储在HDD上的想法并不新鲜。固态混合硬盘(SSHD)在硬件层面实现了这一理念,而像ZFS这样的文件系统也支持将SSD用作L2ARC缓存。然而,随着SSD价格的下降,这种方案在大多数场景下已不再具有优势,除非是存储量极大的特殊场景。例如,作者多年来已不再需要在PC中使用HDD,因为所有数据都可以轻松存储在SSD上。
然而,在某些场景下,这种方案仍然有意义。例如,作者在家中托管了一些镜像项目,这些项目通常需要数百GB的数据进行镜像,但只有少数文件会被频繁访问,这些文件可以缓存到SSD上以加快访问速度。此外,作者还使用Ollama本地运行了许多大型语言模型(LLM),但只有少数模型会被频繁使用,这些模型可以缓存到SSD上,而其他模型则在需要时从HDD缓慢加载。
尽管ZFS似乎是显而易见的选择,但由于Linux与ZFS的兼容性问题,作者决定使用Linux的逻辑卷管理器(LVM)来完成这一任务,以避免不必要的麻烦。为了在HDD故障时确保数据的可靠性,作者使用Linux的mdadm软件RAID将HDD配置为RAID 1。
本文详细介绍了如何构建这种缓存RAID阵列,并探讨了在构建可靠且快速的存储时需要考虑的一些因素。
为什么使用LVM缓存?
Linux上有多种块设备缓存解决方案,例如bcache和EnhanceIO。然而,作者选择LVM的原因在于其熟悉性和配置的持久性。LVM允许用户创建逻辑卷,并可以轻松扩展,而无需像传统分区那样要求连续空间。
硬件设置
假设有两块4TB的SATA HDD(/dev/sda和/dev/sdb),以及一块2TB的NVMe SSD(/dev/nvme0n1)。作者将SSD中的100GB空间用作缓存分区。
为什么在HDD上使用RAID 1?
机械硬盘(HDD)不可避免地会故障。为了确保数据的可用性,作者选择将HDD配置为RAID 1,这样即使一块硬盘故障,数据仍然可用。
使用mdadm设置RAID 1
首先,作者使用gdisk对HDD进行分区,确保分区大小一致。然后,使用mdadm创建RAID 1阵列,并将其配置为在每次启动时自动组装。
创建SSD缓存分区
作者在SSD上创建了一个100GB的分区作为缓存。由于LVM不支持嵌套逻辑卷,因此必须使用真实分区而非LVM逻辑卷。
创建新的卷组
使用mdadm创建的RAID 1阵列和SSD缓存分区作为物理卷(PV),作者创建了一个名为cached的卷组(VG)。
创建缓存逻辑卷
创建缓存逻辑卷的过程包括多个步骤:首先在HDD上创建一个逻辑卷(LV),然后在SSD上创建缓存元数据和缓存LV,最后将它们合并为一个缓存池,并将其附加到HDD上的逻辑卷。
创建文件系统并挂载
作者在缓存逻辑卷上创建了ext4文件系统,并将其挂载到/example目录。通过修改/etc/fstab,确保文件系统在每次启动时自动挂载。
监控
通过lvdisplay命令,可以监控缓存的使用情况,包括缓存命中率、脏数据块等指标。
结论
在之前的实践中,作者在存储镜像和LLM时,缓存命中率达到了95%以上。如果你有类似的工作负载,LVM缓存可能会带来显著的性能提升。此外,这种技术不仅适用于HDD缓存,还可以用于云环境中,将慢速的网络存储与快速的本地存储结合使用。
通过本文,作者希望读者能够了解LVM缓存的基本原理,并在实际应用中受益。
评论总结
评论内容总结:
Ext4 缓存与 SSD 的使用
- 作者 gopalv 提到,Ext4 的外部日志功能在 SSD 上表现良好,但 SSD 故障可能导致多磁盘数据丢失。
- 引用:
- "Ext4 supported external journals and moving it to a single SSD for a large number of otherwise slow SMR disks has worked great in the past."
- "However, when you hit a failure that SSD becomes a single root cause of data loss from several disks when losing that SSD."
ZFS 和 BTRFS 的优势
- 作者 Szpadel 指出,ZFS 和 BTRFS 通过校验和功能可以检测数据损坏,优于传统 RAID1。
- 引用:
- "the biggest advantage of filesystems like zfs or btrfs that manage raid themselves, they have checksums and that know with copy is valid."
- "raid have no way of telling with one is correct so it's basically flips a coin and select one of them."
LVM 的灵活性与 RAID 支持
- 作者 iam-TJ 和 dale_glass 强调 LVM 的灵活性,支持多种 RAID 配置、缓存和动态调整。
- 引用:
- "LVM can do RAID, can deal with moving things across devices, and has many other fancy features."
- "This arrangement allows me to choose caching, raid, and any other device-mapper target combinations on a per-LV basis."
SSD 缓存与备份策略
- 作者 sneak 提出将数据存储在 SSD 或 RAID0 上,并持续备份到慢速 HDD,以平衡性能与成本。
- 引用:
- "storing data on SSDs or raid0s of SSDs, then running continuous backups of changed files to a slow HDD."
- "This is so much faster than these hyper-vigilant HA setups, too, while being quite a bit cheaper."
RAID 的局限性
- 作者 Szpadel 和 Padriac 指出,RAID1 只能防止磁盘故障,无法防止数据损坏,且需要监控和警报系统。
- 引用:
- "raid1 is that this only protect from catastrophic disk failure."
- "RAID is great but without monitoring and alerting you can still have a problem."
ZFS 的元数据缓存
- 作者 rsync 提到 ZFS 支持元数据缓存设备,但丢失元数据设备会导致整个池丢失。
- 引用:
- "zfs recently implemented dedicated metadata cache devices ... which allows you to cache either filesystem metadata or even small files to a blazing fast SSD mirror."
- "if you lose your metadata vdev (your 'special' vdev) you will lose your entire zpool."
总结:评论主要围绕文件系统(如 Ext4、ZFS、BTRFS)、RAID 配置、LVM 的灵活性以及 SSD 缓存与备份策略展开,强调了不同技术的优缺点及适用场景。