Linux知识储备--硬盘

来源:互联网 发布:如何买高仿手表知乎 编辑:程序博客网 时间:2024/04/29 05:46

1 基础知识--硬盘接口与硬盘

"硬盘接口"和"硬盘"是两个不同的概念,硬盘接口顾名思义是连接硬盘的,通常要通过一根数据线。

1.1 硬盘接口简介

硬盘接口是硬盘与主机系统间的连接部件,作用是在硬盘缓存和主机内存之间传输数据。不同的硬盘接口决定着硬盘与计算机之间的连接速度,在整个系统中,硬盘接口的优劣直接影响着程序运行速度快慢和系统性能好坏。

从整体的角度上,硬盘接口分为IDE、SATA、SCSI和光纤通道四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而光纤通道只在高端服务器上,价格昂贵。SATA是种新生的硬盘接口类型,目前新出厂的电脑,基本上采用的都是SATA接口。

这些不同的硬盘接口直接影响了硬盘与电脑之间的数据的传输速度,传输速度从快到慢:"光纤通道>SCSI>SATA>IDE"

了解内容:

IDE的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”,它的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。

SATA全称是Serial Advanced Technology Attachment(串行高级技术附件,一种基于行业标准的串行硬件驱动器接口),是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范。

SCSI的英文全称为“Small Computer System Interface”(小型计算机系统接口),是同IDE(ATA)完全不同的接口,IDE接口是普通PC的标准接口,而SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。

光纤通道的英文拼写是Fibre Channel,和SCIS接口一样光纤通道最初也不是为硬盘设计开发的接口技术,是专门为网络系统设计的,但随着存储系统对速度的需求,才逐渐应用到硬盘系统中。


1.2 存储设备

注意:硬盘设备并不只是移动硬盘,U盘,光盘等,也都是硬盘设备,为了避免误解,我们将遵循某个硬盘接口规范的数据存储装置称之为:"硬盘接口名"+设备

IDE设备:用IDE接口的硬盘又叫IDE设备

SCSI设备:SCSI设备即采用SCSI接口的设备

SATA设备:....

光纤通道设备:....

目前PC机上主要是IDE硬盘接口和SATA硬盘接口,所以我们主要介绍的还是这两种。


1.2.1 IDE装置:

目前,我们的电脑中标配的IDE设备无非两类——移动硬盘和光驱,硬盘的存在形式比较简单,而光驱则包括CD-ROM驱动器、DVD-ROM驱动器和CD-R/RW光盘刻录机三种常见的类型。

一般情况下,电脑会提供2个IDE接口,IDE接口和IDE设备通过IDE连接线进行连接,一个IDE连接线上可以连接2个IDE设备,一个是主要的,一个是次要的,或者称之为“主/从”,因此一个电脑一般可以连接4个IDE设备。这种电缆如下所示:

                                             IDE连接线


我们知道在Linux中,每个硬件设备都对应/dev下的一个文件,那么IDE设备对应的是什么目录呢?

/dev/hd[a-d]

例如:现在又四个IDE设备分别连接在IDE1接口和IDE2接口上(还记得前面说了,一个电脑通常会提供两个IDE接口吗?)

那么连接在IDE1接口上的主IDE设备对应的目录是/dev/hda,从IDE设备对应的目录是/dev/hdb

连接在IDE2接口上的主IDE设备对应的目录是/dev/hdc,从IDE设备对应的目录是/dev/hdd


问题:假设现在只有两个IDE设备,连接在IDE2接口上,那么着两个IDE设备对应的目录是?

/dev/hdc,/dev/hdd


1.2.2 SATA设备

移动硬盘,USB等。

SATA设备同样也要通过一个SATA连接线与SATA进行连接,不过一根SATA连接线只能连接一个SATA设备。

在linux中,由于 SATA/USB/SCSI 等磁盘接口都是使用 SCSI 模块来驱动的, 因此这些接口的磁盘装置文件名都是/dev/sd[a-p]的格式。 但是不 IDE 接口不同的是, SATA/USB 接口的磁盘根本就没有一定的顺序,那如何决定他的装置文件名呢? 这个时候就得要根据 Linux 核心侦测到磁盘的顺序了!。
例题:

