我们知道目前个人计算机中常见硬盘的接口有两种,一种是IDE接口的,另一种是SATA接口的,SATA接口的硬盘传输速度比IDE接口的硬盘传输速度快。因此SATA接口的硬盘以成为目前主流的硬盘。

当然,我们之前提过,在linux系统中,一切皆文件,所以设备在linux系统中,也是以文件的形式存在的。那么IDE硬盘和SATA硬盘如何在linux中命名的呢?

在IDE硬盘中有2个IDE接口,我们称为IDE1接口和IDE2接口,每一个接口可以接2个IDE设备,其中一个是主设备,另一个称为次设备。

因此,IDE硬盘的文件命名如下:

主设备
次设备
第一个IDE接口
/dev/hda
/dev/hdb
第二个IDE接口
/dev/hdc
/dev/hdd

而每一个设备上存在着多个分区(分割槽),形如windows系统上面的c、d、e盘等等。那么这些分割槽该如何命名呢?

只需要在每一个设备的文件名后面加上数字即可。例如第一个分割槽为/dev/hda1...依次类推。

不过由于硬盘上面有分区的限制,主分区和扩展分区不能超过4个,因此当设备名为/dev/hd5时表示为第一个逻辑分区。关于分区的概念将在后续探讨。


关于SATA接口的硬盘命名与IDE硬盘不同,因为SATA硬盘命名是根据侦测到的设备的先后顺序来命名的。也就是说第一个侦测到的设备命名为/dev/sda,第二个侦测到的设备命名为/dev/sdb...依次类推。

其中SCSI接口的硬盘和USB接口的硬盘命名规则和SATA接口的硬盘命名方式一样。因为这三种接口的硬盘都是用SCSI模块来驱动的。


由上面可以知道,硬盘的类型有多种多样的,也就是说SATA类型的硬盘有/dev/sda,/dev/sdb这两个硬盘;而SCSI类型的硬盘也有/dev/sda,/dev/sdb这两个硬盘,那么我们该如何识别这些硬盘呢?

其实很简单,我们只要给每一个文件加上一个主设备号和次设备号即可。

主设备号:全程为major number,用来标识硬盘类型的,区分不同类型的硬盘的

次设备号:全程为mintor number,用来标识同一种类型下的不同设备文件

因此,给每一个设备加上主设备号和次设备号来区分即可。


那么该如何创建一个设备文件呢?

语法格式:mknod [option] ...NAME TYPE [MAJOR MINTOR]

说明TYPE指的是设备文件类型(包含块设备文件和字符设备文件),而不是指的是硬盘类型。硬盘是属于块设备文件的。

 -m MODE:指定文件的权限

NAME:为设备文件名



接下来我们开始谈谈硬盘的组成部分。

硬盘主要由磁盘盘面、机械手臂、磁头、主轴马达组成的。

而磁盘盘面又由扇区和磁柱组成。

    扇区:特别是第一扇区里面包含了MBR和分割表,;每一个扇区共512Byte

        那么什么是MBR呢?

        MBR:全称Master Boot Record,是存放开机管理程序的地方,一共446Byte

        分割表:全称partition table:是记录整个磁盘分割的状态,一共64Byte,每16Byte

                来标一个分区,因此只可以标识4个分区。

        另外2Byte来标识MBR是否有效

    磁柱:磁柱是文件系统或者分割槽最小的组成单位,因此,磁柱的范围决定了分割槽的大小。

          磁柱分为起始磁柱和结束磁柱。



关于分区的概念

在上面谈到的扇区里面包含有分割槽,而分割槽就是来记录磁盘分区的状态的。那么磁盘上面可以创建多少个分区呢?这些分区又有什么区别的呢?

其实磁盘上面可以最多可以创建4个分区,包括主分区和扩展分区,其中扩展分区最多只能有一个。

而扩展分区又可以划分多个逻辑分区,这就是为什么我们在系统上面看到不只有4个分区的原因。

所以磁盘上分区的组成是这样的:

主分区+[(最多一个)扩展分区]


那么主分区和扩展分区有什么区别呢?

主分区:可以写入数据,可以进行高级格式化,但是不能划分逻辑分区

扩展分区:不能写入数据,不能进行高级格式化,但是可以划分逻辑分区。

    逻辑分区:可以写入数据,可以进行高级格式化

所谓高级格式化就是用来创建文件系统的,低级格式化是来创建磁道的


那么什么是文件系统的呢?

刚刚说过主分区和逻辑分区可以进行高级格式化,而格式化后就是一个文件系统。

 

文件系统的组成结构

