1. 从一台慢得离谱的服务器说起前阵子帮一个朋友看他托管在机房的一台业务服务器症状很典型CPU 和内存监控看着都挺闲但数据库写入延迟时不时飙到几百毫秒业务侧偶尔报超时。登录上去iostat一看磁盘%util长期贴着 100%await高得吓人。最后拆开配置一看两块盘做了 RAID 1但阵列卡缓存没开写回条带也没对齐等于花着企业级硬件的钱跑着比单盘还憋屈的性能。这件事让我觉得有必要把Linux 服务器硬件认知 RAID 配置这条线完整梳理一遍。很多人装系统、跑服务都很熟但一碰到这块盘该做 RAID 几阵列卡缓存要不要开条带大小怎么选就发懵。这篇内容就是写给这类人的不管你是刚接手机房运维的新手还是自己攒机器跑服务的老玩家我都会从硬件识别讲到 RAID 实战把每一步的为什么讲透让你看完能直接上手配一套靠谱的存储方案。需要先说明的是RAID 不是万能药它解决的是可用性和部分性能问题不解决容量问题更不替代备份。这个认知如果一开始就建立起来后面很多决策会清晰很多。下面我按硬件摸底 → 原理选型 → 实战配置 → 排错调优的顺序展开中间穿插大量我踩过的坑。2. 先把服务器硬件摸清楚别急着动手2.1 用命令行识别 CPU、内存与主板配 RAID 之前你得先知道手里这台机器到底有什么。Linux 下识别硬件有一套非常成熟的命令组合我习惯按CPU → 内存 → 主板/PCIe → 磁盘的顺序过一遍。CPU 信息最直接的是lscpu它会告诉你架构、物理核数、逻辑核数、主频、缓存层级。这里有个细节lscpu里的CPU(s)是逻辑核Core(s) per socket乘Socket(s)才是物理核。判断一台机器能不能扛住高并发看物理核和主频比看逻辑核更靠谱。lscpu # 关注Architecture、CPU(s)、Thread(s) per core、Core(s) per socket、Socket(s)内存用free -h看总量和可用量但更细的插槽信息要用dmidecodesudo dmidecode -t memory | grep -E Size|Speed|Locator|Type这条命令能告诉你每个内存插槽插了多大的条、频率多少、是 DDR4 还是 DDR5。我遇到过一台机器两条内存频率不一致跑起来自动降频到低的那个性能白白损失这种问题只有dmidecode才看得出来。主板和 PCIe 设备用lspci重点看阵列卡有没有被识别lspci | grep -i -E raid|sas|sata|storage如果这里能看到类似 RAID bus controller 的字样说明阵列卡在系统层面是可见的。这一步很关键因为后面配 RAID 要么走阵列卡硬件 RAID要么走系统软件软件 RAID识别结果直接决定你的技术路线。2.2 磁盘设备命名规则与识别技巧Linux 下磁盘命名是有规律的搞懂规律能省很多事。传统 SATA/SAS 盘是/dev/sda、/dev/sdb这种NVMe 盘是/dev/nvme0n1、/dev/nvme1n1而硬件 RAID 卡做出来的逻辑卷通常表现为/dev/sda或/dev/sdb具体取决于卡。查看块设备最全的命令是lsblk它会以树状结构展示磁盘和分区lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,ROTA这里的ROTA字段很有用值为 1 表示机械盘旋转介质值为 0 表示固态盘。批量判断盘的类型时这个字段比逐个查型号快得多。还有一个我常用的命令是lsblk -d -o NAME,SIZE,ROTA,MODEL-d表示只显示磁盘本身不显示分区一眼就能看清有几块物理盘、各自多大、是机械还是固态。注意设备名sda/sdb在重启后可能变化尤其是热插拔场景。生产环境里我强烈建议用/dev/disk/by-id/或/dev/disk/by-path/下的持久化路径来引用磁盘避免重启后阵列认错盘。2.3 判断该走硬件 RAID 还是软件 RAID这是选型的第一道分水岭。硬件 RAID 靠独立阵列卡上的处理器和缓存干活对操作系统透明性能稳定、不占主机 CPU软件 RAID 靠 Linux 内核的mdadm实现灵活、免费、不依赖特定硬件。我的判断逻辑是这样的场景推荐方案理由有独立阵列卡且带缓存电池硬件 RAID性能好掉电有保护无阵列卡普通主板软件 RAID (mdadm)零成本够用追求极致性能NVMe软件 RAID 或 ZFS硬件卡可能成瓶颈需要灵活扩容、快照软件 RAID / ZFS硬件卡扩容受限有个常见误区以为主板上的RAID 功能是硬件 RAID。其实大多数消费级主板所谓的 RAID 是Fake RAID伪硬件 RAID靠驱动和 CPU 实现性能和可靠性都不如纯软件 RAID。判断方法很简单如果阵列卡没有独立缓存和电池基本就是 Fake RAID这种情况我宁可关掉它用mdadm。3. RAID 原理与级别选型别只会 RAID 53.1 RAID 0/1/5/6/10 的本质区别RAID 的核心思想就两个词条带化striping和镜像/校验mirroring/parity。所有级别都是这两个思想的组合。RAID 0纯条带化数据切成块分散写到多块盘。读写性能随盘数线性提升但没有任何冗余一块盘坏全盘数据完蛋。适合临时缓存、可重建的数据。RAID 1纯镜像两块盘写一样的数据。读性能有提升可并行读写性能基本等于单盘容量利用率只有 50%。适合系统盘、小容量高可靠场景。RAID 5条带 单校验。N 块盘可用容量是 N-1 块允许坏 1 块盘。读性能好但写性能受校验计算拖累尤其是随机小写。RAID 6条带 双校验。可用容量 N-2允许坏 2 块盘。比 RAID 5 更安全但写性能更差。RAID 10先镜像再条带。兼顾性能和可靠性可用容量 50%允许每组镜像各坏一块。数据库场景的首选。这里必须讲清楚一个反直觉的点RAID 5 在大容量机械盘时代其实很危险。假设单盘 8TB重建一块盘需要读写全盘数据这个过程可能持续十几个小时甚至更久期间如果第二块盘也坏了数据全丢。所以现在很多老运维对 RAID 5 是持保留态度的要么上 RAID 6要么直接 RAID 10。3.2 条带大小、缓存策略对性能的影响这两个参数是 RAID 调优的重头戏也是最多人忽略的地方。条带大小Stripe/Chunk Size指的是一块数据被切分后写到单块盘上的大小。常见取值 64KB、128KB、256KB、1MB。选择逻辑是大文件顺序读写视频、备份用大条带512KB~1MB减少跨盘寻址。数据库随机小 IO用小条带64KB~128KB让 IO 能分散到多块盘。阵列卡缓存策略分写策略和读策略。写策略有 Write-Through写透和 Write-Back写回。Write-Back 先把数据写进卡上缓存就返回成功性能高很多但必须有电池或超级电容保护否则掉电会丢缓存里的数据。这就是我开头那台机器的问题——缓存没开写回等于白瞎了阵列卡。提示判断阵列卡有没有电池保护可以看卡的 BBUBattery Backup Unit状态。没有电池的情况下强行开 Write-Back是拿数据安全换性能生产环境千万别这么干。3.3 容量与冗余的取舍计算选 RAID 级别时容量计算是硬指标。我列个表方便对照假设 4 块 4TB 盘级别可用容量容错读性能写性能RAID 016TB0 块极高极高RAID 14TB1 块高中RAID 512TB1 块高中低RAID 68TB2 块高低RAID 108TB每组 1 块高高计算公式RAID 5 可用 (N-1) × 单盘容量RAID 6 可用 (N-2) × 单盘容量RAID 10 可用 N/2 × 单盘容量。实际选型时我的经验是系统盘 RAID 1数据盘看业务。数据库、虚拟化这类随机写多的RAID 10文件存储、备份这类顺序读写为主的RAID 6 更划算。RAID 5 现在我只在盘数少、容量小、且能接受重建风险的场景用。4. 硬件 RAID 实战从进卡到建阵列4.1 进入阵列卡配置界面硬件 RAID 的配置发生在操作系统启动之前通常在开机自检阶段按特定组合键进入。不同厂商的卡按键不同常见的有CtrlR、CtrlH、CtrlI具体看开机屏幕提示。进入界面后你会看到物理盘列表Physical Drives和虚拟盘列表Virtual Drives。配置流程一般是选中物理盘 → 创建虚拟盘 → 选 RAID 级别 → 设条带和缓存 → 初始化。这里有个实操细节新盘第一次建阵列时初始化方式选快速初始化还是完整初始化。快速初始化只写元数据几秒钟完成完整初始化会全盘写零几小时起步。新盘我一般用快速初始化但如果是复用旧盘一定要完整初始化把残留的 RAID 元数据清干净否则可能出现盘认到了但阵列起不来的诡异问题。4.2 创建 RAID 阵列并设置缓存策略建阵列时几个关键设置RAID Level按前面选型逻辑定。Stripe Size数据库 64KB~128KB文件存储 256KB~1MB。Write Policy有电池选 Write-Back无电池选 Write-Through。Read Policy一般选 Read-Ahead预读顺序读场景提升明显。初始化新盘快速旧盘完整。建完后操作系统里会看到一个逻辑卷比如/dev/sda。这时候用lsblk应该能看到它但注意——它看起来就是一块普通盘你从系统层面看不出底层是 RAID。要查阵列状态得用厂商工具比如storcli、MegaCli、ssacli等。# 以某常见阵列卡工具为例查看虚拟盘状态 sudo storcli /c0 /vall show # 查看物理盘状态 sudo storcli /c0 /eall /sall show4.3 系统层验证与分区对齐阵列建好后分区对齐是个容易被忽略但影响性能的点。传统机械盘时代有 4K 对齐问题现在 SSD 和高级格式盘同样讲究对齐。用parted分区时让它自动对齐即可sudo parted /dev/sda (parted) mklabel gpt (parted) mkpart primary 0% 100% (parted) align-check optimal 1align-check optimal 1会告诉你分区 1 是否对齐。如果显示 aligned就没问题。分区完成后格式化比如mkfs.xfs /dev/sda1。XFS 对大容量和高并发支持好是我在数据盘上的首选系统盘用 ext4 也完全够。注意格式化前务必确认设备名正确。我见过有人手抖把sdb写成sda把系统盘格了的惨案。生产环境操作前先lsblk确认三遍或者干脆用by-id路径。5. 软件 RAID 实战mdadm 从零到可用5.1 安装 mdadm 与准备磁盘没有阵列卡或者想用 NVMe 组阵列时mdadm是标准方案。先装工具# Debian/Ubuntu 系 sudo apt install mdadm # RHEL/CentOS 系 sudo yum install mdadm准备磁盘时建议先给每块盘分区并标记为linux raid autodetect类型虽然现代mdadm直接对整盘操作也行但分区方式更规范也方便日后管理。sudo parted /dev/sdb (parted) mklabel gpt (parted) mkpart primary 0% 100% (parted) set 1 raid on对每块参与阵列的盘重复这个操作。5.2 用 mdadm 创建 RAID 5 与 RAID 10创建 RAID 5假设三块盘 sdb、sdc、sddsudo mdadm --create /dev/md0 --level5 --raid-devices3 \ /dev/sdb1 /dev/sdc1 /dev/sdd1创建 RAID 10假设四块盘sudo mdadm --create /dev/md1 --level10 --raid-devices4 \ /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1创建后阵列会进入同步resync状态可以用下面命令看进度cat /proc/mdstat同步期间性能会受影响但阵列已经可用。RAID 5 的同步时间跟盘容量成正比几 TB 的盘同步几小时很正常。5.3 保存配置与开机自动组装这一步是新手最容易漏的。mdadm创建的阵列默认不会开机自动组装必须保存配置sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf # RHEL 系路径是 /etc/mdadm.conf sudo update-initramfs -uupdate-initramfs这步在 Debian 系很关键它把阵列信息写进 initramfs保证开机时能正确组装根文件系统所在的阵列。漏了这步重启后可能直接进不了系统。然后格式化并挂载sudo mkfs.xfs /dev/md0 sudo mkdir /data sudo mount /dev/md0 /data写入/etc/fstab实现开机自动挂载建议用 UUIDsudo blkid /dev/md0 # 把输出的 UUID 写进 fstab UUIDxxxx-xxxx /data xfs defaults 0 06. 监控、排错与性能调优实录6.1 阵列健康状态监控阵列建好不是终点日常监控才是。硬件 RAID 靠厂商工具定期查软件 RAID 靠/proc/mdstat和mdadm --detail。# 快速看阵列状态 cat /proc/mdstat # 详细状态关注 State 和 Failed Devices sudo mdadm --detail /dev/md0State显示clean或active是正常出现degraded说明有盘掉了要立刻处理。我习惯写个定时脚本每天把阵列状态发到监控系统degraded就告警别等业务挂了才发现。6.2 磁盘故障替换流程软件 RAID 换盘流程很清晰。假设/dev/sdc坏了# 1. 标记故障盘 sudo mdadm /dev/md0 --fail /dev/sdc1 # 2. 移除故障盘 sudo mdadm /dev/md0 --remove /dev/sdc1 # 3. 物理更换后添加新盘 sudo mdadm /dev/md0 --add /dev/sdc1添加后会自动开始重建/proc/mdstat能看到进度。重建期间千万别再动其他盘这时候阵列最脆弱。硬件 RAID 换盘类似用厂商工具把新盘设为 hot spare 或直接替换卡会自动重建。6.3 常见问题速查表现象可能原因排查方向阵列 degraded盘故障或掉线查 dmesg、mdadm --detail重建卡住盘有坏道查 smartctl考虑换盘性能远低于预期缓存策略、条带、对齐查阵列卡策略、分区对齐重启后阵列丢失配置未保存检查 mdadm.conf、initramfs写入延迟高Write-Through 或校验开销评估缓存电池、考虑 RAID 106.4 性能调优的几个实操技巧最后分享几个我实测有效的调优点。第一文件系统挂载参数。XFS 用noatime减少元数据写入数据库盘可以加nobarrier有电池保护时。第二IO 调度器。SSD 用none或mq-deadline机械盘用bfq。查看和修改cat /sys/block/sda/queue/scheduler echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler第三预读值。顺序读场景调大/sys/block/sda/queue/read_ahead_kb随机读场景调小。第四定期检查 SMART。smartctl -a /dev/sdb看盘的寿命和坏道提前发现隐患比事后救火强太多。sudo smartctl -H /dev/sdb sudo smartctl -A /dev/sdb | grep -E Reallocated|Pending|Uncorrectable这几个 SMART 属性一旦非零增长就该考虑换盘了。我在实际运维中的体会是RAID 配置这件事前期多花半小时想清楚选型和参数后期能省下无数个救火的夜晚。硬件识别是基础原理选型是方向实战配置是落地监控调优是长期保障四步缺一不可。尤其是缓存策略和条带大小这两个参数很多人配完就不管了其实它们对性能的影响远超想象。另外提醒一句无论 RAID 级别多高备份永远不能省——RAID 防的是硬件故障防不了误删、勒索和逻辑损坏这是两码事。
阅读完成 · 觉得有帮助?