从HDD到NVMe 4.0,服务器磁盘I/O优化先升级哪一层?
服务器磁盘 I/O 优化不应一开始就把 HDD 更换成 NVMe 4.0。更稳妥的升级顺序是:先确认内存是否导致频繁换入换出,再判断应用、文件系统和块设备队列是否合理;只有在本地存储延迟和队列确实成为主要瓶颈时,才升级磁盘介质。CPU 只有在计算或系统调用已经饱和时优先升级,网络只有在数据路径经过远程存储或网络文件系统时才应进入前排,架构拆分则通常放在单机和单设备优化之后。
目标状态不是单纯提高某个 IOPS 数字,而是在相同业务负载下,让应用 I/O 延迟、队列长度和错误率保持可控。以下步骤适用于常见 Linux 服务器,涉及迁移或覆盖配置时,应先完成备份、确认维护窗口,并保留原磁盘或原配置作为回滚依据。
先确定哪一层应该优先升级
可以先用下面的判断表排优先级。表中的数值是便于理解的参考现象,不是所有服务器都适用的固定阈值。
| 监控现象 | 优先处理层 | 典型动作 | 不应直接做的事 |
|---|---|---|---|
si/so 持续有数值,内存可用量低,内存 PSI 上升 | 内存 | 增加内存、减少不必要缓存或进程、控制并发 | 先换 NVMe |
本地磁盘 await 高、队列持续增长,CPU 和内存正常 | 磁盘与块设备 | 优化 I/O 模式,再从 HDD 升级到 SSD 或 NVMe | 只看 %util 就换盘 |
CPU usr/sys 长时间接近满载,磁盘延迟并不高 | CPU 或应用层 | 调整线程、批处理、锁竞争和计算逻辑 | 通过增加 I/O 深度掩盖 CPU 瓶颈 |
| 远程存储访问延迟高,网卡接近带宽上限或出现丢包 | 网络与远程存储路径 | 检查网卡、链路、MTU、远程存储服务 | 把网络等待误判成本地磁盘性能 |
| 单机设备和网络都未饱和,但热点数据、写入日志或单队列持续拥堵 | 架构层 | 缓存、冷热分层、读写拆分、分片或多节点 | 无限提高单块磁盘规格 |
| HDD 顺序吞吐尚可,但小块随机读写和同步写延迟高 | 存储介质 | 优先考虑 SATA SSD 或 NVMe | 用顺序读测试结果代表业务体验 |
| NVMe 已经低延迟,但应用 P95 仍高 | 应用、CPU、网络或架构 | 回到请求链路定位 | 继续购买更高规格 NVMe |
在多数本地存储场景中,可以采用这样的默认顺序:
- 采集基线,确认等待发生在哪里。
- 排除内存不足和交换分区抖动。
- 检查应用、文件系统和块设备队列。
- 确认本地磁盘介质是否已经成为主要瓶颈。
- 如果使用远程存储,再处理网络路径。
- CPU 仅在计算或系统调用饱和时提前。
- 单机优化收益变小时,再调整架构。
这不是不可改变的线性流程。监控结果比“先买哪种盘”更重要。
操作前的准备条件
建立可回看的基线
至少记录一次正常业务时段和一次高峰时段的以下指标:
- 应用请求的平均延迟、P95、P99。
- 磁盘读写吞吐、
await、读写队列长度和错误数。 - CPU 用户态、系统态、I/O 等待和运行队列。
- 内存可用量、页面回收、交换分区读写。
- 如果使用远程存储,记录网卡吞吐、丢包、重传和连接延迟。
- 当前磁盘设备、文件系统、挂载点和挂载参数。
常见工具由 sysstat、iproute2、util-linux 等软件包提供。先确认工具是否存在,不要在生产环境临时安装大量诊断组件。
command -v iostat vmstat pidstat mpstat lsblk findmnt ip ethtool
采集主机整体状态:
iostat -xz 1 10
vmstat 1 10
mpstat -P ALL 1 10
pidstat -d -u 1 10
查看磁盘与挂载关系:
lsblk -e7 -o NAME,TYPE,ROTA,SIZE,FSTYPE,MOUNTPOINTS,MODEL,TRAN
df -hT
findmnt -no SOURCE,TARGET,FSTYPE,OPTIONS /data
将 /data 替换为实际业务挂载点。不要只记录一次瞬时输出,最好把结果保存到带时间戳的文件中,并与升级后的相同负载测试结果进行比较。
确认迁移条件
如果准备从 HDD 迁移到 SATA SSD 或 NVMe 4.0,至少满足以下条件:
- 已完成应用一致性备份,数据库或日志型业务不能只复制正在变化的文件。
- 新盘容量不小于有效数据量,并预留增长空间。
- 已确认服务器主板、CPU 或扩展卡提供相应的 PCIe 插槽和通道。
- 已确认系统内核、文件系统和启动方式能够识别新设备。
- 已规划维护窗口,能够短暂停止写入或切换到副本。
- 原磁盘暂时保留,不在首次验证前删除或重新格式化。
- 已记录原挂载点、UUID、文件系统参数和服务启动顺序。
新盘检查通常使用只读命令:
lsblk -d -o NAME,ROTA,SIZE,MODEL,SERIAL,TRAN
sudo blkid
sudo nvme list
lspci | grep -i -E 'non-volatile|nvme'
nvme list 不一定随系统默认安装。如果命令不存在,不要根据设备名猜测磁盘类型,应先安装与当前发行版匹配的管理工具,或者使用 lsblk 和内核日志核对。
七层拆解:从监控结果到升级动作
第1层:建立 I/O 基线,而不是先购买磁盘
iostat -xz 中的几个字段需要结合起来看:
r/s、w/s:每秒读写请求数。rkB/s、wkB/s:每秒读写数据量。r_await、w_await:读写请求从提交到完成的平均等待时间,通常以毫秒显示。aqu-sz或avgqu-sz:平均队列长度。%util:设备处于忙碌状态的时间比例。svctm:部分旧版本工具会显示该字段,不建议单独依赖。
例如,某块 HDD 的 %util 接近 100%,await 达到几十毫秒,同时队列持续增长,而 CPU 和内存还有余量,这更像是本地随机 I/O 受限。相反,如果 NVMe 的 %util 较高但 await 仍低、队列不增长,说明设备可能在高并发下正常工作,不能仅凭 %util 判断需要换盘。
iowait 也不能直接证明磁盘是唯一瓶颈。进程可能在等待网络文件系统、内存换页、数据库锁或远程块存储。需要使用进程级数据和设备级数据交叉确认:
pidstat -d -p ALL 1 10
cat /proc/pressure/io
cat /proc/pressure/memory
判断规则可以简化为:
- 设备
await高,队列不断增长,且请求主要来自本地业务进程:优先处理存储路径。 - 设备延迟不高,但进程系统态 CPU 高:优先检查系统调用、锁和 I/O 提交方式。
- I/O 设备正常,应用延迟仍高:转向 CPU、网络、数据库内部队列或架构。
- 只有高峰期出现问题:记录并发数、请求大小和读写比例,不能用空闲时段的结果替代。
第2层:确认 CPU 是否限制了 I/O 请求生成
CPU 不是磁盘 I/O 的默认升级项,但在以下情况中可能成为先决条件:
- 用户态或系统态 CPU 持续接近满载。
- 运行队列长期大于可用 CPU 核数。
- 磁盘延迟并不高,但应用线程无法及时提交请求。
- 大量小文件、压缩、加密、校验或系统调用消耗 CPU。
- 增加磁盘并发后,CPU 使用率先达到上限,磁盘利用率反而没有明显提升。
先看每个 CPU 核心的状态:
mpstat -P ALL 1 10
vmstat 1 10
pidstat -u -d 1 10
如果 sys 较高,常见方向包括小块 I/O 过多、上下文切换频繁、文件系统元数据操作密集或应用重复调用同步接口。如果 usr 较高,则可能是业务计算、压缩、序列化或数据处理占用了处理器。
这一层的优化顺序通常是:
- 减少不必要的小块读写和重复扫描。
- 合并批量请求,避免每条记录都触发一次同步操作。
- 调整应用工作线程数量,防止线程数超过 CPU 和存储能够承受的范围。
- 确认锁竞争和上下文切换是否导致系统态 CPU 偏高。
- 在上述问题排除后,才评估增加 CPU 核数或提升处理器性能。
如果 CPU 长时间空闲、磁盘队列已经很长,那么升级 CPU 通常不能缩短磁盘服务时间。
第3层:先排除内存不足和交换抖动
内存不足会把原本的文件访问转化为页面换入换出,也可能导致文件缓存频繁失效。此时直接升级磁盘容易得到“基准测试变快、业务仍然抖动”的结果。
检查内存和交换区:
free -h
swapon --show
vmstat 1 10
cat /proc/pressure/memory
重点观察:
vmstat中的si、so是否持续有值,而不是偶发变化。free -h中的available是否在业务高峰持续偏低。- 内存 PSI 是否持续升高。
- 应用工作集是否明显大于当前可用内存。
- 文件缓存是否被大量回收,导致相同数据反复从磁盘读取。
当交换区持续读写时,优先增加内存或降低应用并发,通常比把 HDD 换成 NVMe 更有效。NVMe 能降低换页延迟,但不能消除内存压力,也不能替代足够的工作集容量。
vm.swappiness 可以作为调优参数观察,但不应把它当成增加内存的替代方案。先记录旧值:
sysctl vm.swappiness
如果要在维护窗口内做临时验证,只改变运行时参数,并记录变更前后的业务指标:
sudo sysctl -w vm.swappiness=10
这里的 10 只是示例,不适合作为所有系统的固定值。回滚时恢复记录的旧值:
sudo sysctl -w vm.swappiness=<原值>
不要为了“降低 I/O”直接关闭交换区或强制清空缓存。清空缓存会影响整台主机上的其他服务,不能作为普通生产调优动作。
第4层:检查应用、文件系统和块设备队列
同一块磁盘,在顺序读写、随机读写、同步写和异步批量写下的表现可能完全不同。HDD 往往受寻道和旋转延迟影响,NVMe 则更容易受请求大小、队列深度、写入放大、温度和同步语义影响。
先确认实际请求特征:
pidstat -d 1 10
iostat -xz 1 10
findmnt -no SOURCE,TARGET,FSTYPE,OPTIONS /data
需要重点核对:
- 读写是否以 4 KiB、8 KiB 等小块随机请求为主。
- 是否每个请求都要求持久化完成。
- 队列深度是否过低,导致高并行设备没有被充分利用。
- 队列深度是否过高,导致应用延迟排队。
- 文件系统是否频繁更新访问时间或元数据。
- 应用是否把临时文件、日志、数据文件全部放在同一设备上。
查看设备当前调度器和队列参数:
DEV=nvme0n1
cat /sys/block/"$DEV"/queue/scheduler
cat /sys/block/"$DEV"/queue/nr_requests
cat /sys/block/"$DEV"/queue/read_ahead_kb
常见情况下,NVMe 可能使用 none 或 mq-deadline,HDD 和部分 SATA SSD 可能更适合保留带请求调度能力的方案,但最终应以实际工作负载测试为准。不要因为看到某个调度器名称就直接修改所有设备。
临时切换调度器前,先确认当前输出中的可选项,并在测试设备或维护窗口中操作:
DEV=nvme0n1
cat /sys/block/"$DEV"/queue/scheduler
# 只有当上一个命令显示 none 可选时,才执行下面的示例
echo none | sudo tee /sys/block/"$DEV"/queue/scheduler
这种写入通常只对当前运行周期有效,重启后可能恢复。回滚时选择原先记录的调度器,例如:
echo mq-deadline | sudo tee /sys/block/"$DEV"/queue/scheduler
实际回滚值必须替换为变更前的值。该操作影响指定设备的请求排序,不应在未确认设备名的情况下执行。
文件系统挂载参数也要谨慎处理。如果业务不依赖高精度访问时间,可以在维护窗口规划 noatime;但不能直接复制到所有应用。先检查现状:
findmnt -no SOURCE,TARGET,FSTYPE,OPTIONS /data
如果应用、备份程序或合规流程依赖访问时间,应保留原参数。不要为了追求测试分数关闭持久化语义,例如数据库的 fsync、日志提交或写缓存保护。降低数据安全换取更低延迟,不属于可靠的 I/O 优化。
第5层:在确认本地存储受限后,再从 HDD 升级到 NVMe 4.0
存储介质的选择可以按业务特征理解:

| 介质 | 主要特征 | 更适合的场景 | 主要限制 |
|---|---|---|---|
| HDD | 顺序读写成本较低,随机访问延迟受寻道影响明显 | 大容量、低并发、顺序归档 | 小块随机 I/O 和同步写延迟较高 |
| SATA SSD | 随机访问延迟明显低于 HDD,接口可能成为上限 | 常规业务、系统盘、中等并发数据盘 | 并发和带宽通常受 SATA 链路约束 |
| NVMe 4.0 | 使用 PCIe 通道和 NVMe 协议,支持更高并行度和更低协议开销 | 高并发随机 I/O、日志、缓存、低延迟数据服务 | 需要匹配插槽和通道,温度、写入耐久度和应用模式仍会限制收益 |
这些是介质层面的典型差异,不代表任何具体型号的官方规格或固定性能。NVMe 4.0 也不是“插上就一定更快”:如果应用只有单线程同步写、CPU 已满载、数据在远程存储上,或者工作集大部分命中内存缓存,更快的本地盘可能无法反映到业务延迟上。
用安全方式做性能对比
不要直接对生产裸设备运行写入型测试。准备测试时应使用专用测试挂载点或测试文件,确保测试文件大小不超过可用空间,并确认业务影响范围。
下面是一个以测试挂载点为目标的示例:
sudo install -d -m 0750 /data/fio-test
sudo fio \
--name=randread \
--filename=/data/fio-test/testfile \
--size=4G \
--rw=randread \
--bs=4k \
--ioengine=libaio \
--direct=1 \
--iodepth=32 \
--numjobs=1 \
--runtime=60 \
--time_based \
--group_reporting
该命令会在 /data/fio-test 创建并读取测试文件,可能占用空间并影响同一文件系统上的业务。生产环境应缩小测试规模或在隔离设备上执行。不要把 /dev/sda、/dev/nvme0n1 等裸设备直接填入 --filename,否则可能覆盖分区或文件系统。
至少分别测试以下类型:
- 顺序读写:观察吞吐能力。
- 小块随机读:观察查询、索引和缓存未命中场景。
- 小块随机写:观察日志、队列和元数据压力。
- 混合读写:接近实际业务的访问比例。
- 同步写:观察真实持久化延迟,但需要明确其业务含义。
测试结果要和应用监控结合。某个设备在 fio 中达到较高 IOPS,并不代表数据库、日志服务或文件扫描任务一定能获得相同收益。
迁移到新盘的低风险流程
下面以旧数据挂载点 /data、新盘临时挂载点 /mnt/newdata 为例。实际服务名和设备路径必须替换成现场值。