为了方便管理inode和block,文件系统在格式化时会划分多个块组。

每一个块组里包含有Superblock 、inode、data block、inode bitmap、block bitmap等信息。

在文件系统的最前面有一个启动扇区(boot sector),里面存放的是开启启动程序bootloader。

文件系统的结构图如下:

文件系统详解_文件系统

 

每一个block group的组成部分如图所示:

文件系统详解_文件系统_02

其中蓝色方框为block group(块群组),每一个块群组里面包含了Superblock、Filesystem Description、inode table、data block、inode bitmap以及block bitmap等信息。

Superblock:用来记录整个文件系统的相关信息,包括block和inode的总量及大小,还有文件系统的挂

            载时间和、最近一次数据写入的时间和最近一次磁盘检验的时间等相关信息。Superblock

            可以有多个,其他的Superblock是第一个Superblock的备份。

            inode size为128Bytes

            block size=[1024Bytes|2048Bytes|4096Bytes]

Filesystem Description:这个里面记录的是每一个block group的起始block号和结束block号,以及

            Superblock、inode table、data block、inode bitmap和block bitmap所在的block号。

            Superblock在0或1block中。

data block:其实就是文件实际内容存放的地方

inode table:记录的是指定文件的元数据及该存放该文件实际内容的block号(注意不存放文件名

        文件的元数据:文件的权限(rwx)、文件的大小、文件的时间戳、文件属主和属组。

block bitmap:这个里面记录的是哪些block是没有使用的的,哪些block是已经使用的

inode bitmap:和block bitmap一样,记录的是哪些inode是已经使用的,哪些还没有使用。

其实我们可以把文件系统比喻成一个图书馆,而块群组就是每一个书架,书架上面放着许多的书,而这些书可以看做是data block,而某本书一定存放在某个特定的位置上,因此只要找到这个位置就可以找到这本书,这个位置可以看做是inode。而inode bitmap可以来看作标记哪些位置是空的,哪些不是空的,以便于可以重新放书。而block bitmap可以理解为书架上已经存放了多少本书,还有多少本书没有存放。

 

inode的特点

1、每一个文件占用一个inode。

2、每一个inode的固定大小均为128bytes。

3、系统能够创建的文件数量和inode的数量有关。


 

目录树的组成结构

从上面知道每一个文件都对应这一个inode,因此目录也是文件,所以也有一个inode号与之对应。

那么目录下到底存在着什么内容呢?

其实目录下只存放着文件名以及该文件名所对应的inode号。通过文件的inode号,查找inode table就可以知道实际存放该文件内容的block号,找到该block号就可以读取文件中的内容了。

目录下的结构为:

文件系统详解_磁盘组成_03


以下示例将演示一个完整文件读取的流程:以/etc/passwd为例

1、首先系统通过自引用,找到/inode,在找到/所对应的block号

2、通过上面的block号,找到该block里面含有etc/文件以及该文件所对应的inode号(如1111)

3、通过上面的1111inode号,可以找到etc/的block号

4、找到etc/block后,发现里面含有passwd文件以及passwd文件所对应的inode号(如2222)

5、通过2222inode号,找到passwd的block号

6.找到passwd的block号,就可以读取passwd里面的实际内容了


了解了上面的文件系统后,再来谈谈文件系统的类型

linux支持的文件系统类型有:

ext2,ext3,ext4,xfs,reiserfs,ifs,nfs,ocfs2,gfs2,swap等

每一种文件系统类型的读取方式可能不一样,所以当我们读取某个文件系统上面的文件时,是不是需要指定特别文件系统呢?当然不是,其实linux整个系统都是透过VFS(virtual FileSystem)的核心功能来读取文件系统的。透过VFS来管理各种各样的文件系统的。当用户读取某个文件系统上面的内容时,VFS可以将其转换成某种特定的文件系统来读取。


硬链接和符合链接

硬链接:就是多个文件占用一个inode,所以删掉其中一个文件时,文件并没有删除。

硬链接具有的特效:

    1、只对普通文件有效,对目录无效

    2、不能跨越文件系统

    3、创建硬链接时被链接的链接次数增加

文件系统详解_磁盘组成_04

软连接或者符号链接:就是创建一个新文件,并将数据的读取指向它连接的文件名(不是文件的inode)。

    1、可以应用于目录

    2、可以跨文件系统

    3、不会增加被连接的链接次数

    4、文件的大小就是该路径的字符个数

文件系统详解_磁盘组成_05

语法格式:

ln [-sv] SRC DES

-s:用于创建软链接,默认为创建硬链接

-v:显示创建过程