存储系统原理与运维实践:从IO路径到RAID故障排查详解
存储系统是最容易被低估的东西。很多项目跑了一年两年都没出过事于是从上到下都默认存储不就是几块硬盘嘛。直到某天磁盘告警、IO卡死、备份失败同时炸出来你才会发现根本不知道从哪查起。我在某个数据系统中处理过几次存储故障之后最深的感觉是存储系统的难点不在于它有多复杂而在于问题出现之前你几乎感知不到它。这篇文章就围绕服务器存储系统把原理和运维实践放在一起讲包括存储池与文件系统的关系、RAID的边界、IO路径上的瓶颈、以及一块硬盘掉线之后完整的排查链路。适合运维工程师、后端开发以及所有自己维护物理服务器的团队参考。我写这篇文章的目的很直接把那些不出事永远想不到的东西摆到台面上。存储不像业务代码没有报错堆栈出问题的时候往往只剩一堆含糊的性能指标和零散的日志。所以与其等事故不如先从原理上把整条链路理清楚再对照运维动作逐项检查。1. 存储系统为什么难先想清楚业务到底在跑什么很多人在存储上踩坑第一个原因就是没有搞清楚存储系统的分层结构。你以为在操作硬盘实际上一条数据写下去要经过应用、操作系统、文件系统、驱动、控制器好几层每一层都有自己的一套机制和缓存。平时感觉不到它们存在但一旦某一层出问题表现就会非常奇怪。1.1 从物理盘到应用写入一条完整的数据通路先画一条完整的数据通路记忆里得有这么一张图否则排查的时候容易被表象带偏。上层应用发起一个 write() 系统调用数据先到虚拟文件系统VFSVFS 根据文件路径找到对应的文件系统实现比如 ext4 或 xfs。文件系统把这次写入对应到具体文件在磁盘上的逻辑位置同时更新元数据文件大小、修改时间等。接着这些块级的请求进入块设备层Block Layer块层负责合并排序、做IO调度然后把请求发给真正的存储设备驱动程序。如果底层是RAID卡驱动程序把请求交给RAID卡固件固件再按照自己的算法把数据分散到阵列里的不同物理盘上。这条链路在教科书上很清晰但实际运维中麻烦的是每一层都有自己的缓存和延迟。比如文件系统有page cache块层有IO调度队列RAID卡有读写缓存硬盘自身还有DRAM缓存。数据真正落盘的时刻和你调用 write() 返回的时刻之间差了多少取决于这些缓存的配置。如果某层缓存策略配置失误最典型的表现就是写入显示成功但断电后数据丢了。这种问题最伤脑筋因为你无从排查只能靠重新审视每一层的刷盘语义来定位。1.2 两种典型业务负载顺序大IO与随机小IO谈及存储性能首先要想清楚业务负载长什么样。我一般把负载粗分成两类一种是吞吐型比如视频文件归档、数据库备份文件转储特点是单个IO很大几十KB到几MB对顺序读写的带宽要求高另一种是延迟敏感型比如数据库的事务日志、大量小文件的元数据读取特点是单个IO很小4KB到16KB但对随机IOPS和时延要求极高。这两种负载对存储系统的要求几乎是相反的。吞吐型业务机械硬盘RAID阵列依然能打因为顺序读写是机械硬盘最擅长的场景但随机小IO场景机械硬盘的寻道延迟会成为致命瓶颈这时候不考虑SSD或者加缓存层性能大概率顶不住。在评估存储系统之前先回答我主要是哪种负载选型基本就有方向了。很多项目存储慢不是因为盘不好而是因为负载类型与存储形态不匹配。1.3 硬盘的三种形态与选型边界硬盘形态的选择本身没有绝对优劣关键是边界要清楚。SATA机械盘成本最低、容量最大适合冷数据归档、备份存放这类数据对时延不敏感但对单GB成本很敏感。SAS机械盘比SATA贵一些双端口、可靠性更高适合传统企业级阵列但如今优势不再明显。NVMe SSD性能和时延都吊打机械盘耐久度也在逐年提高适合热数据、数据库、高频读写场景但容量成本依然下不来。我自己做选型的时候习惯用一个很朴素的判断标准这个数据丢失或性能不足的代价是否值得我花十倍价格上SSD如果只是日志归档、备份集存放老老实实用机械盘把省下的预算投到网络和CPU上如果是核心业务库、在线索引库别犹豫该上NVMe就上NVMe。折中的做法是分层存储热数据放SSD冷数据定期迁移到机械盘中间的调度策略交给存储池或自研脚本去处理。这个思路在后文的容量管理中还会再展开。2. RAID不是备份从安全预期到实际故障模型RAID 可能是存储领域误解最深的概念。做了RAID 5挂了盘还能跑给很多人一种虚假的安全感。真实情况比这个复杂得多RAID 解决的是磁盘单点故障下的可用性问题它既不防逻辑删除也不防坏道扩散更不防你手滑执行了错误的初始化。2.1 RAID级别还原0/1/5/6/10到底各写了什么很多人能背出RAID级别的字面含义但没有认真想过数据在盘上到底怎么分布。我在下面列个表对照着想会清晰很多。RAID级别容错能力最少盘数有效容量典型场景核心风险RAID 0无2总容量临时缓存、可重建数据任意单盘损坏全阵列报废RAID 1单盘2盘数的一半系统盘、重要小数据没有校验重建靠拷贝RAID 5单盘3总容量减一块中小规模存储池大容量盘重建窗口期长RAID 6双盘4总容量减两块大容量盘存储池写入性能损耗明显RAID 10单盘每组4总容量的一半数据库、高IO场景成本高有效容量低RAID 5 的数学原理很简单把校验块轮流分布到每块盘上任何一块盘失效时可以通过其余盘的异或运算把数据算出来。问题是算出来这个过程需要在重建时读取全部盘的完整数据这个时间窗口越长风险就越大。2.2 重建窗口期的二次风险RAID 5 构建时阵列里的每块盘都参与校验计算但校验块只存一份。某块盘整个失效后阵列进入降级模式此时只要再坏一块盘阵列就彻底崩溃。这个阶段所有剩余盘都在满负荷读取参与重建负载压力远大于正常状态恰恰又是剩余盘最容易暴露潜在坏道的时候。现代大容量机械盘单盘容量动辄十几TB重建时间可能长达十几个小时甚至几天。更麻烦的是重建过程中如果任何一块盘上出现不可恢复的读取错误Unrecoverable Read ErrorRAID 5 阵列就直接救不回来了——没有第二份校验去纠正这个错误。这就是为什么多块大容量盘的场景我宁可选RAID 6虽然写性能有损耗但允许在重建窗口期内再坏一块盘而不丢数据。对很多业务来说多付两块盘的成本远比赌数据没事来得稳妥。2.3 备份、快照、RAID三者之间的真正分工真正可靠的数据安全体系不是选一个技术就能解决的而是三道防线各司其职。RAID/存储池负责抵御硬件故障保证某块盘坏了服务不中断快照负责抵御逻辑错误比如误删文件、数据库误操作回到几分钟前的状态异地备份负责抵御站点级灾难比如机房断电、火灾、勒索病毒。现实中出问题的案例往往是运维做了RAID 1就认为高枕无忧结果业务被误执行rm -rf删光RAID根本帮不上忙又或者快照备份保存在同一台机器的另一块盘上整机坏掉时快照跟着一起消失。我个人的习惯是先梳理清楚数据资产的保护等级核心业务数据必须做到RAID 每日快照 定期异地副本普通日志类数据做到RAID即可完全可再生的临时数据连RAID都可以不做直接单盘存储省下的成本用在核心数据上。3. 文件系统选型与存取路径上的隐藏开销文件系统是存储链路里最容易被忽视的一环。很多人选文件系统的方式就是装系统默认啥就用啥但对一个承担高IO负载的存储服务器来说文件系统选错、挂载参数不对性能差距可能超过20%。3.1 ext4、xfs到底怎么选ext4 是最通用的选择部署简单、文档多、各种工具链支持最成熟在单机小规模场景下几乎不会出错。xfs 在较大文件和大量并发IO下表现更好RHEL系列从很早就把xfs作为默认文件系统它尤其适合大文件连续读写和并行处理。相对小众的还有btrfs和zfs它们内置了快照、校验和、存储池等功能功能强大但运维复杂度高需要专门理解。选型上没有一刀切的答案。我的经验是常规业务、团队基础能力一般、希望降低维护成本直接 ext4服务器上跑视频、镜像、大数据类文件且都是大文件顺序读写xfs更适合如果一定要快照和数据校验能力那就用ZFS但前提是你得接受它的内存占用ARC缓存通常建议按每TB存储配1GB以上内存和手动调优学习曲线。不要在一个没有专人维护的团队里贸然上ZFS功能越强出事时排查难度越高。3.2 挂载参数与日志机制不起眼但是关键文件系统的挂载参数里藏着一大堆性能和安全开关。最常用的一条是noatime关闭文件访问时间的实时更新可以显著减少元数据写入尤其是大量小文件随机读的场景效果立竿见影。数据完整性要求高的场景则要注意日志模式ext4的dataordered保证数据先于元数据落盘虽然在崩溃恢复时更安全但也会增加一次额外写入如果业务对数据丢失容忍度较高、追求极致性能有人会调成datawriteback但掉电丢数据风险明显上升这个权衡只能业务部门自己拍板。日志机制值得单独说两句。不管是ext4的journal还是xfs的log它们存在的意义是保证崩溃后文件系统结构一致metadata一致性但代价就是写入放大。每一次元数据变更都要先写日志再落盘也就是常说的先写日志、后写数据。对随机小IO场景日志盘和业务盘分离是常见的优化手段——把journal放在单独的SSD上减少机械盘上日志与业务数据的竞争。很多项目卡IO排查下来不是业务数据读写慢而是日志写入拖住了整体换掉日志位置后性能立刻好转。3.3 完整IO路径中的瓶颈转移存储调优有个陷阱把性能问题简单归咎于硬盘不够快然后砸钱上SSD结果一两周后又变慢。IO瓶颈很少恒定在某一个环节它会随着硬件升级和设备配置发生转移。一条IO路径上除了硬盘本身还有文件系统缓存、IO调度算法、设备驱动的中断处理、网络存储如果是iSCSI或NFS的协议开销。当你把机械盘换成NVMe后瓶颈很可能转移到软件层CPU在中断处理上忙不过来、文件系统的锁竞争加剧、IO调度器反而拖了后腿。举个典型例子老内核版本的IO调度器针对机械盘做了大量排队优化用在NVMe上反而造成额外的延迟和CPU浪费。所以升级硬件前先审视整个软件链路否则花钱也解决不了问题。4. 性能调优先看指标再动参数存储性能调优最忌讳操作顺序反过来上来就改内核参数改完发现没效果或者变差了。我自己的标准流程是先量化现状再定位瓶颈最后针对性地改配置每一步都要有数据支撑。4.1 别在业务卡顿的时候才看磁盘很多人是听到系统变慢了才跑到服务器上敲几个命令但那种事后看现场的方式基本只能看到结果看不到过程。存储性能问题必须平时就有监控数据否则卡顿的那几分钟过去之后你根本没有足够的信息去定位。在性能排查时我最常用的几组命令是iostat -x 1看每块盘的IOPS、吞吐量和%utiliostat -d 2 -x看await平均IO处理时间和svctm平均服务时间sar -d看历史趋势pidstat定位哪个进程在疯狂读写。其中await和svctm有一个经典的判断逻辑如果await明显大于svctm说明IO在队列里排队了硬盘忙不过来如果两者接近说明IO本身执行得很慢多半是硬件问题或链路问题。这个判断虽然粗略但能快速圈定方向。4.2 内核与挂载参数实际改变了什么文件系统挂载参数和内核IO参数的调整是我在存储调优中放在优先级的最后一步因为它们影响所有应用改不好会全局受损。几个值得关注的点IO调度器方面机械盘SATA接口下的mq-deadline或老内核的deadline能保证读写请求不会饿死适合大多数场景NVMe盘直接设none即可也就是不做调度让硬件自己处理避免额外的排队延迟。脏页回写参数方面vm.dirty_ratio和vm.dirty_background_ratio控制脏页的积压水位这两个参数过高会导致某个瞬间系统突然卡顿——因为大量脏页需要一次性刷盘一般建议dirty_background_ratio设在5到10之间dirty_ratio在20左右避免内存里积压太多未落盘数据。预读大小方面blockdev --setra控制顺序读的预读量对大文件顺序读取有帮助但对随机读可能是反优化。以上参数没有标准答案只能在你的实际负载下压测观察。我通常会用fio做对比测试同一个参数改前改后各跑一轮数据说话。4.3 一次顺序写不达标的排查案例复盘某个项目里有一台存储服务器配置了SATA企业级SSD宣称顺序写入能达到500MB/s以上但实际测试只有200MB/s。第一次排查时大家下意识认为是SSD故障或接口速率问题但实测硬盘直连的速度是达标的。逐步排查后发现三个叠加因素一是该SSD走的是一个老旧的SATA控制器队列深度只有32无法发挥大IO并行度二是文件系统是ext4且挂载时保留了atime更新每次写文件都要同步更新元数据纯顺序写的场景白白多了不少小IO三是IO调度器用的是老式cfq它在机械盘上很实用但对SSD来说过度排队。逐项处理后顺序写提升到480MB/s基本接近标称。整个过程没有换盘也没有加钱只是把挂载参数中atime改为noatime、把调度器改为none、升级驱动以支持更高队列深度。这个案例说明存储性能问题往往不是一个单独的硬件不行而是旧配置、旧驱动、旧文件系统参数多个小问题堆叠出来的。排查不能停在外表要一层层向下拆。5. 一块硬盘掉线之后完整排障链路复盘存储运维里真正考验人的是硬件故障发生之后的操作。一块盘说掉就掉RAID阵列进入降级状态这时候你做的每一个决定都可能影响数据安全。我复盘过几次线下排障过程发现有一套固定的链路是必须走的。5.1 从告警到现场第一步不要急着拔盘先讲一个最常见的错误收到磁盘故障告警后立刻拔盘更换。拔盘这个动作本身没问题但前提是你已经确认了哪块盘以及为什么坏。在多盘位服务器里拔错盘的后果比故障本身严重得多——RAID阵列可能当场崩溃。我的习惯是先冷静检查告警信息登录服务器确认驱动器和槽位的对应关系用smartctl确认哪块物理盘SMART状态异常再查看RAID控制器日志如MegaCli64 -PDList -a0或storcli /c0 /eall /sall show确认是否真的发生了故障、以及该盘在阵列里的角色。在没有确认到底是物理盘故障还是链路不稳定之前不要动任何硬件。5.2 日志与状态读取SMART、内核日志、控制器日志收到告警后我会按顺序读取三类信息第一是SMART信息重点看Reallocated_Sector_Ct重映射扇区数、Current_Pending_Sector待重映射扇区、UDMA_CRC_Error_Count接口错误计数。这些指标出现持续增长基本上可以断定物理盘正在劣化。第二是内核日志dmesg -T | grep sda以及/var/log/kern.log看有没有大量的IO错误、blk_update_request超时或I/O error字样这些能判断是盘本身坏了还是链路问题。第三是控制器日志RAID卡或HBA卡会记录具体的盘符、错误类型、降级状态这是最后确认的依据。有一点特别重要SMART里如果只是Current_Pending_Sector偶尔出现一两个且没有持续增长可能是偶发的坏块先不急着判定为故障但如果连续两次检测都在增加就该列入更换计划了。绝大多数不可预测的阵列崩溃在SMART数据里都有预兆只是没人去看。5.3 替换、重建与数据完整性确认确认故障盘之后替换步骤也有门道。带热备盘的阵列会自动开始重建但如果你想手动替换尽量做到先确认备件兼容、再确认槽位、然后拔盘换新盘一个环节都不要省。重建期间能做的操作有两个一个是监控重建进度MegaCli64 -LDInfo -Lall -a0或storcli /c0 /lx show rebuild另一个是尽可能降低系统负载避免新的IO压力叠加到重建流量上。如果该业务允许我通常会临时停掉一些重型批处理任务让重建尽量顺畅完成。重建完成后不要急着宣布恢复。我会做一个数据完整性检查在关键目录用diff和校验和工具核对一下文件是否正常数据库场景下选择一个业务低谷窗口做一次恢复演练确保数据确实可用。很多团队做到重建完成就收工这其实不够因为RAID重建只保证结构完整不代表所有数据在应用层面逻辑正确。完整性校验才是真正兜底的环节。6. 监控与容量管理面向故障而不是面向图表监控面板花花绿绿看起来很热闹但如果告警阈值设得离谱、容量预测全凭拍脑袋监控就是个摆设。存储监控的目的是提前发现故障并给出处理时间窗不是追求看到所有指标。6.1 告警阈值怎么定不是越低越好告警阈值设得过于敏感会让团队疲于应对无意义的通知最终产生告警疲劳真正的问题反而被忽略。存储监控里我认为优先级最高的指标是SMART关键字段重映射扇区、待重映射扇区、CRC错误、RAID阵列的降级状态、IO时延特别是await超过某个基线的时间比例、文件系统空间使用率。这些指标的最佳实践不是设一个固定的死值而是以基线浮动的方式判断。比如await平时平均20ms突然连续15分钟稳定在200ms以上这种异常比超过某个恒定阈值更容易准确反映故障。使用像vmalert或Prometheus的规则引擎可以方便地写滑动窗口判断不用等人工观察。不掉链子的监控核心是变化检测而不是超限报警。6.2 容量预测实践存储增长率计算容量管理最怕月底了才想起来看一次磁盘空间。我通常给团队定的规矩是每月做一次容量盘点记录总量、已用、增长量然后按这个增长率估算未来6个月、12个月的使用趋势。比如存储池当前总量20TB已用16TB过去3个月增长了1.2TB也就是平均每月增加400GB。按这个增速再过10个月基本会耗尽那么9个月左右就得上扩容流程或清理流程。这个推算很简单但难的是坚持执行和结合业务趋势修正。如果知道下季度要接入新的数据源、历史数据要保留更久那就要在预测模型里加入相应增量不能只靠历史曲线外推。实践里我见过太多容量预测没做、突然满盘告警的被动局面提前把容量趋势做成月度review基本能避免这类风波。6.3 恢复演练清单比监控更重要的一件事监控和演练是存储运维的两条腿但绝大多数团队的演练频率远低于监控建设频率。我建议至少每季度做一次针对存储的恢复演练内容按优先级排列核心目录从快照恢复的流程是否顺畅RAID阵列热备重建的完整演练可以挑一台已有冗余盘的机器模拟故障插入从异地备份恢复关键文件集的操作步骤数据库存储是否能在限定时间内恢复到某个时间点。演练不是走流程而是让团队把操作步骤真正做过一遍因为存储恢复中的很多坑——比如备份文件损坏、密钥过期、归档路径不对——只有在真实操作时才暴露出来。每次演练后把操作手册更新一遍把暴露的问题记入风险清单。这个投入看起来没有实际产出可在真出事那天它就是救命的。做存储运维时间长了我最大的体会是部署好一套存储系统只是开始后面不间断的监控、容量规划、故障演练才是真正的日常。存储系统不像业务功能那样能立竿见影地看到产出但它就像地基不出事的时候没人觉得重要一旦出问题就是大问题。希望这篇文章能帮你把存储系统的原理和运维动作对齐少走一些我走过的弯路。

