我再次提出一个始终存在的问题:如何最好地优化磁盘结构。在我的组织中,我们有一个 14TB 的 Linux 软件 RAID 阵列,专门用于存储使用 Symantec Backup Exec 制作的备份。这些文件很大,每个文件 10GB - 100GB,一些支持元数据文件大小为几 KB。长话短说,我们必须重新创建阵列,我想知道此用例的最佳阵列块大小。
我们的设置细节:
Netgear ReadyNAS Pro,运行全新且更新的 CentOS 6.4 安装。
6 个 3TB 消费级(SATA II,7200 RPM)硬盘,来自不同的供应商(尺寸相同)。
每个驱动器有 3 个相同的分区,形成 3 个软件 RAID 设备:
- /dev/md0:6 x 32GB 用于 RAID6
- /dev/md1:RAID10 中的 6 x 4GB 交换
- /dev/md2:6 x 2.7TB 存储空间,采用 RAID5 方式,总可用存储空间约为 14TB
此外,还有一个集成的 128MB 闪存设备设置为 /boot
/dev/md2 是我关注的阵列。它作为驱动器“R:”提供给运行 Symantec Backup Exec 的 Windows Server 2008 R2 机箱,通过两台机器上的双千兆位 NIC 上的多路径 iSCSI(也运行 9k 巨型帧)。
在 Server 2008 机器上,R: 被格式化为 NTFS,簇大小为 64k,专用于存储备份文件。平均文件大小一般在 40MB 到 5GB 之间,具体取决于当前完整备份与增量/差异备份的比例。磁盘使用率在读取和写入之间大约各占 50%,因为我们还将此驱动器上的备份镜像到磁带上。
总体而言,考虑到硬件,我认为这个设置已经优化得相当好了,但我不是存储专家,而且 RAID 块大小的含义有点超出我的理解范围。我知道默认块mdadm
大小是 512KB。这对于我的场景来说是最佳的吗?我应该调整它以匹配 NTFS 簇大小吗?还是我错过了一些神奇的公式?
感谢您的任何帮助,您可以提供。
编辑:以下是基准测试结果。并非所有组合都经过测试。
########## 4K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 111.551 MB/s
Sequential Write : 96.759 MB/s
Random Read 512KB : 107.033 MB/s
Random Write 512KB : 56.770 MB/s
Random Read 4KB (QD=1) : 9.500 MB/s [ 2319.2 IOPS]
Random Write 4KB (QD=1) : 5.042 MB/s [ 1231.0 IOPS]
Random Read 4KB (QD=32) : 101.717 MB/s [ 24833.3 IOPS]
Random Write 4KB (QD=32) : 8.237 MB/s [ 2010.9 IOPS]
Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
Date : 2013/07/12 13:10:31
OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1
[6.1 Build 7601] (x64)
########## 32K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 91.276 MB/s
Sequential Write : 11.119 MB/s
Random Read 512KB : 0.000 MB/s
Random Write 512KB : 0.000 MB/s
Random Read 4KB (QD=1) : 0.000 MB/s [ 0.0 IOPS]
Random Write 4KB (QD=1) : 0.000 MB/s [ 0.0 IOPS]
Random Read 4KB (QD=32) : 0.000 MB/s [ 0.0 IOPS]
Random Write 4KB (QD=32) : 0.000 MB/s [ 0.0 IOPS]
Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
Date : 2013/07/12 14:37:05
OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1
[6.1 Build 7601] (x64)
########## 64K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 111.968 MB/s
Sequential Write : 103.318 MB/s
Random Read 512KB : 105.047 MB/s
Random Write 512KB : 48.321 MB/s
Random Read 4KB (QD=1) : 10.373 MB/s [ 2532.5 IOPS]
Random Write 4KB (QD=1) : 5.180 MB/s [ 1264.5 IOPS]
Random Read 4KB (QD=32) : 95.106 MB/s [ 23219.3 IOPS]
Random Write 4KB (QD=32) : 9.108 MB/s [ 2223.6 IOPS]
Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
Date : 2013/07/12 12:47:37
OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1
[6.1 Build 7601] (x64)
########## 128K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 111.908 MB/s
Sequential Write : 94.305 MB/s
Random Read 512KB : 104.772 MB/s
Random Write 512KB : 43.821 MB/s
Random Read 4KB (QD=1) : 9.247 MB/s [ 2257.6 IOPS]
Random Write 4KB (QD=1) : 4.929 MB/s [ 1203.3 IOPS]
Random Read 4KB (QD=32) : 101.764 MB/s [ 24844.8 IOPS]
Random Write 4KB (QD=32) : 7.949 MB/s [ 1940.6 IOPS]
Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
Date : 2013/07/12 13:52:01
OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1
[6.1 Build 7601] (x64)
########## 512K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 110.237 MB/s
Sequential Write : 93.149 MB/s
Random Read 512KB : 104.892 MB/s
Random Write 512KB : 41.407 MB/s
Random Read 4KB (QD=1) : 6.760 MB/s [ 1650.3 IOPS]
Random Write 4KB (QD=1) : 3.539 MB/s [ 864.0 IOPS]
Random Read 4KB (QD=32) : 101.139 MB/s [ 24692.3 IOPS]
Random Write 4KB (QD=32) : 7.166 MB/s [ 1749.6 IOPS]
Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
Date : 2013/07/12 12:22:58
OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1
[6.1 Build 7601] (x64)
##########1024K Chunk##########
-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 x64 (C) 2007-2013 hiyohiyo
Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
Sequential Read : 112.327 MB/s
Sequential Write : 92.353 MB/s
Random Read 512KB : 107.015 MB/s
Random Write 512KB : 39.793 MB/s
Random Read 4KB (QD=1) : 9.536 MB/s [ 2328.0 IOPS]
Random Write 4KB (QD=1) : 3.671 MB/s [ 896.3 IOPS]
Random Read 4KB (QD=32) : 101.990 MB/s [ 24900.0 IOPS]
Random Write 4KB (QD=32) : 0.000 MB/s [ 0.0 IOPS]
Test : 1000 MB [R: 0.0% (0.1/13791.8 GB)] (x5)
Date : 2013/07/12 14:17:08
OS : Windows Server 2008 R2 Enterprise Edition (Full installation) SP1
[6.1 Build 7601] (x64)
答案1
至少,您希望块大小是文件系统块大小的倍数或除数。您已经做到了。
其他一切都可能取决于实现。由于您是从头开始,因此您应该自行制定基准。不要创建 14 TB 的 RAID 集,而是使用每个驱动器中不同块大小的 500 GB 进行测试。较小的卷大小将减少创建卷所需的时间。
找到最适合您设置的数字后,即可创建 14 TB RAID 集。再次测试以确保性能没有下降。
答案2
这取决于使用场景。假设您有非常少量的小文件(< 512KB),假设有 10000 个文件,其余文件都是非常大的文件(> 10MB),即 5000 个文件。格式化驱动器时最好使用 1MB 的簇大小,如果您设置了 8 个磁盘 raid 10,则每个磁盘将同时读取 128KB。
如果您的所有小文件和大文件的尾部主干都是 4KB,那么您最多会损失 508KB * 15000 的磁盘空间,这相当于 ~ 7500MB,即 7.5 GB 的磁盘空间损失。
与块大小为 512KB、簇大小为 64KB 的不祥设置相比,您将获得 4 倍的速度。
最终的配方是:
- 根据文件大小分布选择文件系统集群大小
- 将其除以同时使用的磁盘数量,确定块大小
- 如果您选择较大的块和集群,您将获得速度,但大文件的磁盘空间却会变得非常小。
- 对于小文件,不要过多优化机械设置,而应该考虑为小于 1MB 的文件添加 nvme 或 ssd 缓存
此外:
- 考虑网络基础设施的带宽限制
- 在设置 raid 之前检查瓶颈(dd dev/zero to disks watch iostat)
- 考虑 hba 或 raid 卡 - sata 卡(芯片)和 pci-e 插槽总带宽和每通道带宽
- 检查电缆是否损坏或松动(dmesg)
- 使用 ext4 分区进行 mdadm 软件 raid 并留出一点空间用于磁盘兼容性,不要使用原始分区
- btrfs 和类似的(zfs、nilfs、cloud-dedupe 等)文件系统是另一个问题
! 很重要:
不要使用 raid 5(几乎不可能重建且有缺陷)
不要使用带有自己的 raid 5 或 raid 6 设置的 btrfs(已知错误)
不要使用 raid 0 来存储关键任务数据,虽然它可以保存 10 年,但这是一种赌博
使用 ups 和软件 raid 设置
备份 LSI 芯片组卡的 rombios 软件并购买备用卡,确保它们具有相同的 rombios 版本,并确保如果更换另一个,可以重建 raid
这些是我两年的文件服务器设置经验中的一些