ps:期末考试 终于结束了,这下我也终于有时间开始继续经营我的博客。这个学期上的一些课真的非常有用,感觉很多课程细地讲都可以写成非常精致的技术博文,比如流水线技术,数据库的一些技术,大学里的考试考的内容“不痛不痒”真正有价值的一些内容避而不考,但是追很多有的没的的概念很鸡肋。不管如何,这个暑假给自己留了很多本官方技术书籍慢慢去看,我也会在博客里继续补充一些自己的体会和心得。

一. 关于设备在linux中的名字

附:(linux中常见设备和设备在linux中的名字的对照表)

-------------------------------------------------------------

| IDE接口硬盘      |  /dev/hd[a~d]       |

| SCSI/SATA/USB硬盘    |  /dev/sd[a~p]       |

| U盘          |  /dev/sd[a~p]       |

| 软驱           |  /dev/fp[0~1]        |

| 打印机              |   /dev/lp[0~2]        |

| 鼠标           |  /dev/usb/mouse[0~15]  |

|            |  或者 /dev/psaux      |

| 当前CD ROM      |   /dev/cdrom        |

| 当前鼠标        |   /dev/mouse        |

--------------------------------------------------------------

虽说使用linux的fedora distribution有快一年多的时间了,但是其实有很多细节的知识都没有仔细去思考了解,比如硬件设备在linux的/dev目录下的一些命名规则。

首先看看和我们接触最多的硬盘:

现在主流的硬盘按照接口可以分类为两种: IDE接口和SATA接口,其中IDE接口类型的硬盘几乎大部分现在已经被淘汰了,SATA接口比较浅显的一个特征是由两个接口槽组成分别是信号接口和电源接口,每个SATA接口只可以连接一个硬盘,主板上的SATA接口的个数并不是固定的,随着厂商的设定而改变。另外一种硬盘的传输接口为SCSI接口,比较常见于工作站以上的等级的计算机中,SCSI接口硬盘在控制器上含有一块处理器,运行速度快而且不会消耗CPU资源

对于IDE接口硬盘:

一个IDE扁平电缆可以连接两个IDE设备,这个两个电缆接口分别被称为IDE1(primary)和IDE2(secondary),而每条扁平电缆上面的两个设备分别被叫做Master设备和Slave设备,因此有如下名称对应表:

---------------------------------------------------

|  IDE1--Master    |   /dev/hda    |

|  IDE1--Slave      |   /dev/hdb    |

|  IDE2--Master    |   /dev/hdc    |

|  IDE2--Slave      |   /dev/hdd    |

---------------------------------------------------

对于SATA接口硬盘:

由于主板上的SATA接口数量不一致,SATA设备在linux中的命名往往是”先来后到“关系,假如一个主板上有10个SATA接口且SATA0号接口槽和3号接口槽上分别有一个设备并且还有一个USB设备,则命名则为SATA0-->/dev/sda,SATA3-->/dev/sdb,U盘-->/dev/sdc,这里的U盘之所以排在后面是因为BIOS程序往往最后识别USB线上的设备,而且大多数的U盘都是在开机完成之后再插入的所以往往就命名最靠后。

以上为止的硬盘命名都是在为对其进行过分区的前提之下进行的,就是所谓的”一张大饼“没有被切开,在介入分区后的设备命名之前,先了解下关于硬盘分区及系统开机过程的一些知识。

二. 磁盘的分区和系统启动简述

这里所说的硬盘是指传统的由盘片,机械手臂,主轴马达构成的磁盘,我的笔记本上的硬盘的规格就是这个样子5400转/秒,磁盘的构成的具体知识这里不赘述了,对于硬盘来讲在磁道的第一个扇区是非常重要的,它记录了关于磁盘的两个非常重要的信息:

(1)主引导分区(Master Boot Record)安装引导加载程序的地方。占用446B

(2)分区表(Partition Table)记录硬盘分区状态。占用64B

首先看一下分区表:

所谓对磁盘进行的分区有三个比较重要的概念:

(1)主分区(Primary)

(2)扩展分区(Extended)

(3)逻辑分区(Logical)

最直观意义上的磁盘分区就是主分区,主分区就是直接在64B的分区表中记录下来4组分区的情况,由于64B的限制,硬盘默认的分区表最多只可以容纳4组分区信息,那么最直接的假设就是当我们把一个硬盘直接分区为4个主分区时候的命名情况对照表如下所示(假设使用的硬盘为SATA接口类型):

-------------------------------------------------

| 主分区1    |   /dev/sda1      |

| 主分区2    |   /dev/sda2      |

| 主分区3    |   /dev/sda3      |

| 主分区4    |   /dev/sda4      |

-------------------------------------------------

其中分区的最小单位为 柱面(cylinder)

