快速且廉价的大容量存储:使用逻辑卷管理(LVM)在固态硬盘(SSDs)上缓存硬盘驱动器(HDDs)

主要观点:自固态硬盘(SSD)诞生以来,面临选择,可用于高速读写,或用传统机械硬盘(HDD)存储但读写速度较慢。缓存常用数据于 SSD 而其余存于 HDD 的想法由来已久,如今 SSD 价格下降,此方式在特定场景外已不合理。文中以在家托管的镜像和本地的大语言模型(LLM)为例说明该方式的合理性,因 Linux 与 ZFS 的兼容性问题,选择用 Linux 的逻辑卷管理器(LVM)代替 ZFS 进行缓存,同时为确保 HDD 故障时数据可靠,用 RAID 1 存储 HDD 数据,并详细介绍了如何构建缓存 RAID 阵列及相关考虑因素。

关键信息:

  • 介绍了多种块设备缓存解决方案,如bcache和 EnhanceIO,因熟悉 LVM 而选择用其进行缓存。
  • 解释了 LVM 的概念,包括物理卷(PV)、逻辑卷(LV)和卷组(VG)等,LV 可灵活扩展且能像分区一样存储文件。
  • 硬件方面假设了两个 4TB 的 SATA HDD 和一个 2TB 的 SSD,为避免 RAID 中驱动大小问题,对 HDD 进行分区并精确到 4TB 标记,对 SSD 也进行了分区操作以创建缓存分区。
  • 详细说明了用mdadm设置 RAID 1 的过程,包括分区、创建阵列、背景操作等,以及在mdadm.conf中声明阵列以避免每次启动时组装。
  • 介绍了创建 SSD 缓存分区的步骤,包括计算大小、收缩现有分区数据、编辑分区表、扩展分区等。
  • 阐述了创建新卷组、缓存逻辑卷(LV)、创建缓存池、将缓存池附加到 HDD LV 等过程,还介绍了不同的缓存模式及其特点。
  • 最后创建了 ext4 文件系统并将其挂载到/example目录,可通过lvdisplay监控缓存指标。

重要细节:

  • bcache设置方式存在问题,如拥有整个块设备、非持久 sysfs 配置及可能导致数据损坏等。
  • 分区工具通常要求输入包含的最后扇区的偏移量,计算时需注意减去 1。
  • 在创建 RAID 1 时,所有块设备必须大小相同,可通过分区精确到 4TB 标记来解决非相同驱动模型的问题。
  • 调整 SSD 分区大小时,需先收缩 PV,再编辑分区表并通知内核,最后扩展 PV 以适应新空间。
  • 创建缓存 LV 过程复杂,需创建包含底层数据的 LV、缓存元数据 LV 等,并根据元数据大小调整剩余空间以创建实际缓存 LV,最后合并为缓存池并附加到 HDD LV 上。
  • 缓存模式有writethrough(数据同时存储在缓存和底层设备,写入较慢但数据安全)和writeback(数据先写入缓存后延迟写入底层设备,缓存故障可能导致数据丢失),文中选择writethrough以确保数据安全。
  • 挂载新文件系统时,可将其添加到/etc/fstab中以实现永久挂载,lvdisplay可用于监控缓存指标。
  • 强调 RAID 不是备份,应始终备份重要数据,此技术不仅可用于缓存 HDD,还可在云环境中用于缓存网络块设备。
阅读 66
0 条评论