相关新闻

Spec Kit 实战:把 API 规格当代码管理,终结文档与代码脱节

Spec Kit 实战:把 API 规格当代码管理,终结文档与代码脱节

作为常年跟接口文档较劲的开发者,我第一次听到 GitHub Spec Kit 这个说法时,第一反应是“这估计又是某个把一堆配置文件包装成新概念的工具”。真正研究之后才发现,它代表的是一套非常务实的工程思路:把 API 规格当成正式工件&…

2026/10/19 2:55:56 阅读更多 →
.NET配置加密实战:用aspnet_regiis加密web.config和app.config连接字符串

.NET配置加密实战:用aspnet_regiis加密web.config和app.config连接字符串

很多.NET开发者在项目上线一段时间后,都会遇到一个尴尬的问题:数据库连接字符串明文躺在web.config或app.config里,运维同事一不小心就能看到生产库地址和账号,甚至有些客户的验收标准里就明确要求“配置文件里的密码不允许明文存…

2026/10/19 2:55:56 阅读更多 →
JavaWeb新闻期刊管理系统:从JSP+Servlet到课程设计完整实践

JavaWeb新闻期刊管理系统:从JSP+Servlet到课程设计完整实践

简介:基于JavaWeb的新闻期刊管理系统是一个面向计算机专业课程设计、期末大作业及毕业设计场景的完整项目,覆盖新闻/期刊的发布、分类、检索、用户管理及后台维护等典型业务模块。压缩包内含339个文件,整体约78.1MB,其中java/jsp文…