如果你的 PC 上面有两个 SATA 磁盘以及一个 USB 磁盘,而主板上面有六个 SATA 癿插槽。这两个 SATA 磁盘分别安插在主板上的SATA1, SATA5 插槽上, 请问这三个磁盘在Linux 中的装置文件名为何?

答:由于是使用侦测到癿顺序来决定装置文件名,并非与实际插槽代号有关,因此装置的文件名如下:

1. SATA1 插槽上的文件名: /dev/sda

2. SATA5 插槽上癿文件名: /dev/sdb

3. USB 磁盘(开机完成后才被系统检测到): /dev/sdc


要注意的是:上述IDE设备和SATA设备对应的目录是在每个设备都没有进行分区的情况下对应的目录,IDE设备或者SATA设备进行了分区,那么对应的目录就会发生变化。在讲解硬盘分区的知识之前我们需要先了解一下硬盘的物理结构。


2、硬盘结构

2.1物理结构

硬盘物理结构的图,请随便百度一张图看一下,下面列出的这三个概念,在硬盘上是看不出来的,但是确是实实在在存在的。

    磁头:不太好介绍,自己找图看


    磁道

当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track)。

    柱面

在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder),其实应该是一个空心圆柱体。

    扇区

磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一个扇区,叫做引导扇区。

一个磁盘上通常由多个磁盘片,下面是一个磁盘片的示意图

                                                       磁盘片的示意图



可以看到磁盘片有很多磁道,要注意的是,这里为了方便,只画出了四个同心圆,实际的硬盘的磁道数不止这些。

每个磁道被划分为若干个圆弧,称为扇区,上图中的红色框中,实际上包含了4个扇区。


目前硬件厂商制造的硬盘中,一个扇区存储的数据的大小一般都是512byte/4kb(后面会介绍什么情况下是512b,什么情况下是4kb)。读者可能会疑问,外围的扇区明显大一点,存储的数据应该多一点。

实际上不是这样的,因为从硬盘上存/读数据是通过磁头与磁盘接触完成的,假设磁头移动到了某一个位置,磁盘进行转动就可以读取到不同磁区的数据。

划分扇区,角速度不变,单位时间扇区数相同。因此可以简单实现“磁道周长不同,每个磁道分的扇区个数相同且字节数相同”
在磁盘转速恒定的情况下,磁头与位于里面的扇区和位于外面的扇区接触的时间是相同的,因此能读取到的数据大小也是相同的。所以外围的扇区和里边的扇区能够存储的数据量是相同的。


                                                         多个磁盘片的联合示意图

在这个图中有三个盘片,由于磁盘片两面都可以存储数据,因此有6个磁头。

读者在搜索实物图看的时候,通常只会看到一个磁头和一个盘片,这是因为图片拍摄角度的问题,多找几个就会发现,磁头和盘片都不止一个。

事实上,磁头数量=盘片数*2,因为一个盘片有两个面,每个面都需要一个磁头来扫描,磁头数量总是盘片数量的2倍。


硬盘容量的计算公式:

硬盘容量 = 柱面数(表示每面盘面上有几条磁道,一般总数是1024) × 磁头数(表示盘面数) × 扇区数(表示每条磁道有几个扇区,一般总数是64)× 扇区(存储基本单元,大小一般为512B/4KB)

那么如何知道自己的硬盘有多少柱面,磁头,扇区数,扇区大小等数据呢?可以借助everest软件来查看,以博主500G的希捷硬盘为例:

969021*16*63*512=49556054016byte=465.76G,之所以小于500G是因为硬盘制造商是按照1K=1000byte来计算的。导致硬盘容量缩水。

3 磁盘分区与格式化

一个新的硬盘必须要进行分区和格式化之后,才可以存取数据。关于硬盘如何分区和格式化的教程有很多,本处不做讲解,主要介绍的为什么要进行分区和格式化。

工厂生产的硬盘必须经过低级格式化分区高级格式化(以下均简称为格式化)三个处理步骤后,电脑才能利用它们存储数据。低级格式是针对整个硬盘进行的,高级格式化是针对分区进行的。


3.1 为什么要进行低级格式化

低级格式化通常由厂家完成,其作用就是将空白的磁盘划分出柱面和磁道,再将磁道划分为若干个扇区,每个扇区又划分出标识部分ID、间隔区GAP和数据区DATA等(扇区并不是硬盘的最小单元,还可以继续划分为上述三个区域)。可见,低级格式化是高级格式化之前的一件工作,它只能够在DOS环境来完成。而且低级格式化只能针对一块硬盘而不能支持单独的某一个分区。每块硬盘在出厂时,已由硬盘生产商进行低级格式化,因此通常使用者无需再进行低级格式化操作。其实,我们对一张软盘进行的全面格式化就是一种低级格式化。
需要指出的是,低级格式化是一种损耗性操作,其对硬盘寿命有一定的负面影响。因此,许多硬盘厂商均建议用户不到万不得已,不可“妄”使此招。当硬盘受到外部强磁体、强磁场的影响,或因长期使用,硬盘盘片上由低级格式化划分出来的扇区格式磁性记录部分丢失,从而出现大量“坏扇区”时,可以通过低级格式化来重新划分“扇区”。但是前提是硬盘的盘片没有受到物理性划伤。 

3.2 为什么要进行分区

从表面上看,对硬盘进行分区是为了:

1. 数据癿安全性:
因为每个分区数据是分开的!所以,当你需要将某个分区的数据重整时,例如你要将计算
机中 Windows 癿 C 盘重新安装一次系统时, 可以将其他重要数据移的到其他分区中,例如将
邮件、桌面数据移劢到 D 盘去,那举 C 盘重装系统不会会影响到 D 盘! 所以善用分区,可以
让你的数据更安全。

2. 系统的效能考虑:
由于分区将数据集中在某个磁柱的区段,例如上图当中第一个分区位于磁柱号码 1~100
号,如此一来当有数据要读来自该分区时, 磁盘叧会搜寻前面 1~100 的磁柱范围,由于数据
集中了,将有助于数据读取的速度与效能!所以说,分区是很重要的!


实际上,硬盘分区还有着更加深入的细节:

思考一下,操作系统也是文件,在电脑启动的时候会去读取这些文件,例如win7操作系统的文件一般位于C盘的windows目录下,那么为什么电脑就知道去读取C盘windows目录下的文件去启动系统,而不是读取其他的文件呢?

说明肯定有一个地方记录了操作系统的文件数据位于硬盘上的起始位置与结束位置, 这就是主引导扇区,就是硬盘的0柱面,0磁头,1扇区。

电脑启动后,会自动读取这个扇区中的内容,这个扇区中记录了两个重要信息:

主引导记录区(Master Boot Record, MBR):可以安装开机管理程序的地方
分区表(partition table):记录整个硬盘分区的状态,例如分了哪些区,每个区的大小是多少,是主分区、扩展分区、还是逻辑分区,硬盘还有多少空间没有使用等。


而硬盘在分区的过程中,实际上隐含着完成了在硬盘的0柱面,0磁头,1扇区设置MBR和分区表,这样以后电脑启动的时候,就知道从什么位置读取操作系统文件启动系统了。


3.3 分区的格式化与文件系统

分区的格式化主要指的是指定分区所采用的文件系统,目前主流的文件系统有FAT16等,FAT32,NTFS,ext3等。前三个是windows平台使用的文件系统,ext3是linux平台使用的文件系统。以下是win7格式化分区的截图

可以看到格式化的作用主要指定指定分区采用的文件系统,分配单元大小等信息,分配单元大小实际上指的就是硬盘簇。

可以把簇看为多个连续扇区的集合。簇的大小与分区的大小和文件系统有关:

例如FAT文件系统,簇与分区大小的关系

分区大小          FAT16簇大小    FAT32簇大小

16MB-32MB         2KB            不支持
32MB-127MB        2KB            512bytes
128MB-255MB       4KB            512bytes
256MB-259MB       8KB            512bytes
260MB-511MB       8KB            4KB
512MB-1023MB      16KB           4KB
1024MB-2047MB     32KB           4KB
2048MB-8GB        不支持         4KB
8GB-16GB          不支持         8KB
16GB-32GB         不支持         16KB
32GB以上          不支持         32KB

假设在FAT32位操作系统上,有一个磁盘大小为50GB,里面有一个文件只有100b,其也会占用32KB的磁盘空间。

这意味着,簇越大,浪费的磁盘空间可能就越多。

FAT32这种格式为什么支持最大的文件只有4G?
FAT32文件系统寻址单位为32位,即根目录中每个文件(目录)所占32字节,根据规定,文件长度一项属性:占4个字节
2的32次方算下来就是4G

