草庐IT

机械硬盘买64M缓存!别买256M?

赵悟省 2023-03-28 原文
虽然SSD的价格已经降了不少,但大容量存储还得靠机械硬盘撑腰,毕竟500元买4T对谁来说都有不小的诱惑……什么?你说4T硬盘只要450就能到手了?那我可得问问你,你说的这4T硬盘,它的缓存大么?有256M啊?那你可别买。

为什么256M缓存的机械硬盘别买,而要买64M缓存的硬盘呢?难道硬盘的缓存不是越大越好么?下面我们就来聊聊硬盘的缓存。

熟悉机械硬盘工作原理的玩家都知道,硬盘中的缓存主要起到快速读取的作用,因为盘片的读写速度更慢一些,加上磁头寻道的时间,使得硬盘的读写都较为缓慢,而加入了缓存这一机制之后,借助DRAM缓存的高速特性,可以实现更快的读写。

具体来说,硬盘在写入数据时,数据先进入速度快的缓存中,然后再由磁头写入盘片;而在读取过程中,数据先由盘片读取到缓存中,再从缓存读出,如果数据恰好保存在缓存中,就可以跳过从盘片读取这个步骤,实现更快的读取。

在早期硬盘容量较小时,缓存容量也很小,40G的机械硬盘缓存可能只有2MB,随着硬盘容量的不断提升,机械硬盘的缓存也逐步提升至8MB、16MB、32MB、64MB。

从理论上就可以知道,更大的高速缓存容量可以大幅提高机械硬盘的突发读写速度,特别是当机械硬盘需要频繁修改数据时,可以使其性能发挥到极致,从而进一步提高机械硬盘的寿命。

不过随着SMR也就是叠瓦式硬盘的推出,缓存越大越好这个定律就破灭了。因为叠瓦式硬盘的缓存普遍都在256MB,看起来可以秒杀传统的机械硬盘,但其背后的原因大多数用户却不知道。

传统磁记录(上)和叠瓦式磁记录(下)对比

传统硬盘采用的是CMR传统磁记录,其记录方式是在磁道之间留出一定的间隙,以避免不同磁道之间的数据干扰,不论写入还是读取,磁头都是从磁道上方经过,完成读写的操作。

而SMR叠瓦式磁记录则是为了更好地利用盘片上的空间,把磁道的距离拉近,从而在盘片上容纳更多磁道,同时改变磁头的位置,让磁道在写入数据的时候可以减少对临近一行磁道的干扰。

但是问题在于,在磁盘写入数据之后,在已经有数据的磁道写入数据时,下一条磁道的数据会被擦除,需要先备份下一条磁道的数据。

但是在写入下一条磁道数据时,又会擦除下下一条磁道的数据,解决办法是每隔一部分磁道设置一块安全距离,并采用大容量的缓存区来放置数据。

SMR被用户诟病的地方就在于,当硬盘存放了较多的数据之后,即使是微小的数据改动,也会反复迁移扇区内的数据,这不仅会影响写入速度,同时还会加速盘片和磁头的老化,数据存放的风险就增加了。

当然,并不是说SMR硬盘就完全不值得购买,因为其有更高的数据密度,意味着同样体积下可以提供更大的容量,而且相对价格更便宜,对于部分对数据密度要求更高的用户来说还是值得入手的。

如果要存放大容量的冷数据,也不用担心磁头老化和盘片频繁读写的问题,同样可以用SMR硬盘来降低成本。

不过对于大多数用户来说,还是直接购买CMR硬盘更加稳妥,毕竟4T的价格也贵不了多少钱,而且数据稳定性更高,使用的时候不用区分热数据冷数据,多花一点钱买这个放心也是非常值得的,而且挑选起来也很容易,买的时候看准64MB缓存即可。

有关机械硬盘买64M缓存!别买256M?的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  4. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  5. ruby-on-rails - Ruby on Rails 计数器缓存错误 - 2

    尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot

  6. ruby-on-rails - Rails 基本 Base64 身份验证 - 2

    我正在尝试复制此GETcurl请求:curl-D--XGET-H"Authorization:BasicdGVzdEB0YXByZXNlYXJjaC5jb206NGMzMTg2Mjg4YWUyM2ZkOTY2MWNiNWRmY2NlMTkzMGU="-H"Content-Type:application/json"http://staging.example.com/api/v1/campaigns在Ruby中,通过电子邮件+apikey生成身份验证:auth="Basic"+Base64::encode64("test@example.com:4c3186288ae23fd9661c

  7. ruby-on-rails - 在 rails 中显示 base64 编码的图像 - 2

    我正在向我的Controller发送一个base64图像并按原样保存它。现在我需要显示该图像。这是我要显示的内容,但未显示图像:"/>为了编码,我使用了这个java脚本函数encodeURIComponent();我的编码图像格式:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/........ 最佳答案 你不需要解码base64应该可以 关于ruby-on-rails-在rails中显示base64编码的图像,我们在StackOve

  8. ruby-on-rails -/usr/local/lib/libz.1.dylib,文件是为 i386 构建的,它不是被链接的体系结构 (x86_64) - 2

    在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto

  9. ruby - libxml-ruby 无法在 x86_64 上加载 - 2

    我们在服务器端遇到libxml-rubygem的问题可能是因为它使用x86_64架构:$uname-aLinuxip-10-228-171-642.6.21.7-2.fc8xen-ec2-v1.0#1SMPTueSep110:25:30EDT2009x86_64GNU/Linuxrequire'libxml'LoadError:/usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/libxml-ruby-1.1.4/lib/libxml_ruby.so:invalidELFheader-/usr/local/ruby-enterprise/

  10. ruby-on-rails - bundle 安装尝试使用缓存文件 - 2

    当我尝试进行bundle安装时,我的gem_path和gem_home指向/usr/local/rvm/gems/我没有写入权限,并且由于权限无效而失败。因此,我已将两个路径都更改为我具有写入权限的本地目录。这样做时,我进行了bundle安装,我得到:bruno@test6:~$bundleinstallFetchinggemmetadatafromhttps://rubygems.org/.........Fetchinggemmetadatafromhttps://rubygems.org/..Bundler::GemspecError:Couldnotreadgemat/afs/

随机推荐