上一篇 下一篇 分享链接 返回 返回顶部

从HDD到NVMe 4.0,服务器磁盘I/O优化先升级哪一层?

发布人:Minchunlin 发布时间:2026-10-04 20:22 阅读量:4

服务器磁盘 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

在多数本地存储场景中,可以采用这样的默认顺序:

  1. 采集基线,确认等待发生在哪里。
  2. 排除内存不足和交换分区抖动。
  3. 检查应用、文件系统和块设备队列。
  4. 确认本地磁盘介质是否已经成为主要瓶颈。
  5. 如果使用远程存储,再处理网络路径。
  6. CPU 仅在计算或系统调用饱和时提前。
  7. 单机优化收益变小时,再调整架构。

这不是不可改变的线性流程。监控结果比“先买哪种盘”更重要。

操作前的准备条件

建立可回看的基线

至少记录一次正常业务时段和一次高峰时段的以下指标:

  • 应用请求的平均延迟、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 较高,则可能是业务计算、压缩、序列化或数据处理占用了处理器。

这一层的优化顺序通常是:

  1. 减少不必要的小块读写和重复扫描。
  2. 合并批量请求,避免每条记录都触发一次同步操作。
  3. 调整应用工作线程数量,防止线程数超过 CPU 和存储能够承受的范围。
  4. 确认锁竞争和上下文切换是否导致系统态 CPU 偏高。
  5. 在上述问题排除后,才评估增加 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

存储介质的选择可以按业务特征理解:

第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 为例。实际服务名和设备路径必须替换成现场值。

第5层:在确认本地存储受限后,再从 HDD 升级到 NVMe 4.0配图

  1. 记录旧盘信息并备份挂载配置。
   findmnt /data
   sudo blkid
   sudo cp -a /etc/fstab /etc/fstab.bak.$(date +%F-%H%M%S)
  1. 在确认设备路径后,创建文件系统并挂载新盘。格式化会清除目标设备上的数据,只能对已确认的空盘执行。
   sudo mkfs.xfs /dev/
   sudo mkdir -p /mnt/newdata
   sudo mount /dev/ /mnt/newdata

如果业务要求使用 ext4、LVM 或其他文件系统,应按照现有运维规范执行,不要机械使用示例中的 XFS。

  1. 先复制一轮静态或低变化数据。
   sudo rsync -aHAX --numeric-ids /data/ /mnt/newdata/

rsync 的源路径和目标路径必须再次核对。源路径末尾的 / 表示复制目录内容,错误填写可能导致目录层级不符合预期。

  1. 进入维护窗口,停止写入服务或切换到副本,再执行最终同步。若使用带 --delete 的镜像同步,必须确认目标目录是专用空目录,并且已经有可恢复备份;该参数会删除目标中源目录不存在的文件。
   sudo systemctl stop 
   sudo rsync -aHAX --numeric-ids --delete /data/ /mnt/newdata/
  1. 检查权限、属主、容量和关键文件后,再切换挂载点。优先使用 UUID 或稳定的设备标识,不要长期依赖可能变化的 /dev/sdX 名称。
   sudo blkid /dev/
   sudo findmnt /mnt/newdata
   sudo df -hT /mnt/newdata
  1. 完成切换后,保留旧盘,不要立即格式化。先卸载临时挂载点,并按维护方案将新盘挂载到正式路径,再启动服务。
   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 毫秒,队列在高峰期持续增长,应用请求主要是小块随机读取。

此时优先级应是:

  1. 确认应用是否存在重复读取或过小 I/O。
  2. 如果访问模式合理,先从 HDD 升级到 SATA SSD。
  3. 如果并发度高、延迟目标更低且平台支持,再评估 NVMe 4.0。
  4. 用相同请求比例复测 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 错误、无网络丢包或重传异常。
  • [ ] 已明确失败时的数据同步方向和旧盘回滚步骤。
  • [ ] 已保留原盘和备份,直到新存储经过完整观察周期。
目录结构
全文