2026/10/19 2:54:55 阅读更多 →

最新新闻

从线上故障到open-code-review:构建可落地的代码评审体系

从线上故障到open-code-review:构建可落地的代码评审体系

从线上故障聊起:为什么我需要一套“open-code-review”体系干后端这些年,我最怕听到的一句话不是“服务器挂了”,而是“谁昨天改的这段逻辑,怎么没看出来有问题”。另一个更尴尬的场景是:代码审查看似走完了流程&#…

2026/10/19 3:47:18 阅读更多 →
GeckoLib开发包:在Minecraft Forge 1.12.2中实现骨骼动画

GeckoLib开发包:在Minecraft Forge 1.12.2中实现骨骼动画

简介:面向Minecraft模组开发者的Forge 1.12.2 geckolib集成开发包,解决了在旧版本中实现实体与物品动画效果的技术门槛。包内直接整合geckolib源码,并附带一个名为whiplash的样例实体,开发者可在IDEA中直接打开工程,参…

2026/10/19 3:47:18 阅读更多 →
从零搭建Open Code Review工具链:选型、实践与避坑指南

从零搭建Open Code Review工具链:选型、实践与避坑指南

在团队里推代码审查这件事,我见过太多从“热血启动”到“形同虚设”的案例。一开始大家兴致勃勃,觉得终于要提升代码质量了,结果推行一个月后,Review变成“LGTM”打卡,两个月后连打卡都省了,PR直接空降主干…

