我想要构建一个尽可能安静、高效、凉爽的 NAS。
在这种情况下,我有以下部分:-4 个 SATA 连接到主板。-2 个硬盘,一个是 1TB,另一个是 900GB -2 个 SSD,一个是 220GB,另一个是 120GB。
要求: - 即使其中一个驱动器或 SSD 出现故障,所有数据仍必须可访问。 - 必须尽可能长时间保持 HD 闲置(不旋转)。 - 驱动器或 SSD 决定返回不正确的数据后,数据不会损坏。
-NAS 不必是世界上最快的 NAS。-当访问不在 SSD 上的数据时,等待几秒钟直到 HDD 旋转起来就可以了。
我设想的工作原理是:我想使用 2 个硬盘作为大容量存储,使用 2 个 SSD 作为缓存。假设两个 SSD 都是空的,每个硬盘都保存一份数据副本。当新数据写入 NAS 时,它会写入两个 SSD。如果其中一个 SSD(几乎)已满,硬盘会旋转,SSD 上的所有数据都会传输到硬盘上。然后,一半的数据(访问最少的写入数据)将从 SSD 中删除,因此客户端的更多数据可以存储在 SSD 上
当客户端请求存储在 SSD 上的数据时,HD 保持空闲状态。当客户端请求不在 SSD 上的数据时,其中一个硬盘会被唤醒。(不是两个硬盘,只有一个)。然后,请求的数据会从硬盘传输到客户端。接下来,与客户端请求的数据相邻的数据(例如,客户端正在处理的完整文件、该目录中的所有文件或客户端正在观看的系列剧的下几集)会传输到最大的 SSD 上的读取缓存中
可能的实现:在 2 个 SSD 上有一个 120GB 的 raid 1(镜像)btrfs 文件系统。这是写入缓存。在最大的 SSD 上还有一个 120GB 的 120GB btrfs 文件系统。这是读取缓存。在 2 个 HDD 上有一个 900GB 的 raid 1(镜像)btrfs 文件系统。最大驱动器的 100GB 未使用。2 个 bcache 实例用于处理读取和写入缓存。
替代实现:每个硬盘都有自己的 SSD 缓存(由 bcache 管理)。然后将两个 HDD+SSD 堆栈放入 btrfs raid 1(镜像)阵列中。希望可以设置 bcache 不写入硬盘,直到 60GB 的数据变脏,或者直到出现读取缓存未命中。
问题是:这两种实现方式哪一种最好?或者还有更好的第三种选择吗?
在这种情况下,btrfs 是最好的文件系统吗?
bcache 是否不仅能够缓存最近读取的数据,还能缓存相邻的数据?
有什么有用的事情可以利用最大硬盘的100GB可用空间吗?