- 记录旧盘信息并备份挂载配置。
findmnt /data
sudo blkid
sudo cp -a /etc/fstab /etc/fstab.bak.$(date +%F-%H%M%S)
- 在确认设备路径后,创建文件系统并挂载新盘。格式化会清除目标设备上的数据,只能对已确认的空盘执行。
sudo mkfs.xfs /dev/
sudo mkdir -p /mnt/newdata
sudo mount /dev/ /mnt/newdata
如果业务要求使用 ext4、LVM 或其他文件系统,应按照现有运维规范执行,不要机械使用示例中的 XFS。
- 先复制一轮静态或低变化数据。
sudo rsync -aHAX --numeric-ids /data/ /mnt/newdata/
rsync 的源路径和目标路径必须再次核对。源路径末尾的 / 表示复制目录内容,错误填写可能导致目录层级不符合预期。
- 进入维护窗口,停止写入服务或切换到副本,再执行最终同步。若使用带
--delete的镜像同步,必须确认目标目录是专用空目录,并且已经有可恢复备份;该参数会删除目标中源目录不存在的文件。
sudo systemctl stop
sudo rsync -aHAX --numeric-ids --delete /data/ /mnt/newdata/
- 检查权限、属主、容量和关键文件后,再切换挂载点。优先使用 UUID 或稳定的设备标识,不要长期依赖可能变化的
/dev/sdX名称。
sudo blkid /dev/
sudo findmnt /mnt/newdata
sudo df -hT /mnt/newdata
- 完成切换后,保留旧盘,不要立即格式化。先卸载临时挂载点,并按维护方案将新盘挂载到正式路径,再启动服务。
sudo umount /mnt/newdata
sudo mount /dev/disk/by-uuid/ /data
sudo findmnt /data
sudo systemctl start
对于数据库、消息队列或持续写入的日志系统,文件级复制不一定能保证一致性。应优先使用应用自身的备份、复制或快照机制;如果无法确认一致性,就不要仅凭 rsync 完成生产切换。
第6层:只有远程存储场景才优先处理网络
如果业务数据位于本地 HDD、SATA SSD 或 NVMe 上,网络通常只承载客户端请求,不在磁盘数据路径中。此时把网卡升级到更高速率,通常不能降低本地磁盘等待。
如果使用 NFS、iSCSI、分布式块存储或其他远程存储,则需要把网络纳入 I/O 链路。检查网卡统计和链路状态:
ip -s link show dev eth0
ethtool eth0
sar -n DEV 1 10
如果系统支持,还可以查看驱动统计:
ethtool -S eth0 | egrep -i 'drop|error|crc|timeout|pause|retrans'
需要关注:
- 网卡吞吐是否接近链路上限。
- 接收或发送丢包、CRC 错误、队列溢出是否增加。
- 远程存储请求延迟是否与网络抖动同步。
- 多个业务是否共享同一链路。
- MTU、链路协商和流控设置是否与两端一致。
带宽换算时要区分单位。假设需要传输十进制的 1 GB 数据,耗时 10 秒,则平均速率为:
1 GB × 8 × 1000 ÷ 10 秒 = 800 Mbps
不能把 GB/s 直接当成 Gbps,也不能混用 MB、Mb 和 Mbps。对于远程存储,网络带宽只是上限,往返延迟、服务端队列和协议行为同样会影响应用 I/O 延迟。
如果本地磁盘延迟很低、网络存在丢包或重传,应先修复链路和远程存储路径,而不是继续升级本地 NVMe。
第7层:单机优化收益有限后,再处理架构层
当内存、CPU、本地盘和网络都没有明显饱和,但业务仍有持续 I/O 峰值,通常说明问题已经从设备层转向工作负载组织方式。常见架构动作包括:
- 把高频热点数据放入合适的缓存层。
- 将临时文件、日志、索引和主数据分开,避免相互争用。
- 将冷数据和热数据分层存放。
- 把读请求和写请求分开调度。
- 通过分片或分区降低单设备上的工作集。
- 将不要求立即持久化的任务改为批量或异步处理。
- 为突发写入设置队列上限,避免把延迟传导到所有请求。
架构调整前必须确认数据一致性、失败重试和回放机制。异步化不能简单等同于“关闭同步写”,缓存也不能替代备份。建议先通过功能开关或小范围流量验证,保留原路径一段观察期,再逐步扩大范围。
如何根据实际监控决定升级顺序
下面是几个便于对照的示例场景,数据为说明判断方法的参考值。
场景一:HDD 随机读成为瓶颈
监控显示 CPU 使用率约 25%,内存可用量充足,交换区没有持续读写;本地 HDD 的随机读 await 约 20 至 40 毫秒,队列在高峰期持续增长,应用请求主要是小块随机读取。
此时优先级应是:
- 确认应用是否存在重复读取或过小 I/O。
- 如果访问模式合理,先从 HDD 升级到 SATA SSD。
- 如果并发度高、延迟目标更低且平台支持,再评估 NVMe 4.0。
- 用相同请求比例复测 P95、P99 和队列长度。
不需要先升级 CPU,也不需要在没有远程存储的情况下先升级网络。
场景二:I/O 等待高,但根因是内存不足
监控显示 iowait 上升,同时 vmstat 中 si/so 持续有值,内存 PSI 也在高峰期增加。此时磁盘可能只是被迫承接页面换入换出。
优先增加内存、降低工作集或调整进程并发。即使 NVMe 能把换页速度提高,系统仍会在内存压力下抖动,业务延迟也不稳定。
场景三:NVMe 延迟低,但应用仍慢
本地 NVMe 的 await 约 1 至 2 毫秒,队列没有持续增长,内存和网络正常;但 CPU 系统态占用较高,应用 P99 延迟仍然上升。
此时继续升级 NVMe 的收益有限,应检查小块 I/O 提交、锁竞争、线程数量、同步调用和应用内部队列。只有确认 CPU 核心已经饱和后,才将 CPU 升级提到前面。
场景四:远程存储受网络影响
应用访问的是远程块存储,主机本地设备并未饱和,但网卡发送队列增长、丢包计数增加,存储请求延迟与网络波动同时发生。
这时先处理网卡、链路和远程存储路径。更换本地 NVMe 不会消除远程请求的网络往返延迟。
升级后的结果验证
升级完成后,不能只运行一次 fio 就宣布成功。应使用与升级前相同的业务负载、请求比例、并发度和测试时长,分别验证冷缓存和热缓存场景。
主机与设备验证
findmnt /data
df -hT /data
lsblk -f
iostat -xz 1 60
vmstat 1 60
如果设备支持健康信息,可按工具实际支持情况检查:
sudo smartctl -a /dev/
sudo nvme smart-log /dev/nvme0n1
重点确认:
- 新设备确实挂载在预期路径。
- 文件系统类型、属主和权限没有改变。
- 没有新增 I/O 错误、超时、重置或文件系统错误。
- 磁盘延迟和队列在相同负载下下降,或者至少没有因并发提高而恶化。
- CPU 没有因为更快的存储而成为新的饱和点。
- 内存没有因缓存扩大而出现交换抖动。
- 如果使用远程存储,网络没有出现新的丢包和重传。
查看内核和服务日志:
sudo journalctl -k -n 100 --no-pager
sudo journalctl -u -n 100 --no-pager
业务验收应优先看应用请求的 P95、P99、超时率、错误率和数据一致性。一个合理的成功标准通常是:在相同业务负载下,目标 I/O 延迟下降、队列不再持续积压、应用超时减少,同时没有引入数据错误和新的系统资源瓶颈。不要把单项顺序吞吐的提升当成完整成功标准。
常见失败处理与回滚
新盘未识别
先停止进一步配置,确认设备是否出现在以下输出中:
lsblk
lspci | grep -i -E 'non-volatile|nvme'
dmesg | tail -n 100
可能原因包括插槽或通道不支持、设备未正确安装、固件或内核兼容性问题。未确认设备身份前,不要执行 mkfs、分区或修改启动配置。
换盘后性能没有提升
按以下方向回看:
- 测试是否命中了内存缓存。
- 实际业务是否为同步写或单线程请求。
- CPU 是否先达到上限。
- 文件系统或块设备队列是否配置不合理。
- 数据是否仍然通过远程存储访问。
- 新盘是否因温度、写入回收或容量不足出现延迟波动。
应分别进行热缓存、冷缓存和接近真实业务的测试,避免只看一个顺序读结果。
新盘出现延迟尖峰
先检查内核日志、设备健康信息和温度,再降低测试并发,观察延迟是否随队列深度变化。如果设备存在过热、介质错误、链路降速或控制器重置,应停止扩大流量,保留原盘或副本,并恢复到旧存储路径。
挂载或服务启动失败
不要直接删除旧配置。先比较备份的 fstab、新旧 UUID、文件系统类型和挂载选项:
sudo findmnt --verify --verbose
sudo blkid
挂载失败时保持应用停止,避免服务对错误目录写入,确认路径正确后再启动。若服务已经在空目录上启动并写入,不能简单重新挂载覆盖该目录,应先停止服务并保存现场数据。
需要回滚到旧盘
回滚前必须先停止新盘上的写入,并判断新盘在切换后是否产生过新数据。若已经产生写入,不能直接把旧盘挂回去,否则可能丢失新数据或形成数据分叉。应先执行以下其中一种方式:
- 使用应用自身的备份或副本回退。
- 在应用一致性停止后,将新盘数据反向同步到旧盘。
- 从切换前快照恢复。
- 对数据库使用经过验证的恢复流程。
确认数据方向后,才执行类似操作:
sudo systemctl stop
sudo umount /data
sudo mount /dev/disk/by-uuid/ /data
sudo findmnt /data
sudo systemctl start
这组命令的前提是旧盘内容已经确认可用,且没有未处理的新写入。新旧磁盘不能同时以读写方式挂载同一份文件系统。调度器、sysctl 或挂载参数变更也应使用变更前记录恢复,而不是凭记忆填写。
上线验收清单
- [ ] 已保存升级前的 CPU、内存、磁盘、网络和应用延迟基线。
- [ ] 已确认问题属于本地磁盘、内存、CPU、网络或架构中的具体一层。
- [ ] 已完成应用一致性备份,并保留旧盘或旧副本。
- [ ] 已确认新盘容量、插槽、通道、内核和文件系统兼容。
- [ ] 已使用测试挂载点验证新设备,没有对生产裸设备执行写入测试。
- [ ] 已记录调度器、
vm.swappiness、挂载参数和/etc/fstab原始状态。 - [ ] 已在相同业务负载下对比 I/O 延迟、队列、吞吐和应用 P95/P99。
- [ ] 已检查内核日志、设备健康信息、文件系统、权限和服务日志。
- [ ] 已验证无交换抖动、无持续 I/O 错误、无网络丢包或重传异常。
- [ ] 已明确失败时的数据同步方向和旧盘回滚步骤。
- [ ] 已保留原盘和备份,直到新存储经过完整观察周期。