在NTFS中,当分区的大小在2GB-2TB之间时,默认簇的大小都应该为4KB.

读者可以在桌面上随意建立一个txt文件,随便输入几个字符,右击文件,查看属性,一般可以看到以下内容

发现一个文件最少占用的控件的确是4KB。


上面已经介绍了一个簇有多个扇区组成,那么一个簇到底包含几个扇区呢?

簇明显是一个逻辑上的概念,例如对于FAT32文件系统而言,32G以上的分区的簇大小为32KB=64*512b,因此这个分区一个簇中可能包含64个扇区,而对于16GB的分区,其簇大小为16KB,同样可以计算出来一个簇中包含的扇区个数为32个。

在这里我们只要记得,簇是一个逻辑概念,不同文件系统的不同大小的分区中,一个簇包含的扇区个数是不同的。


为什么文件系统必须把硬件存储空间的最小分配单位定为簇而不是扇区?

前面已经讨论过簇过大,会导致磁盘空间的浪费,那么文件系统为什么还要使用簇来作为最小文件存储单位,而不直接使用扇区呢?

主要是从文件读取的速度上考虑,假设以扇区为存储单位,那么磁盘转动一圈,那么磁头每存取一个扇区上的数据,就必须搜索下一个扇区的位置,增加了搜索时间,

导致磁盘转动一圈可以读取的扇区总数减少。

当以簇为存储单位,把同一个磁道上的多个相邻扇区组成一个簇,当磁头移动到一个磁道上的某个扇区时,停止不动也可以读取下一个扇区的数据,因此读取速度加快。

(注意:一个簇的所有扇区可能并不是完全连在一起,但是大部分应该是连在一起的)


所以综上,簇的大小有利有弊,当簇过大时,会浪费磁盘空间,当簇过小时,会降低读取速度。因此把簇设置为合适的大小是非常重要的。

此外,在簇大小确定的情况下,磁盘的转速直接决定了数据的存储速度。


4、主分区、扩展分区与逻辑分区

前面已经说明,分区是为了在主引导扇区建立MBR和分区表,格式化是指定分区的文件类型和簇的大小。

首先要理解硬盘分区分为主分区、扩展分区。

主分区是可以直接使用的,扩展分区不可以直接使用,必须继续划分为逻辑分区。

主分区和扩展分区的和不能超过四个,且扩展分区最多有一个。至于为什么不能超过四个,大家可以去找一篇文章看看MBR的结构,这已经不属于本文介绍的范围了。


  由于这个 MBR 区块的容量有限,所以,当初设计的时候,就只有设计成 4 个分区纪录,这些分区记录就被称为 Primary ( 主分区 ) 及 Extended ( 扩展分区 ) ,也就是说,一颗硬盘最多可以有 4 个 Primary + Extended 的扇区,其中,Extended 只能有一个,因此,你如果要分区成四块磁盘分区的话,那么最多就是可以:

P + P + P + P

P + P + P + E

我可不可以仅分区 1 个 Primary 与 1 个 Extended 呢?

当然可以!基本上, Logical 可以有 64 个,因此,你可以仅分区一个主分区,并且将所有其它的分区都给 Extended ,利用 Logical 分区来进行其它的 partition 规划即可!

假如我的硬盘安装在 IDE 1 的 Master ,并且我想要分区成 6 个可以使用的硬盘扇区,那么每个磁盘在 Linux 底下的代号为何?

说明:

由于硬盘在 Primary + Extended 最多可以有四个,因此,在 Linux 底下,已经将 partition table 1 ~ 4 先留下来了(针对IDE硬盘和SATA硬盘都一样),如果只用了 2 个 P + E 的话,那么将会空出两个 partition number 呦!再详细的说明一下,假设我将四个 P + E 都用完了。其中Extended /dev/hda4包括三个逻辑分区。

实际可以使用的是 /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda5, /dev/hda6, /dev/hda7 这六个 partition!至于 /dev/hda4 这个 Extended 扇区本身仅是用来规划出让 Logical 可以利用的磁盘空间而已!

那么万一我只想要分区 1 个 Primary 与 1 个 Extended 呢?

因为 1~4 号已经被预留下来了,所以第一个 Logical 的代号由 5 号开始计算起来。


0 1
原创粉丝点击