2026/10/19 3:47:18 阅读更多 →
FPGA自动售货机Verilog状态机设计:从消抖到找零的完整实现

FPGA自动售货机Verilog状态机设计:从消抖到找零的完整实现

简介:东南大学信息学院短学期数字系统设计源代码包围绕FPGA自动售货机项目展开,以现场可编程门阵列为平台完成原型设计,适合数字逻辑与可编程逻辑课程的学生参考。项目完整覆盖货币识别、商品选择、支付处理、库存管理等经典控制逻辑&#xf…

2026/10/19 3:47:18 阅读更多 →
读卡器驱动资源包使用指南:安装、动态库调用与二次开发避坑

读卡器驱动资源包使用指南:安装、动态库调用与二次开发避坑

简介:明华澳汉读卡器驱动是为解决明华澳汉品牌读卡器在Windows操作系统下无法被正确识别、无法正常读写SD/MMC/CF等存储卡的问题而发布的驱动程序包,同时附带IC卡管理程序,适合需要部署读卡器硬件的终端用户及从事智能卡应用开发的VB工程师。…

2026/10/19 3:47:18 阅读更多 →
桌面端优先的CRM如何重塑客户管理与销售管道效率

桌面端优先的CRM如何重塑客户管理与销售管道效率

1. 为什么我这样的业务团队会盯上"桌面端优先"的CRM干了这么多年销售运营和客户成功,我经手过的CRM系统两只手数不过来。大部分产品打开后台,第一眼都是密密麻麻的Web表单,想查一条客户记录最少要点四五次鼠标。直到我接触到Deskco…

2026/10/19 3:46:18 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →