“硬盘已添加但df -h不显示”?VMware存储栈链路断点排查图谱(ESXi 8.0 U2内核日志解码指南) 📅 2026/6/30 20:22:45 更多请点击 https://intelliparadigm.com第一章硬盘已添加但df -h不显示现象复现与问题界定当物理硬盘如 SATA/NVMe 设备已成功接入服务器并被内核识别但执行df -h命令却未列出该设备的挂载信息时表明系统尚未完成从设备发现到文件系统可视化的完整链路。该现象并非硬件故障的直接信号而是暴露了 Linux 存储栈中多个关键环节的潜在断点。现象复现步骤插入新硬盘如/dev/nvme1n1确认 BIOS/UEFI 及 dmesg 日志中存在识别记录dmesg | grep -i nvme运行lsblk查看块设备拓扑确认设备节点存在但无挂载点MOUNTPOINT列为空执行df -h观察输出中缺失对应设备——这说明df仅报告已挂载且注册至 VFS 的文件系统而非所有物理块设备核心问题界定该问题本质是“设备可见性”与“文件系统可用性”的错位。Linux 存储栈需依次通过以下阶段才能使设备出现在df -h中阶段验证命令预期结果内核设备识别ls /sys/block/包含nvme1n1或sdb等设备名分区与文件系统就绪sudo fdisk -l /dev/nvme1n1显示分区表或提示“磁盘标签类型dos/gpt”挂载点注册findmnt /dev/nvme1n1p1返回挂载路径若无输出则未挂载快速诊断流程# 1. 检查设备是否存在非挂载 lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # 2. 若有未分区设备需创建分区并格式化示例 sudo parted /dev/nvme1n1 mklabel gpt sudo parted /dev/nvme1n1 mkpart primary ext4 0% 100% sudo mkfs.ext4 /dev/nvme1n1p1 # 3. 创建挂载点并挂载使 df -h 可见 sudo mkdir -p /mnt/data sudo mount /dev/nvme1n1p1 /mnt/data只有完成挂载操作后df -h才会将该设备纳入统计范围。未挂载的块设备对df不可见属设计行为而非异常。第二章VMware存储栈全链路解析从vSphere UI到ESXi内核2.1 虚拟机配置层vSphere Client中磁盘添加动作的底层语义解码客户端请求语义解析vSphere Client 执行“添加硬盘”操作时并非直接调用存储API而是向 vCenter Server 提交一个带约束的ReconfigureVM_Task请求其核心是更新虚拟机配置对象VirtualMachineConfigSpec中的设备列表。deviceOperationadd/deviceOperation device disk capacityInKB20971520/capacityInKB !-- 20GB -- diskModepersistent/diskMode /disk /device该XML片段表示新增一块持久化磁盘容量单位为KBdiskMode决定快照行为persistent意味着写入立即生效且不随快照回滚。后端状态同步机制vCenter 接收请求后触发三阶段校验资源配额检查 → 数据存储空间验证 → VMX文件原子更新。最终通过vim.VirtualMachine.reconfigure方法将变更同步至ESXi主机。校验阶段关键依赖项配额检查vCenter Inventory Service vSphere DRS 配置存储验证Datastore Capability API如 VAAI 支持状态2.2 虚拟硬件层VMDK文件注册、SCSI控制器拓扑与设备节点生成机制VMDK注册核心流程虚拟机启动时ESXi主机通过vSphere API将VMDK元数据注入存储栈disk adapter typelsilogic/ file path/vmfs/volumes/datastore1/centos/disk.vmdk/ unitNumber0/unitNumber /disk该XML片段定义了磁盘绑定关系unitNumber决定SCSI LUN地址映射顺序直接影响/dev/sdX设备节点命名。SCSI控制器拓扑约束控制器类型最大LUN数设备节点范围LSI Logic SAS64/dev/sda–/dev/sdz, /dev/sdba–Paravirtual SCSI256支持长命名如sdz1→sdaa1设备节点动态生成内核通过udev规则监听SCSI子系统事件探测到新LUN → 触发scsi_add_lun()调用sd_probe()初始化块设备根据vendor/model匹配udev规则生成/dev/sdX2.3 ESXi内核存储子系统vmkernel SCSI堆栈、SATP/PSP策略匹配与LUN在线状态判定SCSI堆栈核心组件ESXi vmkernel SCSI堆栈采用分层设计从上至下依次为I/O调度器、SCSI设备驱动、HBA适配器驱动及物理HBA。其中scsi_vmklinux模块负责与Linux兼容层交互而scsi_core实现LUN发现与状态同步。SATP/PSP策略匹配流程SATPStorage Array Type Plugin识别阵列类型并绑定对应PSPPath Selection Plugin。匹配逻辑如下// vmkapi_scsi.h 中 SATP 匹配伪代码 if (vendor EMC model VNX) { satp VMW_SATP_ALUA; // 启用ALUA路径评估 psp VMW_PSP_MRU; // 最近使用路径策略 }该逻辑在LUN首次扫描时执行决定多路径行为与故障切换响应方式。LUN在线状态判定机制vmkernel通过定期发送TEST UNIT READY命令检测路径可用性并聚合各路径状态生成LUN全局状态路径状态超时阈值影响Active500ms参与I/O负载分发Dead3次连续失败触发PSP重选路径2.4 Guest OS感知层PVSCSI驱动加载时序、/sys/class/scsi_host枚举与udev事件触发验证PVSCSI驱动加载关键时序点内核模块加载后pvscsi_probe() 触发设备初始化并注册 SCSI host 实例/* drivers/scsi/pvscsi.c */ host scsi_host_alloc(pvscsi_template, sizeof(struct pvscsi_adapter)); scsi_add_host(host, pdev-dev); // 此刻触发 /sys/class/scsi_host/hostN 创建该调用同步生成 hostN 目录并触发 add/class/scsi_host udev 事件。/sys/class/scsi_host 枚举验证可通过以下命令确认 PVSCSI host 已就绪ls /sys/class/scsi_host/—— 列出所有 host 实例cat /sys/class/scsi_host/host*/proc_name—— 验证值为pvscsiudev事件触发链路事件类型触发路径典型动作add/sys/class/scsi_host/host0创建 sysfs 节点 触发 scsi subsystem rule2.5 文件系统挂载层/proc/partitions解析、blkid识别失败场景与/dev/sdX设备节点缺失根因定位/proc/partitions 的结构化解读# 查看内核识别的块设备分区拓扑 cat /proc/partitions # 输出示例 major minor #blocks name 8 0 104857600 sda 8 1 5242880 sda1 8 16 209715200 sdbmajor 和 minor 是设备号内核通过此对唯一标识块设备#blocks 为逻辑扇区数512Bname 为内核注册的设备名。该文件不依赖 udev反映内核实际感知的物理拓扑。blkid 失效常见场景设备未完成初始化如 NVMe 驱动加载延迟文件系统元数据损坏导致 UUID 解析失败udev 规则被禁用或规则链中断/dev/sdX 缺失的根因矩阵现象可能根因验证命令ls /dev/sd* 无输出SCSI 子系统未扫描 LUNecho - - - /sys/class/scsi_host/host*/scan仅存在 /dev/sr0BIOS/UEFI 启用 SATA AHCI 模式但驱动未加载lspci -k | grep -A3 -i sata第三章ESXi 8.0 U2内核日志深度解码实战3.1 vmkfstools -D与esxcli storage core adapter list联合诊断方法论核心诊断逻辑当遭遇存储路径异常或LUN不可见问题时需先确认HBA适配器状态再验证底层设备标识一致性。关键命令组合# 获取所有存储适配器信息 esxcli storage core adapter list # 对可疑LUN执行设备指纹校验需替换naa.xxxxxx vmkfstools -D /vmfs/devices/disks/naa.6000c29abcdef1234567890esxcli storage core adapter list输出适配器驱动状态、WWN及绑定路径vmkfstools -D则解析设备底层元数据如SCSI INQUIRY响应、LUN ID、Vendor/Product二者交叉比对可定位HBA识别偏差或阵列端映射异常。典型输出对照表字段esxcli输出项vmkfstools -D输出项厂商标识VendorVendor NameLUN编号Target IDLUN3.2 /var/log/vmkernel.log中scsi, satp, psp, vmfs模块关键日志模式匹配与语义还原SCSI命令超时的典型日志模式2024-03-15T08:22:14.123Z cpu0:32796)ScsiDeviceIO: 2311: Cmd(0x410000123456) to dev mpx.vmhba32:C0:T0:L0 failed H:0x0 D:0x2 P:0x0 Valid0该日志中H:0x0表示主机状态正常D:0x2CHECK_CONDITION表明设备返回校验条件异常P:0x0指感知数据有效位未置位——常指向链路层瞬态故障而非LUN失效。SATP/PSV状态转换关键标识SATP: Device mpx.vmhba32:C0:T0:L0 state changed to ActivePSP: Selecting policy MRU for device mpx.vmhba32:C0:T0:L0VMFS元数据冲突日志语义表日志片段模块语义含义VMFS: Volume datastore1 (UUID: 521e...) has inconsistent heartbeatvmfs多路径抢占导致心跳写入竞争需检查PSA队列深度与SATP failover timeout3.3 使用vmkfstools --config-disk和vmtop -r实时追踪存储路径状态变更配置磁盘元数据快照vmkfstools --config-disk /vmfs/volumes/datastore1/centos-vm/centos-vm.vmdk该命令提取虚拟磁盘的底层配置信息如LUN ID、SCSI地址、多路径策略用于建立路径健康基线。--config-disk不修改磁盘仅读取VMFS元数据与SCSI设备映射关系。实时路径状态监控vmtop -r 2每2秒刷新一次聚焦PATH列与STATE字段状态值包括active、dead、standby反映底层ALUA状态变化关键字段对照表字段含义典型值Path ID唯一路径标识符naa.60002ac0000000000000000000012345:1State当前I/O可达性active/ghost/dead第四章典型断点场景与闭环修复方案库4.1 SCSI控制器类型不兼容导致设备未被vmkernel识别LSI Logic SAS vs PVSCSI驱动绑定失效根本原因分析当虚拟机配置为 LSI Logic SAS 控制器但 Guest OS 中加载的是 PVSCSI 驱动时vmkernel 无法完成 SCSI 设备枚举。二者驱动栈与硬件抽象层HAL存在 ABI 不兼容。驱动绑定状态验证# 查看当前 SCSI 控制器类型及驱动绑定 esxcli storage core adapter list | grep -E (Name|Model|Driver) # 输出示例 # Name: vmhba0 Model: LSI Logic SAS Driver: lsi_mr3该命令揭示底层控制器型号与实际加载驱动的匹配关系若显示Driver: pvscsi而Model为 LSI Logic SAS则属非法绑定。兼容性对照表控制器类型推荐驱动vmkernel 支持状态LSI Logic SASlsi_mr3✅ 原生支持PVSCSIpvscsi✅ 高性能模式LSI pvscsi 驱动—❌ 绑定失败设备不可见4.2 VMDK元数据损坏引发vmfsMount失败且无显式错误日志vmkfstools -E校验与repair实操现象定位当VMDK描述符文件中LBA映射表或geometry字段损坏时ESXi内核在vmfsMount阶段静默失败/var/log/vmkernel.log仅记录“Failed to mount filesystem”无VMDK相关错误上下文。校验与修复流程# 先以只读模式校验元数据一致性 vmkfstools -E /vmfs/volumes/datastore1/centos7/centos7.vmdk # 若报告Descriptor file checksum mismatch执行安全修复 vmkfstools -X /vmfs/volumes/datastore1/centos7/centos7.vmdk-E执行CRC32校验并验证descriptor header、grain table起始偏移及sector count一致性-X仅重写损坏的descriptor头与校验和不触碰实际数据扇区。关键参数对照表参数作用是否修改磁盘数据-E只读校验元数据完整性否-X修复descriptor头与校验和仅descriptor文件4.3 多路径策略误配造成LUN离线SATP claim规则冲突与esxcli storage core claiming reevaluate执行边界SATP claim规则冲突根源当多个SATPStorage Array Type Plugin对同一LUN同时发起claim请求且其claim规则优先级未显式对齐时ESXi可能因竞争性绑定导致LUN状态异常。关键诊断命令esxcli storage core claiming reevaluate -d naa.6000c29a1b2c3d4e5f6a7b8c9d0e1f2该命令强制重评估指定设备的claim归属但**仅作用于未被active path占用的设备**若LUN已处于claimed状态且存在活跃I/O此操作将静默跳过。常见冲突场景对比场景claim行为后果VMW_SATP_ALUA VMW_SATP_DEFAULT_AA并行claimLUN短暂offline后无法自动恢复自定义SATP rule未设device唯一约束重复claimmpx.vmhbaX:C0:T0:L0显示multiple claims4.4 Guest OS内核参数限制导致大容量磁盘无法初始化scsi_mod.use_blk_mq0与queue_depth调优组合方案问题现象与根因定位当Guest OS挂载超过128TB的NVMe直通或SCSI虚拟磁盘时dmesg常出现scsi 0:0:0:0: rejecting I/O to offline device及blk_mq_alloc_request failed错误。根本原因在于Linux 5.4默认启用BLK-MQ多队列机制但某些虚拟化层如旧版QEMU/KVM对超大LUN的tag映射支持不完善且默认queue_depth32无法满足高并发IO需求。关键参数协同调优# 临时生效重启失效 echo 0 /sys/module/scsi_mod/parameters/use_blk_mq echo 256 /sys/block/sda/device/queue_depth # 永久生效/etc/default/grub中追加 GRUB_CMDLINE_LINUXscsi_mod.use_blk_mq0 scsi_mod.queue_depth256scsi_mod.use_blk_mq0强制回退至传统单队列调度器规避MQ在大LUN下的tag资源耗尽queue_depth256提升每LUN并发请求数上限匹配大容量磁盘的IO吞吐潜力。验证效果对比配置项初始化成功率128TB LUN平均IOPS4K随机读默认参数0%N/A仅use_blk_mq0100%12.4K组合调优后100%28.7K第五章从现象到本质——构建可复用的VMware存储可观测性框架在真实生产环境中某金融客户遭遇vSAN集群延迟突增p95 latency 250ms但vCenter性能图表仅显示“平均IOPS正常”。根源在于默认指标粒度粗、采样间隔长300s、且缺乏IO路径上下文。我们通过嵌入式Prometheus Exporter vSAN Health API实现了秒级细粒度采集并将存储栈划分为物理层磁盘健康/SMART、逻辑层对象状态/组件分布、服务层vSAN witness响应/RAID rebuild进度三级观测域。核心数据采集点示例# vsan-exporter.yaml 配置片段 vsan: cluster: PROD-CLUSTER metrics: - name: vsan_object_health_status help: Per-object health (0healthy, 1degraded, 2faulted) labels: [object_uuid, policy_name] - name: vsan_component_latency_ms help: Component-level read/write latency (ms) labels: [component_type, disk_uuid]关键指标关联分析矩阵现象可疑指标根因定位路径vSAN对象重建卡顿vsan_rebuild_progress_percent{statusstalled}关联disk_io_wait_time_ms{devicenaa.600508b1001c8a5f7e9b2d3a4c5e6f7g} 120ms虚拟机IO冻结vsan_vm_io_blocked_seconds_total下钻至vsan_object_component_count{stateabsent} 0可观测性能力分层演进基础层vCenter REST API轮询5分钟间隔→ 仅支持趋势判断增强层ESXi hostd日志流解析FilebeatLogstash→ 捕获瞬态错误如VSAN-32768深度层vSAN kernel module eBPF探针内核态IO路径追踪→ 定位vmkernel SCSI队列阻塞点架构示意vSphere Client ←→ Prometheus抓取vSAN Exporter←→ Grafana多维下钻面板←→ Alertmanager基于vsan_object_degraded_count 3触发分级告警