
服务器选型最容易翻车的环节往往不是 CPU 和内存而是磁盘。CPU 不够可以堆核内存不够可以加条但磁盘的接口类型、RAID 级别、文件系统布局一旦定错后期改造成本非常高。尤其在高并发业务、数据库场景、日志采集场景里磁盘直接决定响应延迟和吞吐上限。这次我们从服务器磁盘选型讲到 Linux 磁盘管理的完整落地流程包括设备识别、分区格式化、RAID 与 LVM 配置、性能测试、故障排查和长期运维适合刚接手服务器运维的人也适合准备采购新机器但要自己定配置的开发同学。1. 核心能力速览能力项说明覆盖范围服务器磁盘选型、Linux 磁盘初始化、RAID/LVM、监控与故障排查适用系统主流 Linux 发行版CentOS 7/8、Rocky Linux、Ubuntu Server、Debian 均适用磁盘类型SATA HDD、SAS HDD、SATA SSD、NVMe SSD、云盘、本地盘、SAN/iSCSI核心命令集lsblk、fdisk、parted、mkfs、mount、mdadm、pvcreate/vgcreate/lvcreate、smartctl、iostat、fioRAID 级别RAID0、RAID1、RAID5、RAID10以及硬件 RAID 与软件 RAID 的区别文件系统ext4、xfs、btrfs按场景选择业务目标让读者能独立完成新服务器磁盘规划、初始化和日常运维适用场景数据库、文件存储、日志采集、对象存储、容器集群、虚拟化宿主机这是一篇偏“操作 决策”的文章不是某个开源项目的介绍所以没有一键启动脚本也没有 WebUI。读者需要的是对磁盘的整体掌控能力。2. 服务器磁盘选型先确定业务模型再定配置服务器选型时CPU、内存通常容易量化但磁盘选型需要先回答三个问题业务是读多还是写多数据量大概多大对延迟敏感到什么程度2.1 磁盘类型怎么选磁盘类型典型特征适合场景SATA HDD容量大、成本低顺序读写可用随机读写差备份存储、归档数据、冷数据存储SAS HDD可靠性高支持双端口性能优于 SATA HDD传统数据库、虚拟化宿主机数据盘SATA SSD随机读写明显优于 HDD价格适中系统盘、日志盘、中等性能业务盘NVMe SSD低延迟、高吞吐适合高并发随机读写数据库事务日志、元数据存储、高性能缓存云盘ESSD/SSD/高效云盘按规格付费弹性扩容性能与规格挂钩云服务器数据盘、分布式数据库、容器持久化存储本地盘物理机直接挂载性能高但数据风险大临时数据处理、高性能计算、缓存节点很多新人在选型时只看“容量” 比如“我要 2TB 空间”结果买了一块 SATA HDD 给 MySQL 做数据盘。上线后才发现随机读写 IOPS 不够SQL 慢查询一大堆。所以选型必须从 IOPS、吞吐、容量、可靠性四个维度一起看。IOPS每秒读写次数主要影响数据库、消息队列这类大量小文件随机读写的场景。吞吐顺序读写带宽主要影响视频处理、日志转储、数据导入导出。容量按数据增长预测来定不要只看当前数据量要预留 20% 到 30% 余量。可靠性涉及 RAID 级别、备份策略、磁盘健康监测。2.2 按场景推荐配置以下配置不是绝对标准而是常见的可落地组合实际采购时需要结合具体品牌型号和预算。业务场景推荐磁盘方案备注Web 服务器 / 应用节点系统盘用 SATA SSD数据盘用云盘或 SSD部署简单成本可控MySQL / PostgreSQL 单机OS 独立盘数据盘 NVMe 或 SSD日志盘单独划分高并发场景建议 NVMe大数据 HDFS / ES多块大容量 HDD 组合PB 级场景使用对象存储更关注容量和吞吐日志采集 / Kafka多块 SSD 组成 RAID0 或独立数据盘保留足够内存页缓存顺序追加为主SSD 寿命更稳虚拟化宿主机系统盘 SSD虚拟机数据盘根据业务再分避免所有虚拟机共用一块 HDD备份服务器HDD 大容量阵列搭配 NAS 或存储服务器对随机性能要求低采购之前务必确认服务器是否支持热插拔磁盘、是否有 RAID 卡、RAID 卡缓存是否带电池保护BBU。没有电池保护的 RAID 卡在突然断电时可能丢数据这个坑很多人踩过。2.3 云服务器和物理机的磁盘差异云服务器通常通过块存储服务提供云盘性能与规格、账号类型相关扩容需要到控制台操作底层故障由云厂商负责一部分。物理机或裸金属服务器则是直接使用本地盘性能更稳定且可预测但硬件故障、磁盘坏道都需要自己处理。如果业务对延迟极度敏感比如金融交易、实时推荐系统建议优先考虑 NVMe 本地盘。如果业务规模不大云盘 定期快照是性价比最高的组合。3. 环境准备与前置条件拿到一台新服务器不管是物理机还是云服务器都要先确认操作系统、磁盘设备列表和必要工具是否就位。3.1 最小环境清单检查项说明操作系统CentOS 7、Rocky Linux 8/9、Ubuntu 22.04/24.04 等均可内核版本不同会影响 NVMe 和文件系统特性磁盘设备执行lsblk查看设备列表确认新盘是否被系统识别必要依赖包lvm2、mdadm、smartmontools、sysstat、xfsprogs、e2fsprogs网络要求如果使用 yum/apt 安装工具需要能访问软件源备份条件操作磁盘前确认数据不需要保留或已有完整备份3.2 安装常用磁盘管理工具CentOS / Rocky Linux 使用 yumyum install -y lvm2 mdadm smartmontools sysstat xfsprogs e2fsprogsUbuntu / Debian 使用 aptapt update apt install -y lvm2 mdadm smartmontools sysstat xfsprogs e2fsprogs如果服务器是云环境且没有物理 RAID 卡可以在系统层面做 mdadm 软件 RAID也可以直接使用 LVM 做逻辑卷管理。实际生产环境里更常见的是云盘直接做 ext4/xfs 文件系统再挂载到数据目录物理机才更关注 RAID。3.3 确认磁盘设备状态先查看当前磁盘信息lsblk效果示例NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 2G 0 part /boot ├─sda2 8:2 0 50G 0 part / └─sda3 8:3 0 48G 0 part /data sdb 8:16 0 500G 0 disk如果lsblk看不到某个磁盘先检查云盘是否在控制台挂载物理磁盘是否插好硬件 RAID 卡是否已经正确组 RAID内核日志里有没有磁盘错误信息执行dmesg | grep sd查看4. Linux 磁盘初始化分区、格式化、挂载新磁盘插入系统后需要完成识别、分区、格式化、挂载四个步骤。这是最基础的日常操作也是故障率最高的环节。4.1 使用 fdisk 进行分区以/dev/sdb为例创建 GPT 分区表并新建一个主分区fdisk /dev/sdb交互命令g # 创建 GPT 分区表 n # 新建分区 p # 主分区 1 # 分区号 回车 # 使用默认起始扇区 回车 # 使用默认结束扇区 w # 写入分区表分区完成后执行partprobe让内核重新读取分区表partprobe /dev/sdb lsblk如果不需要分区也可以在大于 2TB 的磁盘上直接对整块磁盘创建文件系统但这种方式后续扩容和识别不够灵活建议按分区规划。4.2 使用 parted 创建 GPT 分区表某些发行版或磁盘容量较大时fdisk 交互不够方便可以使用 partedparted /dev/sdc --script mklabel gpt parted /dev/sdc --script mkpart primary 1MiB 100% partprobe /dev/sdc这里把整块磁盘划成一个分区。优点是命令固定、容易写进初始化脚本缺点是少了一层分区表缓冲。如果计划做 LVM建议分区时把分区类型设为 Linux LVM。4.3 格式化文件系统文件系统按场景选择xfs适合大文件、顺序读写扩容方便大多数 Linux 发行版默认推荐ext4兼容性好适合通用业务小文件表现不错btrfs支持快照和压缩但生产环境要确认运维团队熟练度mkfs.xfs /dev/sdb1 mkfs.ext4 /dev/sdb1格式化前必须确认设备路径正确避免把系统盘格式化掉。执行完mkfs后原有分区数据不可恢复。4.4 临时挂载mkdir -p /data mount /dev/sdb1 /data df -h4.5 永久挂载与 fstab推荐使用 UUID 挂载避免设备路径变化导致服务器重启后挂载失败。查看 UUIDblkid /dev/sdb1编辑/etc/fstabvim /etc/fstab添加一行UUIDxxxx-xxxx /data xfs defaults 0 2校验 fstab 配置是否正确mount -a如果挂载报错不要重启机器先检查 UUID 是否写错文件系统类型是否对上。defaults后面的0 2表示 dump 不做备份、fsck 在开机时检查非根文件系统。如果是不需要开机检查的独立数据盘可以写成0 0。4.6 创建 Swap 分区内存压力较大的服务器通常配置 swap。如果磁盘不紧张可以创建一个 4GB 的 swap 文件fallocate -l 4G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo /swapfile none swap sw 0 0 /etc/fstab注意云服务器如果开启了内核内存压缩swap 使用要谨慎数据库场景一般建议先优化查询和缓存而不是依赖 swap。5. RAID 与 LVM性能、容量和冗余的平衡磁盘选型之后如何组合磁盘是另一个关键点。RAID 解决的是冗余和性能LVM 解决的是逻辑卷的弹性扩容。两者可以组合使用也可以独立使用。5.1 常见 RAID 级别对比RAID 级别最少磁盘容错能力容量利用率适用场景RAID02无100%临时数据、缓存追求速度可以承受数据丢失RAID121 块盘故障50%系统盘、数据库日志盘RAID531 块盘故障(N-1)/N一般数据盘兼顾容量与可靠性RAID642 块盘故障(N-2)/N大容量数据盘重建可靠性要求高RAID104每组镜像盘可坏 1 块50%数据库高性能环境兼顾性能与冗余硬件 RAID 在 BIOS 或 RAID 卡界面配置软件 RAID 使用 mdadm。云服务器一般无法配置本地硬件 RAID但可以用 mdadm 在云盘之间组 RAID这种做法常用于提高文件系统的可用性但不会增加云厂商层面的数据冗余。5.2 使用 mdadm 创建 RAID10假设有四块新盘/dev/sdd、/dev/sde、/dev/sdf、/dev/sdg创建 RAID10mdadm --create /dev/md0 --level10 --raid-devices4 /dev/sdd /dev/sde /dev/sdf /dev/sdg创建时加--verbose可查看过程。等待同步完成后查看状态cat /proc/mdstat mdadm --detail /dev/md0然后将 RAID 设备格式化为文件系统并挂载mkfs.xfs /dev/md0 mkdir -p /data mount /dev/md0 /data把 RAID 配置写入 mdadm.conf避免重启后阵列信息丢失mdadm --detail --scan /etc/mdadm.conf5.3 LVM 逻辑卷管理LVM 适合需要经常扩容的场景。比如数据库数据目录今天 500GB下个月要 700GB使用 LVM 可以在线扩容。创建 PV、VG、LVpvcreate /dev/sdb1 /dev/sdc1 vgcreate vg_data /dev/sdb1 /dev/sdc1 lvcreate -L 200G -n lv_data vg_data格式化并挂载mkfs.xfs /dev/vg_data/lv_data mkdir -p /data mount /dev/vg_data/lv_data /data查看 LVM 信息pvs vgs lvs给逻辑卷扩容 50Glvextend -L 50G /dev/vg_data/lv_data xfs_growfs /dataext4 文件系统使用resize2fs /dev/vg_data/lv_data扩容xfs 使用xfs_growfs /data挂载状态下执行即可。5.4 RAID 与 LVM 组合建议物理机大数据量场景常见做法是先硬件 RAID 或 mdadm 做 RAID 阵列再在阵列之上做 LVM最后创建文件系统。这样既获得 RAID 的冗余又能利用 LVM 的在线扩容。不过层数越多故障排查复杂度越高磁盘性能也会有一定损耗。小规模场景直接用 LVM 或直接分区挂载更省心。6. 磁盘性能测试与监控用数据验证选型磁盘选型和配置完成后必须用实际测试验证性能不能只看型号参数。这里重点介绍两块工具fio 和 sysstat。6.1 使用 dd 做粗测快速验证一块磁盘的顺序写入能力dd if/dev/zero of/data/testfile bs1M count1024 convfdatasync这条命令会写入 1GB 数据convfdatasync强制写入磁盘后再返回得到的 is 就是磁盘顺序写入吞吐的初步参考值。注意 dd 的结果不稳定正式性能验收建议用 fio。6.2 使用 fio 做标准性能测试fio 是 Linux 下最常用的磁盘性能测试工具可以自定义块大小、队列深度、读写比例、IO 引擎。顺序读测试fio --nameseqread --filename/data/fio_test --rwread --bs128k --size1G --numjobs1 --runtime30 --group_reporting随机写测试fio --namerandwrite --filename/data/fio_test --rwrandwrite --bs4k --size1G --numjobs4 --iodepth32 --runtime30 --group_reporting测试完成后删除测试文件rm -f /data/fio_test执行 fio 时filename不要放在系统盘根目录否则测试结果受系统日志影响。测试文件大小要超过 RAID 缓存或磁盘缓存一般 1G 起数据盘越大测试时间越长。6.3 在线监控iostat、iotop、sariostat -x 2iostat -x可以查看每块磁盘的%util、r/s、w/s、await。%util接近 100% 不代表坏了但说明磁盘已经成为瓶颈。iotop -oPiotop可以查看每个进程的实时 IO。无 root 权限时无法看到系统全量数据生产环境建议用sudo或iotop -o观察进程。sar -d 2 10sar -d可以连续 10 次采样磁盘设备运行情况。日常巡检建议把 sar 采集打开留存历史数据方便定位偶发性磁盘瓶颈。6.4 磁盘健康检查物理机最怕坏盘没有任何提示。smartctl 可以在磁盘出现坏道前抓取 S.M.A.R.T. 信息。查看整体健康状态smartctl -H /dev/sda查看详细信息smartctl -a /dev/sda对于 NVMe 磁盘使用smartctl -a /dev/nvme0一次结果里如果看到Media_Wearout_Indicator或Available_Spare接近临界值说明寿命开销严重需要尽快更换。机械盘重点看Reallocated_Sector_Ct、Current_Pending_Sector和Uncorrectable_Sector_Ct数值非零越高越危险。7. 磁盘故障排查与数据安全运维工作一半时间在处理“空间满”“磁盘慢”“文件删了但空间没释放”这类问题。下面按现象给出排查思路。7.1 磁盘空间满了df -h先看哪个挂载点使用率高。找到大文件目录du -sh /data/* | sort -rh | head -20如果df -h显示满了但du算出来占用远小于该分区说明有文件被进程持有但已经删除。用lsof查看占用已删除文件的进程lsof L1 | grep deleted找到进程后确认是否能重启或释放删除文件后空间通常不会立即恢复必须重启占用进程才能释放 inode。云盘场景下如果有快照功能可以在删除大文件前先做快照避免误删。7.2 inode 满了但空间还有余量df -idf -i显示 inode 使用率接近 100% 时即使磁盘还有空间也无法创建新文件。常见原因是小文件过多比如日志轮转失败、消息队列积压、缓存目录不清理。排查方法for i in /data/*; do echo -n $i: ; find $i | wc -l; done | sort -t: -k2 -n -r找到小文件数量最多的目录后删除超过保留时间的临时文件。应用层也要加日志清理策略建议每天定时清理超过 30 天的日志。7.3 磁盘性能突然变差可能原因磁盘坏道导致频繁重试RAID 阵列正在同步或重建同物理机的其他业务 IO 抢占磁盘缓存策略异常writeback 参数被修改文件系统碎片化严重ext4 场景排查步骤执行iostat -x 1观察svctm、await、%util找到异常盘。执行smartctl -a确认磁盘健康数据没有明显异常。如果物理机有 RAID 卡进入 RAID 管理界面查看阵列状态无界面时看dmesg | grep -i raid或megacli输出。用fio对问题盘做只读测试评估实际性能是否达标。在云服务器上磁盘性能还受到云厂商实例规格、IOPS 上限和存储类型影响。如果fio结果稳定但业务仍然慢可能是业务侧 SQL、缓存命中率、网络 IO 的问题不能全部归因于磁盘。7.4 数据安全与备份要求本文所有操作都可能在磁盘上造成不可逆的数据丢失。在规划分区、格式化、RAID 重建前必须做到先确认磁盘上是否还有需要保留的业务数据对操作系统和应用配置做完整备份云盘开启快照物理机定期异地备份测试环境验证命令和参数后再对生产环境执行涉及业务数据的存储、访问和备份必须符合企业数据安全规范和个人隐私保护要求强调一点RAID 不是备份。RAID1 和 RAID10 只能防单块磁盘故障不能防误删、病毒、软件 bug 和整机灾难。关键数据必须有多副本或异地备份。8. 常见问题与排查方法问题现象可能原因排查方式解决方案新盘插入后 lsblk 看不到云盘未挂载、驱动未加载、SAS 线缆故障dmesg | grep -i sd查看云控制台控制台挂载云盘或检查物理连接fdisk 分区时报“unrecognized disk label”旧分区表损坏或没有分区表fdisk -l /dev/sdb可以先备份再用 parted 重建 GPT 分区表格式化后挂载提示 “unknown filesystem type”文件系统类型写错或 tools 未安装blkid /dev/sdb1检查内核模块安装对应文件系统工具包如 xfsprogsfstab 配置错误导致开机失败UUID 写错、挂载参数错误blkid重新获取 UUID在救援模式或单用户模式修正 fstabRAID 创建后同步很慢磁盘数量多、数据闷、系统负载高cat /proc/mdstat查看进度降低 IO 优先级或等待同步完成不要中断 rebootLVM 扩容后 df 没有增加文件系统未扩容xfs_growfs或resize2fs未执行根据文件系统类型扩展文件系统磁盘空间满但删除文件后空间没释放进程仍持有已删除文件句柄lsof L1查看 deleted 文件重启占用文件的进程或 kill 该进程inode 使用率 100%小文件过多按目录统计文件数量清理历史文件应用增加轮转策略服务器重启后 RAID 丢失未保存 mdadm.confmdadm --detail --scan重新加入并通过mdadm --detail --scan /etc/mdadm.conf保存NVMe 盘性能过于乐观测试使用了页面缓存fio 指定--direct1直接 IO 绕过缓存重新测试smartctl 显示磁盘健康值高坏道或寿命到达阈值查看 Reallocated_Sector_Ct 等指标立即备份更换磁盘9. 最佳实践与服务器磁盘配置建议从选型到运维建议按下面的顺序形成一套自己的规范。9.1 新服务器磁盘初始化标准流程在控制台或物理机上确认系统盘和新增数据盘。使用lsblk确认所有设备已经可见。根据业务选型确定是否做 RAID、是否使用 LVM。使用 parted 创建 GPT 分区表明确分区用途。创建文件系统xfs 优先。使用 UUID 加入/etc/fstab执行mount -a验证。写入 mdadm.conf保存 LVM 配置文件记录磁盘序列号。执行 fio 测试记录基线性能数据。配置 cron 定期执行磁盘巡检命令输出日志到/var/log/disk-check。9.2 磁盘目录规划不要把业务数据全都塞进一个分区。推荐一个独立服务器的最小规划目录/分区建议类型说明/SSD50G - 100G系统和基础软件/bootSSD2G - 4G引导分区/var/logSSD 或独立日志盘避免日志写满系统盘/data按业务选型RAID/LVM 后挂载业务数据、应用数据swap视内存和业务内存不足时兜底生产环境建议将日志目录独立挂载尤其当应用日志量很大时可以避免/分区写满导致系统异常。9.3 监控与告警磁盘监控至少覆盖以下指标空间使用率超过 80% 告警inode 使用率超过 80% 告警磁盘 IO 延迟异常上升SMART 健康状态异常文件系统只读错误可以写一个简单的巡检脚本配合 crontab 执行#!/bin/bash LOG/var/log/disk-check.log df -h | grep -vE ^Filesystem|tmpfs $LOG df -i | grep -vE ^Filesystem|tmpfs $LOG smartctl -H /dev/sda $LOG iostat -x 1 5 $LOG如果是云服务器可以结合云监控平台告警物理机要自己确保监控服务可用。9.4 从小规模验证开始新环境不要一上来就追求最复杂的技术栈。我的建议是单机小业务一个 SSD 系统盘 一个数据盘不做 RAID数据依赖云快照或备份。核心数据库系统盘 SSD数据盘 NVMeRAID10数据目录用 LVM 方便扩容。日志类业务多块 SSD 独立挂载利用消息队列缓冲减少单点损耗。大规模分布式场景优先考虑分布式存储或对象存储不要在同一台机器上用几十块盘拼容量。10. 总结与建议服务器磁盘选型和管理本质上是在容量、性能、可靠性和成本之间做权衡。没有一套配置适用所有业务关键在于先搞清楚业务的 IO 模型再决定磁盘类型和冗余策略。拿到新服务器后应按“识别设备、分区、格式化、挂载、测试、监控”的顺序标准化落地避免每次靠记忆敲命令。最值得先验证的一定是挂载和扩容流程。先拿一块临时盘做一遍mkfs、mount、umount、fstab写入和lvextend扩容确认每一步都清楚后再操作生产磁盘。最容易踩的坑是 fstab 写错导致开机失败以及格式化时选错盘符这两类问题都会带来灾难性后果。后续可以继续深入的方向包括基于 systemd 的定时巡检、基于 prometheus node_exporter 的磁盘监控面板、文件系统性能调优参数、硬件 RAID 卡电池和缓存策略、NVMe over TCP 和远程存储接入。先把本文的基础操作跑通再一步步扩展成一套完整的磁盘运维体系。