资讯详情

资讯详情

机械硬盘深度解析:从物理结构到性能边界的存储实践指南

1. 从机房角落那台嗡嗡作响的旧服务器说起如果你曾经在机房待过或者哪怕只是路过一间小型企业的设备间大概率会对那种持续不断的低频嗡嗡声有印象。那种声音十有八九来自机柜里一排排还在服役的机械式硬盘。很多人第一次接触存储这个概念就是从一块3.5英寸的机械硬盘开始的——它沉甸甸的拿在手里能感觉到里面的盘片和磁头通电之后有轻微的震动和寻道声。这种“有物理动作”的存储设备在今天固态介质大行其道的环境下依然占据着相当一部分冷数据存储和近线存储的份额。我写这篇东西的出发点很简单现在网上讲存储的文章要么一上来就是NVMe、PCIe 5.0、IOPS这些偏上层的东西要么就是纯参数罗列很少有人愿意把机械式硬盘这个“老家伙”从里到外讲清楚。但实际工作中你排查一个存储性能问题或者规划一个备份归档方案如果对机械硬盘的物理结构、寻址方式、性能边界没有概念很容易做出错误的判断。比如有人会问“为什么我这块7200转的盘顺序读写能到200MB/s但跑数据库就卡得不行”这个问题的答案就藏在机械硬盘的物理特性里。这篇内容适合几类人看刚入行做运维或存储相关工作的朋友需要补上存储介质这一课做后端开发但经常和磁盘IO打交道的工程师想搞清楚自己写的代码到底在磁盘上发生了什么还有就是对硬件本身感兴趣、想弄明白机械硬盘到底是怎么工作的人。我会从物理结构讲起把寻道、旋转延迟、缓存这些概念拆开揉碎再结合实际的性能测试数据和选型经验把机械硬盘的能力边界和适用场景说清楚。全程尽量用大白话和实际例子不堆公式但该有的计算过程会给出来。2. 拆开一块机械硬盘盘片、磁头与那些看不见的物理约束2.1 盘片与磁道数据到底存在哪里机械式硬盘的核心部件是一个或多个表面涂有磁性材料的圆形盘片通常用铝合金或者玻璃基板做底上面镀一层很薄的磁性介质。盘片固定在主轴电机上工作时以恒定角速度旋转。常见的转速有5400转、7200转、10000转和15000转消费级产品以前两者为主企业级近线存储也大量使用7200转而15000转的盘现在基本被固态盘挤出了主流市场。盘片的每一个面上都有一个读写磁头磁头安装在磁头臂的末端磁头臂由音圈电机驱动可以在盘片半径方向上移动。数据在盘片上是以同心圆的形式排列的这些同心圆叫做磁道。每个磁道又被划分成若干个小段叫做扇区传统扇区大小是512字节现在很多盘采用4KB物理扇区也就是常说的“4K对齐”里那个4K。这里有个容易混淆的点物理扇区和逻辑扇区不是一回事。很多标称512字节逻辑扇区的盘物理上其实是4KB一个扇区中间靠固件做了一层转换。这也是为什么分区时要做4K对齐否则一个逻辑扇区的写入可能触发物理层面的读-改-写性能会明显下降。磁道从外圈到内圈编号外圈磁道周长更长能容纳的扇区数更多所以外圈的数据传输率比内圈高。这也是为什么做分区或者做RAID的时候有人会把性能敏感的数据放在盘片外圈——通过分区工具把起始位置放在靠前的位置就能利用外圈更高的线速度。这个技巧在机械盘时代很实用虽然现在固态盘普及了但在一些大容量机械盘做缓存或分层存储的场景里仍然有参考价值。2.2 寻道、旋转与传输一次IO到底要等多久理解机械硬盘性能的关键在于搞清楚一次读写请求从发出到完成时间花在了哪些环节。整个过程大致可以拆成三部分寻道时间、旋转延迟、数据传输时间。寻道时间是指磁头从当前磁道移动到目标磁道所需的时间。这个时间取决于磁头臂移动的距离短距离寻道可能只要零点几毫秒长距离全行程寻道可能要到十几毫秒。厂商标称的平均寻道时间通常在8到12毫秒之间企业级盘会好一些。旋转延迟是指磁头到达目标磁道后等待目标扇区旋转到磁头下方所需的时间。这个时间平均是盘片旋转半圈的时间。以7200转为例每分钟7200转每秒120转转一圈需要8.33毫秒平均旋转延迟就是4.17毫秒。5400转的盘转一圈要11.11毫秒平均旋转延迟约5.56毫秒。数据传输时间则取决于磁道密度和转速顺序读写时这个环节占主导随机读写时前两个环节占主导。把这三个时间加起来就能理解为什么机械硬盘的随机IOPS上不去。假设平均寻道8毫秒平均旋转延迟4.17毫秒那么一次随机IO的机械延迟就是12.17毫秒理论上限大约是82 IOPS。实际因为排队、缓存等因素单块7200转盘做随机读写通常也就70到80 IOPS左右。这个数字在今天看来低得可怜但这就是物理规律决定的没有任何软件优化能突破。所以当你看到某块机械盘标称持续传输率200MB/s的时候要明白那是在顺序读写、数据连续分布在外圈磁道的情况下测出来的和随机性能完全是两码事。2.3 缓存与指令队列固件层面的那些优化手段机械硬盘上有一块DRAM缓存常见容量从64MB到512MB不等。这块缓存的作用主要有几个一是预读固件会根据访问模式提前把后续可能用到的数据读进缓存二是写缓存写入数据先放到缓存里就返回完成信号之后再慢慢落盘这样能降低写操作的响应时间三是存放固件的映射表和运行数据。但缓存这东西是把双刃剑。开启写缓存能提升性能但如果突然断电缓存里还没落盘的数据就丢了。所以企业级场景通常会禁用写缓存或者配合掉电保护机制使用。消费级盘默认开启写缓存日常使用没问题但如果你拿它做重要数据的存储最好还是配个UPS或者定期做数据校验。另一个固件层面的优化是指令队列。早期机械盘用IDE接口时同一时间只能处理一条指令后来SATA引入了NCQ可以同时接收多条指令固件会根据逻辑块地址重新排序尽量减少磁头来回移动的距离。比如有一批读写请求固件会先把同一磁道或相邻磁道的请求合并处理再去处理远处的请求。这个优化对多线程随机读写的场景有一定帮助但提升幅度有限因为机械延迟的物理下限摆在那里。实测下来开启NCQ后随机读写性能大概能提升10%到30%具体取决于访问模式。3. 机械硬盘的性能曲线为什么顺序和随机差距这么大3.1 顺序读写接近理论极限的表现顺序读写是机械硬盘最擅长的场景。数据在盘片上连续分布磁头不需要频繁寻道旋转延迟也被流水线式的读取掩盖了。以一块7200转、单碟容量1TB左右的现代机械盘为例外圈顺序读取速度可以到200MB/s以上内圈会降到100MB/s左右平均下来大概150MB/s。如果是多碟封装的大容量盘比如8TB、12TB的氦气盘因为碟片数多、磁道密度高顺序传输率会更高一些高端型号能到260MB/s以上。这个性能水平是什么概念呢千兆网络的理论带宽是125MB/s万兆网络是1250MB/s。也就是说一块机械盘做顺序读取基本能跑满千兆网络但跑万兆网络就力不从心了。所以在做备份归档、视频监控存储、大文件分发这类以顺序写为主的场景机械盘依然有成本优势。每TB成本算下来机械盘比固态盘便宜好几倍这是它至今没有被完全取代的根本原因。3.2 随机读写物理延迟主导的残酷现实随机读写是机械硬盘的软肋。前面算过一次随机IO的机械延迟在12毫秒左右对应大约80 IOPS。如果是4KB大小的随机读80 IOPS乘以4KB只有320KB/s的吞吐量。这个数字和顺序读写的200MB/s相比差了三个数量级。所以拿机械盘跑数据库、跑虚拟机、跑容器体验会非常差因为这些都是典型的随机IO密集型负载。有人可能会问那用RAID能不能提升随机性能答案是能但提升幅度受限于物理规律。假设你用8块机械盘做RAID 0随机IOPS理论上能到640左右但实际因为控制器开销、队列深度限制可能也就400到500。而一块主流的企业级固态盘随机读写IOPS轻松到几十万。这个差距不是靠堆盘能追上的。所以现在做虚拟化或者数据库基本都会把机械盘和固态盘分层使用热数据放固态冷数据放机械靠缓存软件或者存储系统的自动分层功能来调度。3.3 访问模式对性能的影响一个实际测试案例为了让大家更直观地理解访问模式的影响我拿一块4TB 7200转的机械盘做过一组测试。测试工具用的是fio分别跑顺序读、顺序写、随机读、随机写块大小统一用4KB和1MB各跑一遍。结果大致如下测试项块大小队列深度带宽IOPS顺序读1MB32186MB/s186顺序写1MB32172MB/s172随机读4KB320.42MB/s105随机写4KB320.38MB/s95随机读1MB3228MB/s28随机写1MB3225MB/s25从表里能看出几个有意思的点。第一顺序读写差距不大写稍微慢一点是因为写缓存和落盘策略的影响。第二4KB随机读写的IOPS只有100左右和理论计算的80多接近说明测试环境没有太多额外开销。第三1MB随机读写虽然IOPS低但带宽比4KB随机高很多因为每次IO传输的数据量大摊薄了机械延迟的影响。这个测试说明如果你的应用能做大的连续IO机械盘还是能用的如果只能做小颗粒随机IO那机械盘就是灾难。4. 选型与部署什么场景该用机械盘什么场景不该用4.1 成本与容量的权衡每TB单价背后的账选存储介质第一个要算的账就是每TB成本。以当前市场行情粗略估算一块8TB的企业级机械盘价格大概在1200到1500元之间折合每TB约150到190元。而一块4TB的企业级固态盘价格可能在2000到3000元每TB要500到750元。如果是消费级产品差距更大。对于需要几十TB甚至上百TB容量的场景比如视频监控、备份归档、冷数据存储机械盘的成本优势非常明显。但成本不能只看采购价。还要算功耗、散热、机架空间、运维成本。机械盘功耗一般在6到10瓦固态盘在2到5瓦。如果是一个几千块盘的大型存储集群功耗差距会反映在电费和散热上。另外机械盘有机械磨损平均无故障时间通常在100万到250万小时之间实际使用中五到八年就可能出现坏道或电机故障。固态盘虽然没有机械磨损但有写入寿命限制不过对于冷数据场景写入量很小寿命通常不是瓶颈。所以综合来看冷数据和大容量场景用机械盘热数据和性能敏感场景用固态盘这个基本策略在很长时间内都不会变。4.2 接口与协议SATA、SAS到底怎么选机械硬盘常见的接口有SATA和SAS两种。SATA接口普及率高主板直接支持线缆便宜适合消费级和中小型企业场景。SAS接口通常用在企业级硬盘上支持双端口可以同时连接到两个控制器实现冗余可靠性更高。SAS盘的MTBF通常也比SATA盘高一个档次固件经过更严格的验证适合7x24小时运行的关键业务。从性能上看SATA 3.0接口带宽是6GbpsSAS 3.0是12Gbps但对于机械盘来说这个带宽远远过剩因为盘本身的持续传输率也就200多MB/s连SATA 3.0的一半都跑不满。所以接口带宽不是选型的关键关键在可靠性和冗余能力。如果你的存储系统需要双控冗余那就必须用SAS盘如果是单控或者直连场景SATA盘性价比更高。另外SAS控制器通常支持更大的端口扩展能力一个HBA卡可以接几十甚至上百块盘适合大规模盘阵。4.3 转速与缓存的选择5400转、7200转还是更高转速直接决定了旋转延迟和持续传输率。5400转的盘便宜、安静、功耗低适合桌面外置存储和冷数据归档。7200转是主流选择性能和成本的平衡点企业级近线存储基本都用这个转速。10000转和15000转的盘现在很少见了因为在这个性能区间固态盘已经全面碾压价格差距也在缩小。缓存容量方面大缓存对顺序读写和预读场景有帮助但对随机读写提升有限。因为随机读写的瓶颈在机械延迟缓存再大也掩盖不了磁头寻道的时间。所以如果你主要跑顺序负载可以优先选大缓存型号如果跑随机负载缓存大小不是关键不如多考虑盘的数量和RAID配置。另外要注意有些厂商会把缓存容量作为营销卖点但实际上固件算法和缓存管理策略比单纯容量更重要。同样64MB缓存的盘不同厂商的预读效率可能差很多。5. 那些年我踩过的坑和总结出的实操经验5.1 4K对齐不是玄学但确实容易被忽略早些年我帮人装系统遇到过一块新盘跑分特别低的情况顺序读写正常但随机写入只有个位数MB/s。排查了半天最后发现是分区没做4K对齐。当时用的分区工具默认按老式512字节扇区对齐而那块盘是4K物理扇区结果每次写入都要触发读-改-写性能直接崩了。后来用对齐工具重新分区随机写入恢复到正常水平。这个坑现在其实已经很少见了因为Windows 7以后的分区工具默认就是4K对齐Linux下的parted和fdisk新版本也会自动对齐。但如果你还在用老工具或者手动指定了起始扇区就要注意检查一下。检查方法很简单在Linux下用fdisk -l看分区的起始扇区号如果是8的倍数对应4KB基本就是对齐的。或者用parted的align-check命令来验证。这个细节对固态盘同样重要虽然固态盘没有读-改-写的问题但对齐会影响闪存的页映射效率对寿命和性能都有影响。5.2 机械盘的震动和温度容易被忽视的物理因素机械盘对震动很敏感。我见过一个案例机柜里盘位密集风扇震动传导到硬盘上导致几块盘的寻道错误率飙升性能下降明显。后来加了减震支架问题才解决。所以如果你在部署多盘位的存储服务器最好选带减震设计的盘架或者把机械盘和固态盘分区域放置减少震动源。温度方面机械盘的工作温度一般在5到55摄氏度之间但长期高温会加速老化。实测下来盘体温度超过45度之后故障率会明显上升。所以机箱风道要做好尤其是高密度盘阵前后风扇要保证足够的风压。另外注意温度过低也不行比如在寒冷地区没有暖气的机房里盘体温度低于10度时轴承润滑可能变差启动时会有异响甚至启动失败。有些企业级盘会标称支持更宽的温度范围但消费级盘最好还是在常温环境下使用。5.3 坏道检测与数据迁移别等盘挂了才行动机械盘是消耗品坏道是迟早的事。关键是要在坏道扩散之前发现并迁移数据。我一般建议用SMART工具定期检查几个关键指标重映射扇区计数、待映射扇区计数、寻道错误率、通电时间。如果重映射扇区数开始增长说明盘片表面已经出现物理损伤虽然固件会用备用扇区顶替但备用扇区用完盘就废了。这时候就应该准备换盘了。检测坏道可以用badblocks做全盘扫描但注意这个操作很耗时一块4TB盘扫一遍可能要十几个小时而且对盘有一定磨损。更温和的方式是用smartctl做短测和长测短测几分钟长测根据容量不同可能要几小时。如果长测通过但SMART有异常可以再用badblocks做非破坏性读写测试确认。数据迁移方面如果是单盘直接dd或者rsync拷到新盘就行如果是RAID换盘后让控制器自动重建但重建期间性能会下降而且如果其他盘也有隐患重建过程中可能再挂一块导致阵列失效。所以RAID重建前最好先备份重要数据或者用更高冗余级别的RAID配置。5.4 机械盘做系统盘的体验与优化空间现在很少有人拿机械盘做系统盘了但有些老设备或者预算极低的场景还在这么用。我的经验是如果非要用机械盘做系统盘一定要做这几件事第一把系统和常用软件装在盘片外圈也就是分区时把C盘放在最前面第二关闭Windows的自动碎片整理改用第三方工具定期整理因为系统自带的整理有时会过度频繁第三把虚拟内存和临时文件夹放到另一块盘或者内存盘上减少系统盘的随机写入第四禁用一些不必要的后台服务比如Windows Search索引这些服务会频繁扫描磁盘拖慢整体响应。实测下来优化之后机械盘做系统盘的体验能从“无法忍受”提升到“勉强能用”但和固态盘还是有质的差距。所以如果预算允许哪怕加一块小容量固态盘做系统盘机械盘只做数据盘体验都会好很多。这个组合方案在旧电脑升级里非常实用花小钱办大事。6. 机械硬盘在今天的存储体系里到底扮演什么角色6.1 冷数据与归档机械盘的主战场冷数据是指那些访问频率很低、但需要长期保存的数据比如历史备份、合规存档、科研数据、监控录像。这类数据的特点是写入后很少读取对延迟不敏感但对容量和成本敏感。机械盘在这个场景几乎没有对手。一块16TB的机械盘每TB成本不到100元功耗也低适合大规模部署。很多云服务商的归档存储层底层就是高密度机械盘阵列配合纠删码或者多副本保证可靠性。在这个场景里选型的关键不是单盘性能而是每机架单位的容量和功耗比。氦气密封技术让单盘容量突破到20TB以上SMR技术进一步提升了磁道密度虽然SMR盘的随机写入性能很差但冷数据场景基本是顺序写入影响不大。不过SMR盘在RAID重建时可能会有问题因为重建过程涉及大量随机写入SMR盘的写入放大可能导致重建时间过长甚至失败。所以如果用SMR盘最好配合支持SMR感知的存储系统或者直接用DM-SMR模式并做好写入管理。6.2 近线存储与分层机械盘和固态盘的配合近线存储是指那些访问频率中等、对性能有一定要求但不像热数据那么敏感的场景。比如企业的文件服务器、备份服务器的缓存层、虚拟化环境里的温数据。这些场景通常用机械盘做容量层固态盘做缓存层靠存储系统的自动分层功能把热点数据提升到固态盘冷数据下沉到机械盘。这种分层方案的效果取决于缓存算法和访问模式的匹配度。如果访问模式比较稳定热点集中分层效果就很好能用少量固态盘带动大量机械盘。如果访问模式很分散热点频繁变化分层效果就会打折扣。实际部署时我一般建议先用监控工具采集一段时间的IO访问模式分析热点数据的比例和变化规律再决定固态盘和机械盘的比例。一般来说如果热点数据占比在10%以内用10%的固态盘做缓存就能覆盖大部分IO如果热点占比超过30%可能就需要考虑全闪存或者更大比例的固态盘了。6.3 机械盘的未来会被完全取代吗从趋势上看固态盘的价格在持续下降容量在持续上升机械盘的市场份额确实在被逐步蚕食。但要说完全取代短期内不太现实。因为固态盘的每TB成本还是比机械盘高不少而且闪存的写入寿命限制在冷数据场景虽然影响不大但在一些写入密集的场景仍然是问题。另外机械盘的容量还在增长HAMR和MAMR等新技术能把单盘容量推到30TB甚至更高这个容量级别在冷数据存储里还是有竞争力的。所以我的判断是机械盘会逐渐退守到冷数据和大容量归档这个细分市场和固态盘形成明确的分工。对于从业者来说理解机械盘的物理特性和性能边界不是为了继续用它做主力存储而是为了在合适的场景用合适的介质避免一刀切地全盘否定或者全盘依赖。存储这个领域从来都是分层和权衡的艺术没有一种介质能通吃所有场景。7. 写在最后一些零散但实用的建议如果你正在规划一个存储方案我的建议是先搞清楚数据的访问模式。用工具采集一周的IO数据看看读写比例、块大小分布、随机还是顺序、热点集中度。这些数据比任何理论分析都管用。然后根据访问模式选介质顺序为主、容量优先的场景大胆用机械盘随机为主、延迟敏感的场景老老实实上固态盘。混合场景就做分层但分层策略要经过验证别拍脑袋决定缓存比例。如果你手头有旧机械盘别急着扔。拿来做离线备份、做测试环境的数据盘、做监控录像的存储都还能发挥余热。但记得定期检查SMART发现异常及时迁移数据。机械盘这东西坏起来往往是突然的提前做好冗余和备份比事后恢复划算得多。最后说一个我自己的习惯每块机械盘在正式投入使用前我都会做一次全盘写入测试把每个扇区都写一遍然后再读一遍校验。这个过程很耗时但能提前发现出厂坏道或者运输损伤。测试通过之后再放进阵列或者投入生产心里踏实很多。这个习惯帮我避开了好几次刚上架就掉盘的尴尬情况虽然费点时间但值得。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →