简介硬盘维修软件XCHDD是一款面向专业维修人员的企业级硬盘诊断工具重点支持SAS硬盘及常见机械硬盘的固件分析、故障修复与数据恢复。当前包为2024年11月28日测试机版本需搭配加密狗运行适用于服务器、数据中心等场景下的硬盘排障。压缩包共36个文件大小约12.74MB其中dll与exe构成软件运行主体bin文件存放固件数据txt、ini与xml分别提供说明、配置和参数log记录操作日志bat脚本可辅助执行自动化操作。该资源已有1766人学习下载适合具备一定硬件基础的维修工程师作为SAS硬盘维修的参考工具。内含主程序及多端口测试组件、重建计数器脚本、扫描软件说明等可辅助完成硬盘健康检测、固件状态读取和常见故障排查降低维修过程中的数据丢失风险同时需注意加密狗授权与操作规范避免不当使用造成数据损失。1. xchdd 硬盘维修软件先从一块 SAS 盘“认不出来”的老问题说起真正干过这行的人看到 xchdd 几个字母多半会想到 SAS 硬盘维修里最难啃的那段流程链路协商、缺陷表读取、终端指令下发。市面上多数硬盘维修软件是冲着 SATA 个人盘去的对 SAS 盘要么认不出要么认出来就掉线。xchdd 这套资源解决的正是这个最低门槛把 SATA/SAS 统一在一个设备管理框架里对 T10 命令单独开终端让掉线的盘至少能回到“可识别、可读表、可下命令”的状态。它适合专门接盘维修的工作室也适合数据中心运维在送修前先做固件备份和缺陷扫描。这篇笔记会把扫描参数、重映射顺序和常见翻车点都过一遍按着做基本能避免把盘修死。2. 硬盘维修的核心矛盾xchdd 动的是缺陷表不是盘片本身如果你把 xchdd 当成一个“坏道扫描器”第一步就走偏了。它占用最多的处理时间确实是在 scanning 和 verify但最终写进硬盘的不是一个“修好了”的物理状态而是一组经过固件认可的 defect list 和重映射记录。硬盘内部有一套隐藏的替换扇区池维修软件把坏地址添加到 G-LIST固件读取 LBA 时自动跳到替换区用户看不到中间发生了跳转。把“修盘”理解成“管理固件眼里的缺陷表”很多参数才解释得通。2.1 P-LIST、G-LIST 和 S-LIST别被界面里的三个缩写搞混许多新手一进 xchdd 的 Defect Table 界面就懵P、G、S 三个 tab 长得几乎一样。P-LIST 是工厂阶段生成的固件缺陷表硬盘出厂前生产线扫描到的坏扇区都记录在这里普通用户软件不允许随便改它。G-LIST 是增长缺陷表用户使用过程中新出现的不稳定扇区由 Reassign 操作添加。S-LIST 在 xchdd 里一般用来存放“扫描但还没最终认定”的临时缺陷相当于草稿表。我的习惯是先打开 G-LIST 看当前有多少条记录。出厂盘的 G-LIST 通常是空的或者只有几条因为工厂测试留下的记录。如果一块盘 G-LIST 已经到几千条即使扫描结果不差也说明盘已经接近寿命边缘。在 xchdd 的界面里你还能看到每条记录的 LBA、错误类型和累积重读次数重读次数高但还没有加入 G-LIST 的往往是“正在坏掉”的扇区这类盘不要继续当作数据盘使用。S-LIST 平时容易被忽略但它对维修决策很有用。全盘 verify 出来的错误地址先进 S-LIST你人工确认后再“提升”到 G-LIST。这样不会因为一次瞬时误判把一个本来没坏的扇区锁进隐藏表。缺省状态下 xchdd 允许把 S-LIST 和 G-LIST 的显示分开我建议把这两个表都打开方便对比哪些是已经被固件接受的缺陷哪些还只是草稿。2.2 SATA 和 SAS 的分岔为什么 xchdd 修 SAS 盘要单独开终端SATA 盘走 ATA 命令集SAS 盘走 SCSI 命令集这是两个维护世界。体现在维修动作上SAS 盘的错误信息里带的是 Sense Key、ASC/ASCQ 这样一套编码xchdd 如果不解析它们你就只能看到“error”两个字具体是 MEDIUM ERROR 还是 RECOVERED ERROR 都分不出来。单这一项就决定了不能用纯 SATA 逻辑框架去修 SAS 盘。还有一个间接但常见的坑是块大小。SAS 盘存在 512、512e、4Kn 三种扇区格式4Kn 盘如果软件默认按 512 去扫描LBA 地址会对不准。xchdd 在设备识别阶段会读一块盘的 Block Size 字段并把结果醒目标在设备面板上。我一般看到 4096 就会手动把扫描参数里的 block size 一并改掉不能只依赖自动识别。SAS 盘还多了一层 SAS 地址和 WWN 的概念。在终端里你经常会看到一串5000c500开头的地址那是盘的 SAS Address。xchdd 的设备列表底部会把 WWN、SAS Address、协议类型分三列显示做批量维修时我习惯先按 WWN 核对盘序因为多个盘都经过同一张 HBA 时/dev/sdX的顺序会随启动变化只有 WWN 是稳定的。2.3 xchdd 自己把流程拆成四个模块别上来就点“开始维修”xchdd 不是一个大按钮从头点到尾的傻瓜软件至少在我常用版本里它把工作分成了 Device Manager、Scan Engine、Terminal、Table Editor 四块。Device Manager 负责枚举和认盘Scan Engine 负责读和 verificationTerminal 是透传 ATA/SCSI 命令的地方Table Editor 负责 P/G/S 表的读写和导出。四个模块共用同一个磁盘句柄所以一次只能对一个设备操作。第一次上手时可以先用终端的设备枚举命令确认软件有没有正确接管那块盘。命令行方式在批量环境里比点鼠标稳定我一般这样做xchdd dev list --transportsas --detail # 列出当前 xchdd 能看到的全部设备 # --detail 会输出协议类型、块大小、WWN、固件版本和当前 G-LIST 条数这条命令的作用是把“系统里有没有盘”和“xchdd 能不能看到盘”区分开。有时候 Windows 的设备管理器里能看到盘但 xchdd 的列表空白说明是没有拿到透传权限不是线没接好。--detail参数里的 G-LIST 条数很有参考价值我习惯盘点时顺便记下来等修完再对比条数变化用来判断这次到底加了多少条缺陷记录。3. 把 xchdd 跑起来接线、识别和第一次全盘体检的参数怎么设软件装好只是开始真正在干活前最容易被卡住的是硬件接线和参数设置。xchdd 认不认盘一半取决于软件另一半取决于 HBA 和线缆。过去我拿板载 SATA 口接 SAS 盘插上去毫无反应后来才知道 SAS 盘不是只多了个协议连物理接口定义都不同。这一章直接按“怎么接、参数怎么填、基线怎么留”的顺序走。3.1 硬件清单SAS 卡、直连线还是背板的取舍维修场景建议用 LSI/Avago 的 SAS HBA并确保它刷成 IT 模式也就是直通模式。RAID 模式下卡会自己抢设备所有权xchdd 拿不到透传命令的权限经常出现“识别一半就掉盘”的怪毛病。线缆方面能用直连线就尽量用直连线。从 HBA 直接到盘的单根 SAS 线没有背板介入链路协商最简单经过背板时背板 expander 会引入额外的 link retry坏盘本来就协商不稳扩大化之后更容易掉线。SATA 盘插在 SAS 背板上反而容易识别因为 expander 会自动协商成 SATA Router但 SAS 盘绝不能插在普通 SATA 口上。电源也不能马虎。修盘过程中如果触发固件重启盘会反复启停瞬时电流很高用一个额定电流不够的小电源盘会在扫描中途重新 link down所有日志前功尽弃。我一般准备一个带独立供电的硬盘架单盘电流不少于 1.5A4Kn 的企业盘甚至要 2A 以上。环节推荐做法注意点HBALSI 3008 或 2308 IT 模式RAID 模式会抢设备xchdd 可能认不到线缆HBA 到盘直连背板 expander 干扰掉线售后期盘尤其明显电源独立供电盘架单盘 1.5A 以上扫描中途掉电日志不可信3.2 扫描参数怎么设不要直接照抄 SATA 盘的默认值xchdd 的 Scan Engine 里有一组参数包括 chunk size、区块大小、超时、重读次数。很多人图省事直接点默认结果 SATA 盘跑得很顺SAS 盘一跑就报 timeout。这是因为 SAS 盘的命令队列和错误恢复比 SATA 更复杂读一个坏扇区默认的 30 秒超时往往不够但超时设太长如果盘真死掉整个扫描会卡在那里。我自己的做法是先跑一个小范围测试扫用 50000 个 LBA 试水。命令大致是这样xchdd scan --device0 --start0 --stop50000 --chunk4096 --timeout90 --retries1 --read-long --logfilesmoke.log # --chunk4096 表示一次读取的扇区数SAS 4Kn 盘这里要按 4096 字节块处理 # --timeout90 表示单条命令最多等待 90 秒 # --read-long 启用长读能看到扇区数据本身的问题而不只是 ECC 错跑完看smoke.log里有多少 MEDIUM ERROR 和 RECOVERED ERROR。如果 MEDIUM ERROR 数量为 0再把--stop扩展到全盘。如果测试阶段就已经大量 timeout问题往往不是坏道而是盘固件在自检先把盘静置十分钟再试。换 SATA 盘时我会把--read-long关掉SATA 的长读命令兼容性不如 SAS。还有一个容易忽略的参数是 ECC control。很多软件默认开着 ECC 重试对于逻辑坏道重试几次就能读过去但这会掩盖真实损坏。维修时我会在第一次全盘扫描时关闭 ECC 重试让固件直接报“这个扇区真坏了”第二轮再开启重试尝试恢复。3.3 首轮体检记录 SMART 基线和 session 日志第一次全盘 verify 不是直接用来修的而是用来记录基线。这块盘原本的 SMART 累计错误数、通电时间、温度、可重定位扇区计数都必须留下快照。如果找不到基线修完之后所谓“有效”没有参照我吃过这个亏一块盘修了三个小时回头看连它原来有多少条 G-LIST 都说不清楚。xchdd 的 verify 状态会在任务区实时更新但我建议每次手动导一份日志。日志文件名里带上盘型号缩写和日期例如st4000_baseline_20250601.csv。这个习惯在批量修盘时尤其有用不然几十块盘全叫scan.log第 8 块盘和第 80 块盘就再也分不清了。xchdd verify --device0 --range0:END --moderead-only --logfilest4000_baseline_20250601.csv --interval2048 # --moderead-only 只做纯读不回写任何数据 # --interval2048 表示每处理 2048 个扇区输出一条进度粒度太粗会错过少量坏区太细则日志太大verify 结束后导出的 CSV 里同时有 LBA、错误类型、命令耗时三项。命令耗时是一个容易被无视但极有用的字段如果整盘平均耗时 2 毫秒某个区域突然跳到 3 秒哪怕没有正式报错误那里的磁头也在反复重读。把这类区域标注出来下一轮直接小范围重扫能捞出一大批“还没完全坏透”的扇区。4. 实操维修重映射、逻辑坏道擦除和容量校准的先后顺序verify 只是摸底真正的维修从生成缺陷表开始。这一章最想强调的就是顺序先过滤误报再擦除逻辑坏道最后才重映射。顺序颠倒会浪费替代扇区池甚至把一块本来能救的盘修出更多坏道。4.1 从 verify 日志到缺陷表先做一次“人审”verify 扫出来一堆错误地址不要全选加入 G-LIST。硬件维修和软件修复一样第一步是把误报过滤掉。我会把日志导入 Python 脚本做简单过滤把连续几个 LBA 都报错的区域标记出来单点报错先放一边。连续坏区往往是磁道损伤单点报错更可能是读干扰或者固件瞬时抖动。脚本不复杂但能省很多手动操作import csv from collections import OrderedDict bad OrderedDict() with open(st4000_baseline_20250601.csv, newline) as f: for row in csv.DictReader(f): err row[error_type] if err in (MEDIUM_ERROR, RECOVERED_ERROR): lba int(row[lba]) bad[lba] 1 # 找出连续 8 个 LBA 以上的坏区加入缺陷表候选 span [] candidate [] for lba in bad: if span and lba ! span[-1] 1: if len(span) 8: candidate span span [] span.append(lba) if len(span) 8: candidate span with open(defect_candidate.csv, w, newline) as f: for lba in candidate: f.write(f{lba},MEDIUM_ERROR\n)这里的核心参数是error_type只筛 MEDIUM_ERROR 和 RECOVERED_ERROR不要把 ABORTED_COMMAND 也算进去。ABORTED_COMMAND 多半是盘固件在重试时超时返回表达的不是扇区坏而是命令接口不稳。把这类地址加入 G-LIST 会让替代扇区池白白浪费。4.2 先擦除再重映射逻辑坏道不一定真的坏逻辑坏道的定义是扇区 ECC 校验失效但磁介质本身还能写。这类扇区直接重映射会浪费一个替代扇区而且没有清除盘内部错误日志。我的顺序永远是先擦除再 verify。xchdd 的终端擦除命令可以精确到扇区范围不必把整盘 FORMAT UNITxchdd erase --device0 --start12345678 --count256 --pattern00 xchdd verify --device0 --start12345678 --count256 --skip-ecc --logfilereread.log # --pattern00 用全 0 覆盖数据如果盘上有重要数据这一步必须先备份 # --skip-ecc 在第二遍读时关闭 ECC 重试只看这个扇区能不能真实读出擦除后如果 verify 不再报错说明是逻辑坏道修复完成不需要动缺陷表。如果 verify 仍然报 MEDIUM ERROR才把它加入 G-LIST 重映射。这里有一个容易翻车的地方擦除范围不要一次太大。我看到有人把整个坏区一刀切 ERASE结果扇区明明只有几个坏却把周边几千个本来正常的数据全覆盖成 00等于把一块数据盘修成了空白盘。先擦 256 个再决定是否扩大。4.3 重映射与容量校准G-LIST 满了再谈 P-LIST重映射动作是将坏 LBA 地址添加到 G-LIST由固件把逻辑地址指向替换扇区。xchdd 的 Table Editor 里提供 Add 和 Remove 操作但真正下达给盘的是 Reassign 命令。我会在命令行里让操作过程记录下来xchdd defect --tableG --device0 --add --lba12345678 --reasonMEDIUM_ERROR xchdd info --device0 --showspare --showglist # --showspare 显示当前备用扇区池余量SAS 盘一般按容量比例保留 # --showglist 显示 G-LIST 总条数和最新记录提不提升 P-LIST要看两条G-LIST 已经接近满或者同一个 LBA 在修过后反复复发。P-LIST 是工厂数据私自改动会破坏固件对出厂分区信息的信任有些盘改完会直接报SA surface错误。只有遇到上面两种情况我才会用 merge 操作把 G-LIST 里那些重复出现的地址一次性并进去xchdd defect --tableP --device0 --merge --sourceG --min-reread3 # --min-reread3 的意思是同一 LBA 至少累计 3 次无法读取才允许进入 P-LIST这个参数是保护阀门。如果没有 min-reread一次瞬时误报就可能把一条从未真正损坏的地址写进工厂缺陷表想恢复只能靠出厂固件备份也就是俗称的“后悔药”。--min-reread3是我推荐的折中值正规维修软件里还有更保守的做法是 5但 3 在效率和保守之间比较平衡。5. 避坑xchdd 修盘路上最容易翻车的 5 个现场下面这些情况全是我自己踩过的或者亲眼见过的按现象、原因、解决三步写方便直接对照。5.1 现象SATA 盘在 xchdd 里被认成 SAS容量翻倍一块西部数据 4T 红盘接到 SAS 背板后xchdd 识别出来的型号很正常块大小却显示 4096容量变成 8T。原因很简单SAS 背板 expander 在协商时把 SATA 盘当成了 SAS 盘软件沿用了 expander 报告的虚拟容量。解决方法是重新接线的同时在设备列表手动指定协议类型为 SATA并重新扫描一次。注意 SATA 盘被认成 SAS 后千万不要做任何 FORMAT否则命令会走错协议轻则盘不认数据重则固件锁死。5.2 现象全盘 verify 零坏道但系统里照样卡死有次修一块希捷 SAS 盘xchdd 全盘 verify 跑完日志里一个 MEDIUM ERROR 都没有。但盘挂到服务器上之后文件拷到一半就卡住。后来发现是 verify 模式默认开启了 ECC 重试遇到坏扇区固件自己反复重读重读到成功为止所以外部看起来全是“通过”。原因就是 ECC 重试掩盖了真正的介质缺陷。解决方法是把 verify 参数里的 ECC control 关掉重新跑一遍这一次日志里立刻冒出来几十条 RECOVERED_ERROR说明盘其实早就有了不可靠扇区。5.3 现象重映射回写后坏道旁边又多了一堆新坏道第一次用 xchdd 修一批 SAS 盘时我把整整一段 2 万多个 LBA 的坏区全部 add 到 G-LIST结果修完下一轮扫描坏区没有消失反而向外扩散了几千个 LBA。原因是替代扇区池是有限的一次性把大量地址塞进去固件会把原先健康的备用扇区也消耗掉盘会在后续自检时把这些“被借用”的扇区也标记成缺陷。解决方法是把重映射拆小每个批次最多 100 条处理一批后读一遍确认没有新增再继续下一批。5.4 现象xchdd 提示 ROM busy终端命令 timeout做固件级操作时盘可能正在做内部自检此时终端发指令返回值总是ROM busy。这种情况解释起来很简单盘的后台任务优先级高于外部命令。如果你频繁 CtrlC 重新下发指令只会让盘的后台任务一直被打断时间拖得更久。解决方法是让盘先 idle 一段时间用一条快速命令轮询就绪状态不要连续打断xchdd terminal --device0 --cmdidle --interval5000 --timeout180 # --interval5000 每 5 秒查询一次盘是否就绪 # 如果 180 秒内依然 busy直接断电重启远比原地等待可靠5.5 现象修完以后 SMART 全绿盘上服务器还是掉盘这种情况最气人。表面看 G-LIST 已经写进去verify 也过了SMART 的 Medium Error 计数依然是 0但服务器就是掉盘。原因一般不在缺陷表而在盘的错误日志没有清掉或者固件保存的 Warning Flag 还在。解决方法是修完以后先清错误日志再做一次覆盖读。覆盖读和 verify 的区别是它要回到用户面数据强制走一次完整的 ECC 校验xchdd log clear --device0 --typeerrors xchdd verify --device0 --modeio --reforiginal_media --reportafter_repair.txt # --typeerrors 清空的是内部错误日志不会影响用户数据 # --modeio 触发真实读 IO而不是只查缺陷表映射两遍读下来都稳定才敢把盘还回去如果还掉盘就该怀疑是背板或者线缆的问题不是这块盘的问题。这套 xchdd 资源包里通常带着终端命令索引和一份扫描参数模板下载后先把备份四步跑一遍比直接点维修按钮稳妥得多。6. 收尾的保险固件备份、ROM 对比和维修前后验证6.1 修盘前强制备份ROM、固件、用户区三段别漏xchdd 的备份界面默认是备份整盘镜像但修盘真正需要的备份对象是 ROM、固件和用户数据三个独立区域。ROM 里保存的是盘的最小启动代码固件区保存的是缺陷表和翻译器这两个不完全一样。我一般会把每块盘备份成三个文件一个 ROM bin、一个 overlay bin、一个包含 P/G 表的 service area 副本。备份命令用起来并不复杂xchdd backup --device0 --typerom --filedisk0_rom.bin xchdd backup --device0 --typefw --filedisk0_fw.bin xchdd backup --device0 --typesa --filedisk0_sa.bin # 备份完成后用 sha256sum 对比三个文件的摘要并存进同一个目录备份文件一定要和盘的 SN 编号一一对应。我经历过一次最惨的翻车备份了 10 块盘文件名没带 SN回写时靠目测判断结果把两块盘的固件写反直接变成不识别盘。从那以后我的文件名格式永远是SN型号_备份类型_日期.bin并且备份阶段结束后再多做一步——读回 ROM 和源文件做一次哈希对比确认备份真的有效。这一步多花二十秒能省掉一整天救砖的时间。6.2 维修前后用 SMART 日志和覆盖读验证维修完成不等于能交付。至少要做两轮对照第一轮是 SMART 日志看 Medium Error、Reallocated Sectors 两个值有没有变化第二轮是覆盖读把全盘用户区读一遍确认修过的区域没有再次报错。覆盖读的结果如果出现新的 MEDIUM ERROR说明 G-LIST 并没有被固件真正接受需要回到 Table Editor 重新检查记录格式。我个人的交付标准是修完的盘在 xchdd 里连续跑三次快速 verify每次耗时误差不超过 5%并且最后一次日志里的 RECOVERED_ERROR 比第一次少才允许上机器。三次耗时如果一次比一次长说明盘还在后台做自我修正状态没稳定。6.3 养成一个永远保底的习惯现在再回头看那些被修坏的盘绝大多数不是坏在扫描算法而是坏在“没有备份就开始动固件”这一步。xchdd 这类资源能帮你打开黑匣子但打开以后里面的固件表依然是厂商私有格式一旦写错恢复的成本远高于一块二手盘的价格。所以我修每一块盘前都会强制走一遍“备份 → 哈希校验 → 记录 G-LIST 基线 → 试扫小范围”这四步确认没问题才敢点维修按钮。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
剖析newbie-guide-cj状态管理设计:@State、@Watch与@Observed数据流深度解读 剖析newbie-guide-cj状态管理设计:State、Watch与Observed数据流深度解读 【免费下载链接】newbie-guide-cj 新手引导库 项目地址: https://gitcode.com/Cangjie-TPC/newbie-guide-cj
newbie-guide-cj 是一个面向 HarmonyOS / Cangjie 的高亮型新手引导组件&… · 2026/9/25 1:30:15
华为性格测试通关指南:岗位匹配与答题策略 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:30:15
迪文串口TFT屏通用驱动开发:协议帧解析与可复用驱动层实现 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:30:15
VSCode老手如何高效使用MounRiver Studio II开发沁恒RISC-V /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:08:14
IDA 5.0经典反汇编工具实战:老版本逆向分析全流程指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:08:13
Delphi 12.3 下 ReportMachine 7.0 安装配置与报表开发实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:08:07
Matlab间断有限元求解声波方程:高阶格式实现与稳定计算 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:08:07
AXI wstrb验证实战:Synopsys VIP配置误区与排查技巧 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:08:07
CNN卷积神经网络从原理到实战:PyTorch实现手写数字识别 这次我们来看一个常被“名词吓住”、但实际非常基础的内容:CNN 卷积神经网络。如果你搜过“CNN 原理”,大概率看到的是卷积公式、填充、步长、感受野一堆术语堆在一起,最后也没搞懂它到底在算什么。这篇文章换一种方式讲:先用最直… · 2026/9/25 2:08:07
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37