然而在实际中我们使用的硬盘却会分区为大于4个甚至10个以上的分区,这里是如何实现的呢?其实使用的就是扩展分区的功能,扩展分区在这里更像是一个广义表,里面记录了更下一级的分区情况,这就是逻辑分区。如下图所示:

那么对上图来讲在linux中的命名对照表如下所示:

---------------------------------------------------------------------------------

| 主分区1            |    /dev/sda1             |

| 扩展分区--------D        |    /dev/sda5              |

|     --------E       |    /dev/sda6            |    

|     --------F       |    /dev/sda7            |

---------------------------------------------------------------------------------

这里要注意逻辑分区的数标命名是从5开始的,因为1~4的命名只能留给主分区/扩展分区使用,除了以上的概念之外有几点需要注意:

1.对于一块硬盘只能有0~1个扩展分区,可以有1~3个主分区,也就是说  |主分区|+|扩展分区|<=4

2.能够作为数据进行访问的分区只有主分区和逻辑分区,扩展分区无法格式化!

3.linux中IDE硬盘最多有59个逻辑分区,SATA硬盘最多有11个逻辑分区

4.所谓的分区过程只是在对分区表内的那64B内容进行修改。

接下来通过第一个扇区中MBR(Master Boot Record)看一下计算机启动的主要过程:

1.系统加点自检,通过CMOS和BIOS主动执行开机。CMOS主要存储有关开机启动的一些参数,BIOS的功能这里就不赘述啦。

2.通过MBR执行bootloader程序,bootloader提供不同的开机选项,载入内核文件或者将引导加载功能转交给其他的loader负责。

(以下是随便唠叨两句,若已经了解推荐跳过)

既然说到了loader的转交,就不得不提多操作系统的实现,当今最主流的多操系统引导程序莫过于grub,grub就是被写进了mbr中的,正常的操作系统启动比如windows启动的时候,在mbr中的引导程序执行的时候会直接把计算机的控制权交给windows内核,然而grub在这里做的事情就是实现了一个”菜单“,不同的选项会把产生分支引导不同的操作系统引导程序,这些引导程序是卸载不同的分区之中的,每个分区都会有一个启动扇区,其功能和MBR一致。引导程序只认识在自己分区内的内核文件,这样一来就是实现了操作系统之间的隔离,但是由于是在同一个硬盘之中的不同分区完成的,所以分区情况对于用户还是不透明的,比如你可以在linux上明显看到windows内核文件所在的分区(嗯,打不开!)

三. linux文件系统和磁盘分区

