文件如何存储在 RAID-5 上?假设我有一个 5 个磁盘上的 RAID-5,条带大小为 64K,并且我在所有可用磁盘空间上创建分区和文件系统。然后我创建一个 38 字节的小文本文件和另一个 5MB 的文本文件。这些文件如何存储在磁盘上?由于小文本文件比条带大小小得多,这是否意味着整个文本文件仅存储在五个磁盘中的一个上?如果是这样,“关联”条带包含什么?
答案1
传统 RAID 是作为单个块设备(卷)呈现的磁盘阵列。它对底层文件系统和/或文件一无所知。反之亦然 - 文件系统通常不知道存储背后是否有 RAID。
这意味着文件在 RAID 上的存储方式很大程度上取决于文件系统的存储方式。因此,最好讨论存储在块设备上的原始数据。
假设您使用原始访问来更改 RAID 卷上的单个字节。底层 RAID 子系统(无论是硬件还是软件 RAID)将检测访问了哪个条带,并且在基本操作中(不采用缓存和/或高级解决方案)必须重写整个条带以更新此数据。
如果在下一个操作中(为了简单起见,不再提供缓存),您将更新前一个字节的下一个字节,并且 RAID 子系统将检测到它与前一个位于同一条带上,它将再次更新整个条带。简单来说,它是读取-修改-写入操作。即它将读取所有先前的内容,仅更改所需的字节,重新计算奇偶校验块并在所有 5 个驱动器上再次写回新数据。实际上,缓存和一些高级检查算法将防止每次都发生这种情况,确保仅在必要时才发生真正的硬件写入。
因此,基本上,在 RAID-5 阵列中有 5 个驱动器的示例中,如果您写入哪怕是最小的 1 字节文件,它仍将写入所有 4 个 RAID-5 数据驱动器 + 1 个奇偶校验驱动器。但这并不意味着需要更多文件系统存储在单个非 RAID 驱动器上时,其空间与存储在单个非 RAID 驱动器上时相同。RAID 卷将提供与其实际提供的空间完全相同的空间(N-1 个驱动器 - 一些小的元数据块)。
答案2
不要混淆条纹和条尺寸。
Stripe size = strip size x stripe width.
如果您有strip size of 64k
和stripe width of 4
(4 个磁盘 + 1 个 RAID5),那么您将有256k stripe
。
这意味着任何小于该大小的文件将占用 256k,分布在 4 个驱动器上,每个驱动器占用 64k。
如果是stripe size is really 64k
,那么你将16k (strips)
占用每个磁盘,无论文件大小是否低于 64k。
一个 5MB 的文件将分布在所有 4 个驱动器上,并且在上述两种情况下每个驱动器都会占用 1.25MB,因为它比主条带大。
如果文件大小非常小,就像您的情况一样,剩余的条带将包含零(0x00)。