Hacker News 中文摘要

RSS订阅

快速经济的海量存储:利用LVM在SSD上缓存HDD -- Fast and cheap bulk storage: using LVM to cache HDDs on SSDs

文章摘要

文章探讨了如何利用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缓存的基本原理,并在实际应用中受益。

评论总结

评论内容总结:

  1. 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."
  2. 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."
  3. 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."
  4. 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."
  5. 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."
  6. 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 缓存与备份策略展开,强调了不同技术的优缺点及适用场景。