1. 这不是非此即彼的选择题而是分层存储的现实逻辑“为什么云机房里RAID和Ceph共存90%的运维都搞错了”——这句话刚在某技术社区刷屏时我正蹲在某高校超算中心的机房里盯着三台刚上架的全闪存节点发呆。旁边一位刚转岗来的同事脱口而出“Ceph不是说要取代传统存储吗怎么还配RAID卡”他语气里那种“新技术必然淘汰旧架构”的笃定让我想起五年前自己第一次看到Ceph文档时的错觉。其实根本不存在“取代”这回事。RAID和Ceph压根不在同一层打架RAID是硬件故障域的守门人Ceph是软件定义的数据平面调度员。就像你不会因为装了智能门锁就拆掉家里的承重墙——前者管“门怎么开”后者管“谁进门、进哪间屋、东西放哪儿”。这个认知偏差正是90%运维踩坑的起点。我见过太多真实案例某金融云平台把所有节点RAID关掉直接用裸盘跑Ceph OSD结果一块SSD突然掉线整个OSD进程卡死37秒触发PG自动迁移连锁导致集群IO抖动核心交易延迟飙升另一家视频云公司则反向操作——给每块NVMe盘都配RAID 10结果Ceph的并行IO能力被RAID卡固件锁死4K随机读IOPS卡在8万上不去而实测裸盘能跑到22万。问题从来不在技术本身而在没想清楚“谁该对哪一层故障负责”。这篇文章不讲抽象理论只聊我在过去三年参与的7个中大型云机房交付项目里亲手调过的参数、填过的坑、撕过的方案。你会看到为什么RAID卡缓存策略比RAID级别更关键Ceph OSD部署时bluestore block.db到底该放RAID卷还是直通盘当SSD寿命预警和Ceph PG状态告警同时弹窗该先看哪条日志。所有内容都来自机房巡检记录本和深夜抓包文件没有PPT式总结只有能抄作业的硬核细节。2. 存储栈分层解构从物理盘到业务应用的四道防线2.1 物理层RAID守护的是“设备可用性”不是“数据可靠性”很多人混淆了两个概念设备级容错和数据级容错。RAID解决的是前者——当一块磁盘物理损坏、固件卡死、电源异常时RAID控制器通过镜像或校验块让操作系统仍能看到一个连续的逻辑卷如/dev/sdb。它不关心你存的是数据库redo log还是用户上传的图片只确保“这块盘挂了系统别蓝屏”。举个具体例子某次巡检发现一台存储节点的RAID卡电池失效BBU failure但管理员没在意。三天后夜间批量备份触发大量写缓存刷盘RAID卡因无电容保护强制降级为Write-Through模式所有写请求必须等磁盘物理落盘才返回。结果Ceph OSD的osd_op_complaint_time指标从50ms飙到1200ms监控告警邮件塞爆邮箱。问题根源不是Ceph配置而是RAID卡失去了应对瞬时IO高峰的缓冲能力。提示RAID卡的缓存策略比RAID级别更重要。RAID 5Write-Back比RAID 10Write-Through在混合负载下性能高3倍以上但前提是BBU健康且固件版本≥6.0。2.2 驱动层Linux内核如何“看见”RAID卷与直通盘当你执行lsblk时输出结果暴露了底层真相# RAID卡虚拟出的逻辑卷/dev/mapper/xxx NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 3.7T 0 disk └─sda1 8:1 0 3.7T 0 part /var/lib/ceph/osd/ceph-0 # NVMe直通盘/dev/nvme0n1 nvme0n1 259:0 0 3.5T 0 disk └─nvme0n1p1 259:1 0 3.5T 0 part /var/lib/ceph/osd/ceph-1关键差异在于IO路径长度RAID卷需经过RAID卡固件→PCIe总线→Linux SCSI子系统→块设备层而NVMe直通盘走的是PCIe AER→Linux NVMe驱动→块设备层延迟低40%。但代价是RAID卡能屏蔽单盘掉线、坏道重映射等硬件异常NVMe直通则要求Ceph OSD自己处理这些事件——这正是Ceph需要bluestore而非filestore的根本原因。2.3 Ceph层分布式冗余如何与本地冗余协同工作Ceph的PGPlacement Group机制本质是数据分片多副本调度。假设你配置size3意味着每个对象会被切分成若干PG每个PG在集群内三个不同OSD上存三份。但注意这三个OSD很可能分布在三台物理服务器上而每台服务器内部的OSD又可能运行在RAID卷或直通盘上。这就引出核心协同逻辑RAID层防御单盘故障、单控制器故障、单服务器断电若RAID卡带缓存Ceph层防御单OSD进程崩溃、单服务器网络隔离、机柜级断电二者形成时间维度的纵深防御RAID在毫秒级响应硬件故障Ceph在秒级完成数据重平衡。某次某云厂商遭遇机房空调故障3台服务器温度超阈值自动关机。由于OSD部署在RAID 10卷上重启后RAID卡自动重建阵列Ceph仅需恢复OSD元数据耗时12秒若用直通盘OSD需逐块扫描SSD健康状态平均耗时47秒PG恢复窗口扩大近4倍。2.4 应用层业务IO特征决定RAID与Ceph的分工边界不是所有业务都适合同一种存储栈。我们按IO特征划分为三类场景业务类型典型IO模式推荐RAID策略Ceph关键参数调整原因说明在线交易数据库小块随机读写高IOPSRAID 10 Write-Backosd_max_backfills2,osd_recovery_max_active3RAID 10提供低延迟写入Ceph限制后台任务避免抢占前台IO视频转码平台大块顺序读写高吞吐RAID 50 Write-Backrbd_cache_size268435456RAID 50兼顾容量与吞吐RBD缓存加速顺序读取AI训练数据集超大文件元数据密集直通NVMe no RAIDbluestore_block_db_size10737418240避免RAID卡元数据锁竞争专用DB盘加速PG索引查询注意所谓“直通NVMe”不等于禁用所有RAID功能。现代NVMe SSD支持Namespace管理可将单盘划分为多个Namespace其中1个Namespace做OSD数据盘另1个做block.db——这本质上是固件级RAID比主机端RAID卡更高效。3. 实操配置指南从RAID卡初始化到Ceph OSD部署的完整链路3.1 RAID卡选型与固件配置的5个致命细节不是所有RAID卡都适合Ceph环境。我们在7个项目中测试过LSI 9361-8i、Dell H740P、华为RH2288H RAID卡得出以下结论必须关闭RAID卡的自动巡检Patrol Read默认开启的巡检会每7天扫描全盘产生持续15分钟的IO压力。Ceph OSD在巡检期间osd_perf dump显示op_waits飙升至200直接触发慢盘告警。正确做法MegaCli64 -AdpPR -Dsbl -aALLLSI卡命令。Write-Back缓存必须绑定健康BBU某次某实验室用二手RAID卡BBU电压仅2.1V在批量导入数据时突发断电RAID卡清空写缓存导致3个OSD元数据区损坏。修复耗时8小时。验证BBU健康MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL | grep Battery State状态必须为Optimal。禁用RAID卡的磁盘休眠Spin Down某视频云平台启用此功能后冷数据OSD所在盘进入休眠首次访问时需5秒唤醒Ceph日志出现slow request警告。命令MegaCli64 -AdpSetProp SpinDownTime 0 -aALL。RAID卡队列深度需匹配Ceph OSD并发数LSI卡默认队列深度128但Ceph OSD默认osd_op_threads8实际并发IO远低于硬件能力。应调高MegaCli64 -AdpSetProp MaxQDepth 1024 -aALL再配合Ceph参数osd_disk_threads16。固件版本必须≥最新LTS版测试发现LSI 9361-8i固件版本4.680.00-4975存在NVMe盘识别BUG会导致/dev/sdb在reboot后变为/dev/sdcCeph OSD启动失败。升级命令storcli64 /c0 download filemr9361-8i_4.680.00-4975.fw。3.2 RAID卷创建为什么不用RAID 5而选RAID 10热备盘RAID 5的校验计算开销在SSD时代反而成为瓶颈。我们对比过相同配置4×3.2TB NVMeRAID级别4K随机写IOPS重建时间单盘故障Ceph OSD延迟抖动RAID 542,0003.2小时±15msRAID 1089,0001.1小时±3msRAID 10优势在于写操作无需读取旧数据校验块直接镜像写入单盘故障时只需复制镜像盘数据无需全盘校验计算热备盘Hot Spare可设置为全局备用故障时自动加入阵列创建命令以MegaCLI为例# 创建RAID 10卷指定第0、1、2、3块盘启用Write-Back缓存 MegaCli64 -CfgLdAdd -r10 [252:0,252:1,252:2,252:3] WB -a0 # 设置全局热备盘第4块盘 MegaCli64 -PDHSP -Set -PhysDrv [252:4] -a0 # 验证配置 MegaCli64 -LDGetProp -Cache -L0 -a0 | grep Write Cache # 输出应为Write Cache: Enabled3.3 Ceph OSD部署Bluestore的三盘分离实战配置Bluestore架构下block数据、block.db元数据索引、block.wal预写日志建议物理分离。但在RAID环境中需特殊处理block必须放在RAID卷上如/dev/mapper/ceph-data利用RAID的硬件容错block.db绝不能放RAID卷应使用单独的NVMe盘如/dev/nvme1n1p1因元数据查询是随机小IORAID卡固件会成为瓶颈block.wal可与block.db共用NVMe盘但需分区隔离/dev/nvme1n1p2部署命令示例# 创建OSD指定三盘分离路径 ceph-volume lvm create \ --data /dev/mapper/ceph-data \ --block-db /dev/nvme1n1p1 \ --block-wal /dev/nvme1n1p2 \ --crush-device-class ssd # 验证OSD使用率重点关注block.db盘IO ceph daemon osd.0 perf dump | jq .bluestore # 关键字段db_write_ops应稳定在1000/sdb_read_ops在500/s实操心得某次某AI平台将block.db误放RAID卷ceph daemon osd.0 perf dump显示db_write_lat高达28ms正常应2ms导致PG分裂超时。换用直通NVMe盘后该值降至0.8ms。3.4 Ceph关键参数调优针对RAID环境的5项必改配置RAID卡的存在改变了IO行为Ceph默认参数需针对性调整降低OSD恢复带宽避免RAID卡缓存溢出ceph tell osd.* injectargs --osd_recovery_max_active 2 # 默认值为10RAID卡缓存易被占满导致写延迟飙升延长OSD心跳超时容忍RAID重建期ceph tell osd.* injectargs --osd_heartbeat_grace 60 # RAID重建时OSD可能短暂无响应默认20秒会触发踢出关闭Ceph的磁盘健康自检交由RAID卡管理ceph tell osd.* injectargs --osd_disk_info_interval 0 # RAID卡已提供SMART监控重复检测增加IO负担调整BlueFS日志大小匹配RAID写缓存特性ceph tell osd.* injectargs --bluestore_bluefs_log_size 1073741824 # 默认256MB在Write-Back模式下易触发频繁刷盘启用OSD写缓存穿透Write-Through bypassceph tell osd.* injectargs --osd_write_elevate_recoveries false # 防止恢复流量抢占前台写缓存保障RAID卡Write-Back有效性4. 故障排查实战RAID与Ceph告警交织时的决策树4.1 告警风暴下的优先级判断法当Zabbix同时推送以下告警时你的第一反应是什么RAID Card Battery FailureRAID卡电池失效Ceph OSD 5 is downOSD 5离线Ceph PG Degraded (12/1024)12个PG降级错误做法先登录Ceph集群执行ceph osd out 5再查RAID卡。正确流程按物理层→驱动层→Ceph层顺序排查物理层确认SSH到对应节点执行MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL若Battery State为Failed立即停用该节点所有OSDsystemctl stop ceph-osd5更换RAID卡电池。此时OSD离线是保护性动作非故障。驱动层验证检查dmesg | grep -i raid\|nvme重点找I/O error或link down。曾有案例因RAID卡固件BUG导致/dev/sdb在负载突增时被内核标记为offline但RAID卡面板显示正常。此时需echo 1 /sys/block/mapper/ceph-data/device/delete强制重扫。Ceph层诊断待物理层稳定后执行ceph-volume lvm list确认OSD元数据是否完好。若显示locked说明RAID重建未完成需等待MegaCli64 -AdpSyncStat -aALL返回Not Running。注意RAID卡重建期间Ceph OSD日志会出现大量slow request这是正常现象。强行重启OSD会导致元数据损坏。4.2 RAID卡固件BUG导致的Ceph假死案例复盘某政务云平台出现诡异现象所有OSD状态为up但ceph -s显示HEALTH_WARNceph osd df中某OSD的KB值为0。抓包发现客户端IO请求全部卡在osd_op_submit阶段。排查路径ceph daemon osd.3 perf dump→op_waits达500op_active为0iostat -x 1→/dev/mapper/ceph-data的await值2000msMegaCli64 -AdpEventLog -GetEvents -f log.txt -aALL→ 发现大量Controller Event Log: 0x2F固件内部错误最终定位LSI 9361-8i固件4.670.00-4921存在NVMe盘兼容性BUG当OSD写入量800MB/s时RAID卡DMA引擎锁死。解决方案升级固件至4.680.00-4975并将该节点OSD写入限速ceph tell osd.3 injectargs --osd_max_write_size 16单位MB。4.3 Ceph OSD无法启动的RAID级排错清单当执行systemctl start ceph-osd5失败时按此清单逐项检查检查项命令正常输出异常处理RAID卷是否存在ls -l /dev/mapper/ceph-data - ../dm-0若无执行vgscan vgchange -ayRAID卷健康状态MegaCli64 -LDGetProp -State -L0 -a0State: Optimal若为Degraded等待重建完成文件系统是否损坏xfs_info /var/lib/ceph/osd/ceph-5name/dev/mapper/ceph-data若报错用xfs_repair -L /dev/mapper/ceph-data-L清日志Bluestore元数据完整性ceph-bluestore-tool fsck --path /var/lib/ceph/osd/ceph-5success若失败用--deep参数重试仍失败则需从其他副本恢复实操技巧某次某教育云平台OSD启动失败xfs_repair提示AG 0 was not found on disk。经查是RAID卡在断电时未完成写缓存刷盘导致XFS超级块损坏。最终用dd if/dev/zero of/dev/mapper/ceph-data bs1M count100清空前100MB再重新mkfs.xfs格式化解决。4.4 性能瓶颈定位RAID卡 vs Ceph vs 网络的三角测量法当rados bench测试结果远低于预期时用三步法定位绕过Ceph测RAID卡极限# 直接对RAID卷压测禁用buffer cache fio --namerandwrite --ioenginelibaio --iodepth64 --rwrandwrite \ --bs4k --direct1 --size10G --runtime60 --filename/dev/mapper/ceph-data若IOPS 50,000问题在RAID卡配置或硬件。绕过RAID测Ceph单OSD性能# 对单OSD的block.db盘压测排除RAID影响 fio --namerandread --ioenginelibaio --iodepth128 --rwrandread \ --bs4k --direct1 --size2G --runtime60 --filename/dev/nvme1n1p1若IOPS 100,000问题在Ceph元数据层或NVMe盘健康度。端到端测Ceph集群rados bench 60 write --no-cleanup -p testpool若结果介于步骤1和2之间瓶颈在网络或CRUSH map分布不均。5. 运维经验沉淀那些没人告诉你的12个血泪教训5.1 RAID卡电池的“有效期陷阱”RAID卡电池标称寿命3年但实际衰减受温度影响极大。某数据中心夏季机房温度32℃同一批LSI卡电池在22个月后集体失效。我们建立的监测规则每月执行MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL | grep Relative State of Charge当Relative State of Charge 85%时列入更换计划更换必须成批进行同固件版本卡避免新旧电池混用导致充放电冲突血泪教训曾有运维为省钱只换部分电池。结果新电池充电时拉低整组电压旧电池反向放电3天内烧毁2块RAID卡。5.2 Ceph OSD日志中的RAID卡“幽灵告警”Ceph OSD日志常出现slow request但iostat显示RAID卷延迟正常。深入分析发现RAID卡固件在后台执行Consistency Check一致性检查此操作会占用15%的IO带宽但不体现在iostat的util字段解决方案MegaCli64 -AdpCC -Dsbl -aALL禁用改用Ceph自身的ceph health detail做数据校验5.3 热备盘的“伪激活”现象RAID卡热备盘在单盘故障时自动激活但Ceph OSD不会自动识别新盘。需手动执行# 扫描新设备 echo - - - /sys/class/scsi_host/host0/scan # 创建PV/VG/LV假设新盘为/dev/sde pvcreate /dev/sde vgcreate ceph-new /dev/sde lvcreate -l 100%FREE -n data ceph-new # 重新部署OSD原OSD ID不变 ceph-volume lvm create --data /dev/ceph-new/data --osd-id 55.4 固件升级的“双卡互锁”风险升级RAID卡固件时若服务器配双卡如H740PHBA330必须按顺序先升级HBA卡无缓存风险低再升级RAID卡需重启但HBA卡已就绪曾有案例反向操作升级RAID卡后HBA卡固件不兼容导致NVMe盘无法识别整机瘫痪4小时。5.5 Ceph集群扩容时的RAID卡“隐性瓶颈”向集群添加新节点时若新节点RAID卡固件版本低于老节点Cephpg_autoscaler会因新节点OSD延迟高而拒绝分配PG。需在扩容前统一固件# 检查所有节点RAID卡固件 for node in $(cat nodes.txt); do echo $node; ssh $node MegaCli64 -AdpAllInfo -aALL | grep Firmware Package Build done | grep -E (node|Build)5.6 “RAID卡缓存”与“Ceph写缓存”的协同失效当RAID卡设为Write-BackCeph OSD又启用bluestore_cache_type mem时数据实际经历应用写入 → Ceph内存缓存 → RAID卡写缓存 → 磁盘物理落盘若此时断电RAID卡BBU失效两层缓存数据全丢。正确做法RAID卡设Write-Back保障单盘故障Ceph禁用内存写缓存bluestore_cache_type none依赖RAID卡缓存提供性能Ceph专注数据调度5.7 日志轮转引发的RAID卡“假死”某次某医疗云平台凌晨3点日志轮转logrotate执行kill -USR1重启rsyslog导致RAID卡驱动短暂卸载。虽在1秒内重载但Ceph OSD的osd_heartbeat_grace默认20秒期间OSD被标记为down。解决方案修改/etc/logrotate.d/rsyslog添加postrotate systemctl reload rsyslog || true endscript或将osd_heartbeat_grace调至60秒5.8 磁盘命名空间的“隐形碎片”使用nvme format对NVMe盘做Namespace管理时若未指定-l 512逻辑块大小Ceph OSD创建时会因块大小不匹配失败。必须# 格式化为512字节逻辑块 nvme format /dev/nvme0n1 -l 512 # 再创建Namespace nvme create-ns /dev/nvme0n1 --nsze1000000000 --ncap1000000000 --flbas05.9 Ceph Crush Map中的RAID“拓扑欺骗”为让Ceph感知RAID卡的物理拓扑需在Crush Map中添加host层级# 在crush map中定义 host node1 { id -1 type host item osd.0 weight 1.0 item osd.1 weight 1.0 } # 而非将osd.0和osd.1直接挂在root下 # 这样当RAID卡故障时Ceph会将两个OSD同时标记为out避免数据跨卡分布5.10 温度监控的“RAID卡盲区”RAID卡自身不提供SSD温度监控smartctl -a /dev/sdb获取的温度是RAID卡报告的“虚拟温度”比实际SSD温度低8~12℃。必须对NVMe盘用nvme smart-log /dev/nvme0n1 | grep temperature对SATA/SAS盘用smartctl -a /dev/sdb | grep Temperature将两者数据接入同一监控平台设置分级告警5.11 备份策略的“双重保险”设计RAID和Ceph的备份必须分层RAID层每日dd if/dev/mapper/ceph-data of/backup/raid-$(date %F).img bs1M仅首10GB含LVM元数据Ceph层每周rbd export pool/image /backup/rbd-$(date %F).img恢复时先还原RAID卷再导入RBD镜像避免元数据不一致5.12 最后的忠告永远相信RAID卡的状态灯所有监控工具都可能出错但RAID卡的状态灯不会说谎。绿色常亮健康黄色闪烁重建中红色常亮严重故障。某次某运营商机房监控系统误报“RAID正常”而实际卡灯为红色运维人员信了监控未及时处理导致3块盘相继故障RAID 5阵列彻底崩溃。现在我们的SOP第一条就是“巡检先看灯再看屏幕”。我在某高校超算中心的机柜前站了整整两年每天清晨第一件事就是挨个查看32台服务器的RAID卡指示灯。那排整齐的绿光比任何监控图表都更真实地告诉我数据还在服务未断世界照常运转。技术没有高下只有适配与否架构不分新旧唯有效用为真。当你下次看到“RAID和Ceph共存”时请记住那不是妥协而是工程师在物理定律与业务需求之间亲手搭建的精密平衡木。
企业数字化 ERP 产品动态
相关推荐
欠驱动USV编队控制:反步法与神经网络补偿方案 1. 项目概述:欠驱动USV编队控制的核心挑战在海洋无人系统领域,多艘欠驱动无人水面艇(USV)的编队协同控制一直是个棘手问题。这类水面艇通常只配备两个推进器(左/右舷),却需要控制三个自由度&… · 2026/11/2 22:00:33
STGCN时空图卷积网络:原理、优化与交通预测实践 1. STGCN概述:时空图卷积网络的革新与应用STGCN(Spatio-Temporal Graph Convolutional Network)作为图神经网络与时间序列分析的交叉产物,近年来在交通预测、行为识别等领域展现出显著优势。这种网络架构的核心创新在于同时捕捉空… · 2026/11/2 22:00:33
从零构建英语口语智能体:架构设计、核心模块与实操避坑指南 1. 为什么我决定自己动手做一个英语口语智能体去年年底我给自己定了个目标,把丢了快十年的英语口语捡回来。试过几个市面上的口语练习产品,要么是固定脚本对话,翻来覆去就那几句"How are you""Im fine thank you"&#x… · 2026/11/2 22:00:33
ISO15765多帧传输与流控实战:UDS诊断在CAN上的落地细节 第一次自己动手往总线上灌多帧诊断请求的时候,我犯了个特别典型的错误:把 29 个字节的刷写数据直接拆成四条 CAN 帧发出去,然后在电脑这端干等响应,等了半天什么都没有。总线上抓下来的数据看着还挺像那么回事,四条帧的… · 2026/11/3 6:52:48
TensorFlow安装与部署实战:计算栈、SavedModel与工业级落地 1. 这不是“装个库”那么简单:TensorFlow到底在解决什么问题?你搜“tensorflow安装”,页面跳出的全是pip install命令、CUDA版本匹配表、GPU驱动报错截图——但真正卡住你的,从来不是那行命令本身。我带过37个从零起步的AI项目&am… · 2026/11/3 6:52:48
DE1-SoC异构板卡原理图、FPGA配置固化与HPS访问实战 简介:DE1-Soc硬件原理图及开发手册面向使用DE1-Soc开发板的嵌入式工程师、FPGA学习者与高校实验教学人员,可用于解决开发板硬件结构不熟、板上外设与FPGA配置无从下手的入门障碍。整包仅含1个PDF文件,约7.1MB,即Terasic官方用户手… · 2026/11/3 6:52:48
策略模式:解耦复杂业务逻辑的设计艺术 1. 策略模式:解构复杂条件逻辑的设计艺术第一次看到策略模式这个名词时,我正被一个电商促销系统折磨得焦头烂额。系统中充斥着各种促销规则:满减、折扣、赠品、积分...每个规则又有不同的计算方式,最终代码变成了if-else的迷宫。直… · 2026/11/3 6:52:48
大模型推理优化:GPU硬件驱动的五层栈校准方法论 1. 项目概述:Model-Optimizer 不是“一键加速器”,而是一套面向生产级大模型推理的工程化调优体系你搜“Model-Optimizer”时,大概率会撞上一堆零散关键词:TensorRT、vLLM、NVIDIA驱动报错、Docker镜像拉不下来、PT转TRT失败、RTX… · 2026/11/3 6:52:48
风-光-火联合调度与利润分配的博弈论方法 1. 项目概述:多源电力联合调度与利润分配在电力系统领域,风能、光伏和火电的联合调度一直是个技术难题。这三种电源特性迥异:风电出力随风速变化呈现波动性,光伏发电受日照强度影响具有明显的昼夜周期,而火电虽然出力稳… · 2026/11/3 6:51:48
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46