主要观点:自固态硬盘(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,还可在云环境中用于缓存网络块设备。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。