(对于linux文件系统架构原理没有初步了解的朋友,请看我之前的博文:http://www.cnblogs.com/guguli/p/4556445.html

首先,还是那句老话,linux下的一切设备都是以文件形式进行管理,这个形式归功于linux的虚文件系统VFS对功能模块进行的分离做到的。然而linux中的文件都是以树结构进行管理的,这种向下分支的结构和磁盘的分区有着很大的联系:

在VFS的管理下,同一个磁盘的不同分区或者不同的磁盘之间的关系都是一致的,都是文件系统中的节点。假设我们的SATA硬盘被分为了两个主分区sda1和sda2,在抽象为vfsmount完成了像文件系统目录的挂载之中,假设sda1被挂载到了“/”根目录,sda2被挂载到了“/test”目录,那么比如我对/test/file1进行的读写操作自然就会被写入磁盘的第二个主分区,过程细化来讲就是:首先从file1文件的目录向上回溯,依次看各个目录节点是否是文件系统的挂载点(参见super_block结构体),这里向上回溯到/test目录发现这是一个挂载点,然后找到原来这是sda硬盘的第二个主分区,再通过sda硬盘的第一个扇区中的分区表找到属于第二个主分区的柱面范围,然后按地址进行读写。

<linux硬件及硬盘分区>关于硬盘的规划和使用细节的更多相关文章

  1. Linux 入门记录:六、Linux 硬件相关概念(硬盘、磁盘、磁道、柱面、磁头、扇区、分区、MBR、GPT)

    一.硬盘 硬盘的功能相当简单但很重要,它负责记录系统所需要的各种数据.硬盘记录数据有两个方面,一个是硬件方面的存储原理和结构,另外一方面则是软件方面的数据和文件系统.硬盘的主要行为就是数据的存放和取出 ...

  2. linux基础-第十二单元 硬盘分区、格式化及文件系统的管理一

    第十二单元 硬盘分区.格式化及文件系统的管理一 硬件设备与文件名的对应关系 硬盘的结构及硬盘分区 为什么进行硬盘分区 硬盘的逻辑结构 Linux系统中硬盘的分区 硬盘分区的分类 分区数量的约束 使用f ...

  3. linux 硬盘分区,分区,删除分区,格式化,挂载,卸载笔记

    linux 虽然一直都有在玩,但是对硬盘操作确实不是很熟悉今天有空,就整理了下. 1, 创建分区 先查看下是否有磁盘没有分区 fdisk -l 其中第一个框和第二个框,是已经分好区的磁盘,第三个硬盘没 ...

  4. Linux 硬盘分区

    Linux系统中的重要概念,一切资源都看做是文件,包括硬件设备. 1. 基本概念 1)MBR:Master Boot Recorder,存放主引导记录,446字节的引导代码. 2)主分区表:存放主分区 ...

  5. linux硬盘分区格式化及挂载

    1.硬盘的接口类型 硬盘的接口一般分为两种,一种是IDE并行接口,一种是SATA串行接口, 在linux上面IDE接口的硬盘被识别为/dev/hd[a-z]这样的设备,其中hdc表示光驱设备,这是因为 ...

  6. Linux 硬盘分区、分区、删除分区、格式化、挂载、卸载

    Linux 虽然一直都有在玩,但是对硬盘操作确实不是很熟悉今天有空,就整理了下. 1,创建分区 先查看下是否有磁盘没有分区 fdisk -l 其中第一个框和第二个框,是已经分好区的磁盘,第三个硬盘没有 ...

  7. (转)硬盘分区备忘(主分区,扩展分区和逻辑分区)以及Linux硬盘分区工具parted 介绍

    场景:最近在学习Linux的基础知识,不可避免的设计到Linux的磁盘分区,以前做过总结,但是那种总结就是复制别人的文章,总结完就不想看第二遍,所以很容易就遗忘了!清楚明白的理解分区后,我就可以在自己 ...

  8. linux 硬盘分区与格式化挂载

    1. 硬件设备与文件名的对应关系(详见linux系统管理P297)1) 掌握在Linux系统中,每个设备都被当初一个文件来对待.2) 掌握各种设备在Linux中的文件名 2. 硬盘的结构及硬盘分区(详 ...

  9. Linux基础——硬盘分区、格式化及文件系统的管理

    1. 硬件设备与文件名的对应关系 掌握在Linux系统中,每个设备都被当初一个文件来对待. 设备 设备在Linux内的文件名 IDE硬盘 /dev/hd[a-d] SCSI硬盘 /dev/sd[a-p ...

随机推荐

  1. nightwatch-js ----并发运行

    从v0.5开始nightwatch支持并发测试.通过在命令行中指定多个环境来工作,用逗号分隔.例如: $ nightwatch -e default,chrome 这样可以在多个相同或是不同的浏览器上 ...

  2. asp.net core 系列之Response caching(1)

    这篇文章简单的讲解了response caching: 讲解了cache-control,及对其中的头和值的作用,及设置来控制response caching; 简单的罗列了其他的缓存技术:In-me ...

  3. git设置全局和单个仓库账号和密码

    Git全局配置和单个仓库的用户名邮箱配置 配置全局仓库的账号和密码 git config --global user.name "userName" //你的用户名 git con ...

  4. 机器学习6—SVM学习笔记

    机器学习牛人博客 机器学习实战之SVM 三种SVM的对偶问题 拉格朗日乘子法和KKT条件 支持向量机通俗导论(理解SVM的三层境界) 解密SVM系列(一):关于拉格朗日乘子法和KKT条件 解密SVM系 ...

  5. erlang的非平衡的二叉树的操作

    -module(tree1). -export([test1/0]). lookup(Key,nil) -> not_found; lookup(Key,{Key,Value,_,_}) -&g ...

  6. SQL索引及表的页的逻辑顺序与物理顺序

    1.经过测试发现当聚集索引新建或者重建时,会按照逻辑顺序重新排列数据页和数据页内的数据行的物理顺序. 2.但修改表时,无论是聚集索引还是堆的数据页都是按自然顺序向后插入数据,页面上的偏移量可以证明.因 ...

  7. [转]maven2中snapshot快照库和release发布库的区别和作用

    Post by 铁木箱子 in 技术杂谈 on 2010-08-03 17:17 [转载声明] 转载时必须标注:本文来源于铁木箱子的博客http://www.mzone.cc[原文地址] 原文永久地址 ...

  8. Expression Tree上手指南 (一)

    大家可能都知道Expression Tree是.NET 3.5引入的新增功能.不少朋友们已经听说过这一特性,但还没来得及了解.看看博客园里的老赵等诸多牛人,将Expression Tree玩得眼花缭乱 ...

  9. 由浅到深理解ROS(4)

    消息和消息类型 节点能相互传递消息,节点之间通信也是基于消息.消息类型也就是数据类型数据类型,理解消息的类型很重要,因为它决定了消息的内容.也就是说,一个话题的消息类型能告诉你该话题中每个消息携带了哪 ...

  10. java getResourcesAsStream()如何获取WEB-INF下的文件流

    getResourcesAsStream()来读取.properties文件,但是getResourcesAsStream()仅在java项目时能获取根目录的文件: 在web项目中,getResour ...