磁盘是计算机中的一个外部存储,是一个可长期存储数据的设备。我们日常使用磁盘的时候,都是先将磁盘分区,然后格式化成一个文件系统,之后操作系统才能用来进行文件管理。

  磁盘为什么要分区呢?早期的磁盘容量比较小,所以没有分区机制,后来越来越大,人们发现这样管理起数据很麻烦,而且无法装多个操作系统系统。于是科学家们就研制出了磁盘分区机制,目的就是为了将磁盘容量切分,便于数据的管理,而且可以将一块硬盘当成“多个硬盘”来使用,安装多个操作系统。知道了这个概念后,我们看一下磁盘的工作过程及物理组成(顺序有些颠倒是不是?无所谓啦,反正你明白就好~~)。

  由于现在的磁盘有很多种,U盘、SSD硬盘,机械磁盘。不过由于现实中我们的计算机最普及的还是机械硬盘,所以我们只讲一讲机械硬盘的原理。

  磁盘的物理由:磁盘片马达(主轴)、机械臂(磁头驱动机构)、磁头组成。当通电后,磁盘的主轴马达开始带动盘片转动,而磁头依据机械臂悬浮在盘片上边,这样就实现了数据的写入和消除(磁性信息,都是二进制代码,可以简单理解为有磁为1,无磁为0)盘片有A面B面,而且是多盘片,所以一个盘片就有两个机械臂和两个磁头(比如我是4盘片,就有8个磁头和机械臂),不过他们是重叠的,所以可能俯瞰是看不出来的~~

磁盘与文件系统管理(1)_第1张图片

  除了知道了磁盘的大概组成方式和如何工作的,还要了解几个其他概念:

   1.磁道:磁盘转动时磁头划过的圈,就是磁道,磁道越靠外越好,至于为什么稍后会提到。

磁盘与文件系统管理(1)_第2张图片

  2.柱面:由于磁盘一般是由多个盘片构成,磁道必定会重叠,也就是形成一个柱子一样的东西。这个就叫做柱面,看下图:

磁盘与文件系统管理(1)_第3张图片

   3.扇区:磁道被分割成弧状,下图所示就是扇区(实际上并不是从外到内都是同样的扇区数,要不然怎么会是每个扇区都是512Bytes大小呢?你说是吧),每个扇区512Bytes。还记得上面提到的越靠外的磁道性能越好吧?这是因为内圆和外圆的周长不同所致,要保证每个扇区都是512Bytes,那么扇区数肯定是不同(下图只是为了形象)的咯。所以当你读取一个大数据的时候,可能存储在最里面的磁道会存储不完,还要让机械臂移动到其他磁道上,然后找到找到扇区才能继续读取;而最外面的磁道因为比里面的要长,扇区肯定也要多,那么存储的就越多,数据可能就全部都存储在了这个磁道上,那么磁头就可以一口气读取完,性能肯定会有所提升!你可以用分区工具看看你的C盘,是不是都是从0磁柱开始的?这就是原因所在。

  了解了基本的组成后,我们来总结一下:

  磁盘由:盘片机械臂磁头马达等几大部分组成。在盘片上又划分了磁道磁柱扇区。为了安装多个操作系统(将容量平均划分),出现了分区机制。

  知道了物理组成后,我们接着谈一下分区:磁盘的0磁道0磁柱0扇区MBR(Master Boot Record,主引导记录),其中446Bytes是存放boot loader操作系统引导程序),64Bytes存放分区表信息(一个分区占用16Bytes)。最后2Bytes是标记位,标记MBR是否可用。其他的都比较好理解,我们就不多说了,只说一下关于这64Bytes分区信息:

  上面我们讲,MBR记录分区信息的空间只有64Bytes大小,每个分区占用16Bytes,所以最多只能有4个分区。大家可能有疑惑,我的磁盘不止4个分区啊,你搞错了吧?其实事实是我说的那样,分区最多只能有4个,但后来人们发现磁盘容量越来越大,有时候只分四个分区无法满足要求,于是就又出现了扩展分区,相应的之前的普通分区也就称作了主分区(扩展分区+主分区只能有四个,扩展分区最多只能有一个)。扩展分区并不是一个分区,它仅仅是一个指针,指向了其他的扇区。它所指向的扇区里面则又存放了分区表信息。所以创建扩展分区后不能直接使用,还需要在其基础上创建分区,在其基础上创建的分区我们叫作逻辑分区

  在Linux中,分区的命令有多个:fdisk/sfdisk/parted,我们最常用的是fdisk,这个命令也比较简单,我们看一下:

fdisk [options] [/dev]
    -l [/dev]  #列出磁盘或分区信息
#我们分区的时候,直接fdisk [/dev],之后会进入一个交互模式,有很多命令:
   m  #列出帮助信息
    n  #创建一个分区,选择此项后,会进入一个二级交互模式:
      Command action
       e   extended  #扩展分区,只能有一个
        Partition number (1-4)  #指定一个分区号
         First cylinder (1-208050, default 1)  #选择开始柱面,默认从1开始
        Using default value 1   #直接回车使用了默认的1
        Last cylinder, +cylinders or +size{K,M,G} (1-208050, default 208050): #选择结束的柱面或者+大小,默认指定全部信息;
         n   #创建分区
           Command action
           l   logical (5 or over)  #逻辑分区,从5开始,其他步骤和上面相同
       p   primary partition (1-4)   #主分区,1-4是分区号
        #请参考划分扩展分区
  划分好后,刷新一下分区表信息:
    CentOS 5  # partprobe
    CetnOS 6  # partx/kpartx ;如果出现刷新不出来的情况,先使用 #kpartx -af /dev,之后使用# partx -a /dev。还是不出现就多来几遍就好了。


预知后事如何,请看(磁盘文件系统管理2)。