<linux硬件及硬盘分区>关于硬盘的规划和使用细节
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硬件及硬盘分区>关于硬盘的规划和使用细节的更多相关文章
- Linux 入门记录:六、Linux 硬件相关概念(硬盘、磁盘、磁道、柱面、磁头、扇区、分区、MBR、GPT)
一.硬盘 硬盘的功能相当简单但很重要,它负责记录系统所需要的各种数据.硬盘记录数据有两个方面,一个是硬件方面的存储原理和结构,另外一方面则是软件方面的数据和文件系统.硬盘的主要行为就是数据的存放和取出 ...
- linux基础-第十二单元 硬盘分区、格式化及文件系统的管理一
第十二单元 硬盘分区.格式化及文件系统的管理一 硬件设备与文件名的对应关系 硬盘的结构及硬盘分区 为什么进行硬盘分区 硬盘的逻辑结构 Linux系统中硬盘的分区 硬盘分区的分类 分区数量的约束 使用f ...
- linux 硬盘分区,分区,删除分区,格式化,挂载,卸载笔记
linux 虽然一直都有在玩,但是对硬盘操作确实不是很熟悉今天有空,就整理了下. 1, 创建分区 先查看下是否有磁盘没有分区 fdisk -l 其中第一个框和第二个框,是已经分好区的磁盘,第三个硬盘没 ...
- Linux 硬盘分区
Linux系统中的重要概念,一切资源都看做是文件,包括硬件设备. 1. 基本概念 1)MBR:Master Boot Recorder,存放主引导记录,446字节的引导代码. 2)主分区表:存放主分区 ...
- linux硬盘分区格式化及挂载
1.硬盘的接口类型 硬盘的接口一般分为两种,一种是IDE并行接口,一种是SATA串行接口, 在linux上面IDE接口的硬盘被识别为/dev/hd[a-z]这样的设备,其中hdc表示光驱设备,这是因为 ...
- Linux 硬盘分区、分区、删除分区、格式化、挂载、卸载
Linux 虽然一直都有在玩,但是对硬盘操作确实不是很熟悉今天有空,就整理了下. 1,创建分区 先查看下是否有磁盘没有分区 fdisk -l 其中第一个框和第二个框,是已经分好区的磁盘,第三个硬盘没有 ...
- (转)硬盘分区备忘(主分区,扩展分区和逻辑分区)以及Linux硬盘分区工具parted 介绍
场景:最近在学习Linux的基础知识,不可避免的设计到Linux的磁盘分区,以前做过总结,但是那种总结就是复制别人的文章,总结完就不想看第二遍,所以很容易就遗忘了!清楚明白的理解分区后,我就可以在自己 ...
- linux 硬盘分区与格式化挂载
1. 硬件设备与文件名的对应关系(详见linux系统管理P297)1) 掌握在Linux系统中,每个设备都被当初一个文件来对待.2) 掌握各种设备在Linux中的文件名 2. 硬盘的结构及硬盘分区(详 ...
- Linux基础——硬盘分区、格式化及文件系统的管理
1. 硬件设备与文件名的对应关系 掌握在Linux系统中,每个设备都被当初一个文件来对待. 设备 设备在Linux内的文件名 IDE硬盘 /dev/hd[a-d] SCSI硬盘 /dev/sd[a-p ...
随机推荐
- java中volatile关键字的含义(转)
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...
- lua学习笔记(五)
语句 赋值 多重赋值 a, b, c, d = 1, 2, 3, 4 a, b, c = 1, 2 assert(c == ni ...
- 关于inittab的几个命令
1. 查看default runlevel(默认运行等级)的方法: $cat /etc/inittab | grep id id:3:initdefault: # <id>:<run ...
- ActiveMQ与xml rpc
最近项目在做平台间的消息传递,也让我对平台间消息的传递进行了深一步的探讨.先叙述一下概况 公司上一个版本用的是winform做的监控软件,主要做设备的通信和控制,基本的连接如下
- phalcon builder 用法
$rawSql = $builder->columns(["aa","bb"]) ->from("TableName") -&g ...
- Unity中surfaceShader的处理机制和finalColor
http://blog.csdn.net/swj524152416/article/details/52945375
- jquery基础研究学习【HTML】
jQuery HTMLjQuery 捕获jQuery 设置jQuery 添加元素jQuery 删除元素jQuery CSS 类jQuery css() 方法jQuery 尺寸 笔记:
- mysqldump命令使用详解
mysqldump是一个数据库备份程序 用法:mysqldump [options] [db_name [tbl_name ...]] 描述:mysqldump是一个客户端逻辑备份的工作,备份的SQL ...
- Unity3d NGUI 360度旋转
[AddComponentMenu("NGUI/Examples/Spin With Mouse")] publicclass SpinWithMouse : MonoBehavi ...
- 实用T-SQL代码
1.根据出生日期计算当前已满周岁 DECLARE @birth datetime SET @birth='1990-01-01' ),) ),) 2.COUNT(expression) just re ...