机械硬盘与固态硬盘的适用场景
之前一直以为固态硬盘各方面都比机械硬盘性能高,所以首选固态硬盘,直到看了极客时间-深入浅出计算机组成原理中硬盘相关章节的内容,才发现固态硬盘原来是有缺点的,所以这里来做一个总结。
机械硬盘(HDD)
机械硬盘由以下几个部分组成:
盘面:盘面(盘片)上有一层磁性涂层,数据就是存储在这个磁性的涂层上,一个盘面在正反两面都有磁性涂层。盘面中央有一个可以旋转的主轴,主轴可以使盘片以固定的旋转速率进行旋转,我们看到磁盘标注的每分钟多少转(RPM , Revolution Per Minute)指的就是这个旋转速率,比如7200转,表示一分钟可以旋转7200下:
(注:图片来自极客时间-深入浅出计算机组成原理)
一个盘面又可以划为多个扇区和多个磁道。
磁道:一个盘片可以划分为多个同心圆,每一个圆环就叫做磁道,可以理解为是盘片上的圆形环道:
扇区:每个磁道又可以分为一个个扇区,也就是磁道上的一个弧段:
柱面:上下平行的一个个盘面的相同扇区组成的部分,称作一个柱面。
(注:图片来自极客时间-深入浅出计算机组成原理)
磁头:用于从盘面读取数据传输到总线,一个盘面有正反两面,正反两面都会有一个磁头。
传动臂(悬臂):与磁头相连接,通过沿着半径轴前后移动传动臂,可以将磁头定位到每一个磁道上,读取存储的数据。
磁盘是由一个或者多个平行叠放在一起的盘片组成的,将它们封装在一个密封的包装内,整个装置称为磁盘驱动器,也就是我们常说的磁盘。
磁盘以扇区为大小进行数据读写,数据读写的耗时主要有以下几部分:
- 寻道时间:首先传动臂需要将磁头定位到包含目标扇区的磁道上,移动传动臂所需的时间称为寻道时间,它依赖于磁头当前所在的位置以及传动臂在盘面上移动的速度。
- 旋转时间:将磁头定位到目标扇区所在的磁道后,需要等待目标扇区的第一个位旋转到磁头下,它依赖于磁盘的旋转速率。
从数据读取步骤当中可以看出,如果我们将数据进行顺序存放,尽可能将数据放在同一个扇区或者是一个柱面,这样只需旋转一次盘面,进行一次寻道,即可读取出内容,这也是顺序读写比随机读写性能高的原因。
固态硬盘(SSD)
固态硬盘是一种基于闪存的存储技术,由半导体存储器构成,没有移动的部件,不需要像机械硬盘一样进行寻道,所以在顺序写以及随机写的性能上相比机械硬盘都要高,但是它的耐用性缺比较差,接下来就看下SSD硬盘的耐用性为何差。
固态硬盘是有多个裸片叠在一起的:
(注:图片来自极客时间-深入浅出计算机组成原理)
一张裸片上可以放多个平面(Plane),一个平面上又会划分为多个块(Block),一个块的大小通常在几百KB到几MB,一个块里会划分为多个页(Page),一个页的大小通常是4KB:
(注:图片来自极客时间-深入浅出计算机组成原理)
SSD硬盘写入的基本单位为页,按页进行数据写入,但是它不能像机械硬盘一样直接通过覆盖进行写入,如果某一页已经写入过数据,需要被擦除后才可以重新写入数据,而且SSD硬盘是按块进行擦除的,也就是说如果某个页的数据被删掉还不能直接对页进行擦除,需要等待这个页所在的块整个被擦除才可以重新写入数据,而每一个块的擦除次数是有限的,当达到一定的擦除次数容易损坏。
举个例子
假设白色代表这个页未写入过数据,绿色代表这个页写入了有效数据,红色代表之前写入了有效数据后来数据被删除:
-
首先在某些空白页内写入了一些数据,写入数据的页变为绿色:
-
删除一部分数据,由于SSD需要按块擦除,所以某个块内的页如果既有有效数据又有删除数据,被删除的那部分数据会先标记为删除状态此时数据并未真正删除:
-
当某个块内的所有页都被标记为已删除,此时这个块就可以被擦除,这个块内的页就恢复成了白色:
-
假如删除的数据不连续,分散在各个块内,由于红色的页在被擦除之前不能写入数据,所以这些红色的页看起来类似磁盘碎片,既不能清理又不能写入数据,到达一定程度时可能没有合适的空白页进行数据写入,所以这时候需要做一次类似于磁盘碎片整理的工作,找一个红色页最多的块,将里面绿色页的数据移动到另外一个块中,然后将整个红色页所在的块进行擦除:
总结
机械硬盘可能更适合于写多(顺序写)读少的场景,固态硬盘更适合于读多写少的场景,不过也不能一概而论,最终还是要根据实际的应用场景来定。
参考
《深入理解计算机系统》