转-Linux硬件装置和磁盘分区MBR
1 各硬件装置在Linux中的文件名
『在Linux系统中,每个装置都被当成一个文件来对待』 举例来说,SATA接口的硬盘的文件名即为/dev/sd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/sda, /dev/sdb, /dev/sdc, 及 /dev/sdd这四个文件的意思。
另外先提出来强调一下,在Linux这个系统当中,几乎所有的硬件装置都在/dev这个目录内, 所以你会看到/dev/sda, /dev/sr0等等的文件名喔。
那么打印机与软盘呢?分别是/dev/lp0, /dev/fd0啰!好了,其他的接口设备呢? 底下列出几个常见的装置与其在Linux当中的文件名啰:
|
装置 |
装置在Linux内的文件名 |
|---|---|
|
SCSI/SATA/USB硬盘机 |
/dev/sd[a-p] |
|
USB快闪碟 |
/dev/sd[a-p] (与SATA相同) |
|
VirtI/O界面 |
/dev/vd[a-p] (用于虚拟机内) |
|
软盘驱动器 |
/dev/fd[0-7] |
|
打印机 |
/dev/lp[0-2] (25针打印机) |
|
鼠标 |
/dev/input/mouse[0-15] (通用) |
|
CDROM/DVDROM |
/dev/scd[0-1] (通用) |
|
磁带机 |
/dev/ht0 (IDE 界面) |
|
IDE硬盘机 |
/dev/hd[a-d] (旧式系统才有) |
2 MSDOS(MBR) 与 GPT 磁盘分区表(partition table)
但是硬盘总不能真的拿锯子来切切割割吧?那硬盘还真的是会坏掉去!那怎办?在前一小节的图示中, 我们有看到『开始与结束磁道』吧?而通常磁盘可能有多个磁盘盘,所有磁盘盘的同一个磁道我们称为磁柱 (Cylinder), 通常那是文件系统的最小单位,也就是分割槽的最小单位啦!为什么说『通常』呢?因为近来有 GPT 这个可达到 64bit 纪录功能的分割表, 现在我们甚至可以使用扇区 (sector) 号码来作为分割单位哩!厉害了! 所以说,我们就是利用参考对照磁柱或扇区号码的方式来处理啦!
也就是说,分割表其实目前有两种格式喔!我们就依序来谈谈这两种分割表格式吧。
- MSDOS (MBR) 分割表格式与限制
早期的 Linux 系统为了兼容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分割表!而开机管理程序纪录区与分割表则通通放在磁盘的第一个扇区, 这个扇区通常是 512bytes 的大小 (旧的磁盘扇区都是 512bytes 喔!),所以说,第一个扇区 512bytes 会有这两个数据:
- 主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 bytes
- 分割表(partition table):记录整颗硬盘分割的状态,有64 bytes
由于分割表所在区块仅有64 bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码。 若将硬盘以长条形来看,然后将磁柱以柱形图来看,那么那64 bytes的记录区段有点像底下的图示:

假设上面的硬盘装置文件名为/dev/sda时,那么这四个分割槽在Linux系统中的装置文件名如下所示, 重点在于档名后面会再接一个数字,这个数字与该分割槽所在的位置有关喔!
- P1:/dev/sda1
- P2:/dev/sda2
- P3:/dev/sda3
- P4:/dev/sda4
上图中我们假设硬盘只有400个磁柱,共分割成为四个分割槽,第四个分割槽所在为第301到400号磁柱的范围。 当你的操作系统为Windows时,那么第一到第四个分割槽的代号应该就是C, D, E, F。当你有资料要写入F槽时, 你的数据会被写入这颗磁盘的301~400号磁柱之间的意思。
由于分割表就只有64 bytes而已,最多只能容纳四笔分割的记录, 这四个分割的记录被称为主要(Primary)或延伸(Extended)分割槽。 根据上面的图示与说明,我们可以得到几个重点信息:
- 其实所谓的『分割』只是针对那个64 bytes的分割表进行设定而已!
- 硬盘默认的分割表仅能写入四组分割信息
- 这四组分割信息我们称为主要(Primary)或延伸(Extended)分割槽
- 分割槽的最小单位『通常』为磁柱(cylinder)
- 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分割槽进行数据的处理
咦!你会不会突然想到,为啥要分割啊?基本上你可以这样思考分割的角度:
- 数据的安全性:
因为每个分割槽的数据是分开的!所以,当你需要将某个分割槽的数据重整时,例如你要将计算机中Windows的C槽重新安装一次系统时, 可以将其他重要数据移动到其他分割槽,例如将邮件、桌面数据移动到D槽去,那么C槽重灌系统并不会影响到D槽! 所以善用分割槽,可以让妳的数据更安全。 - 系统的效能考虑:
由于分割槽将数据集中在某个磁柱的区段,例如上图当中第一个分割槽位于磁柱号码1~100号,如此一来当有数据要读取自该分割槽时, 磁盘只会搜寻前面1~100的磁柱范围,由于数据集中了,将有助于数据读取的速度与效能!所以说,分割是很重要的!
既然分割表只有记录四组数据的空间,那么是否代表我一颗硬盘最多只能分割出四个分割槽?当然不是啦!有经验的朋友都知道, 你可以将一颗硬盘分割成十个以上的分割槽的!那又是如何达到的呢?在Windows/Linux系统中, 我们是透过刚刚谈到的延伸分割(Extended)的方式来处理的啦!延伸分割的想法是:既然第一个扇区所在的分割表只能记录四笔数据, 那我可否利用额外的扇区来记录更多的分割信息?实际上图示有点像底下这样:

实际上延伸分割并不是只占一个区块,而是会分布在每个分割槽的最前面几个扇区来记载分割信息的!只是为了方便读者记忆, 鸟哥在上图就将他简化了!有兴趣的读者可以到底下的连结瞧一瞧实际延伸分割的纪录方式:
http://en.wikipedia.org/wiki/Extended_boot_record
在上图当中,我们知道硬盘的四个分割记录区仅使用到两个,P1为主要分割,而P2则为延伸分割。请注意, 延伸分割的目的是使用额外的扇区来记录分割信息,延伸分割本身并不能被拿来格式化。 然后我们可以透过延伸分割所指向的那个区块继续作分割的记录。
如上图右下方那个区块有继续分割出五个分割槽, 这五个由延伸分割继续切出来的分割槽,就被称为逻辑分割槽(logical partition)。 同时注意一下,由于逻辑分割槽是由延伸分割继续分割出来的,所以他可以使用的磁柱范围就是延伸分割所设定的范围喔! 也就是图中的101~400啦!
同样的,上述的分割槽在Linux系统中的装置文件名分别如下:
- P1:/dev/sda1
- P2:/dev/sda2
- L1:/dev/sda5
- L2:/dev/sda6
- L3:/dev/sda7
- L4:/dev/sda8
- L5:/dev/sda9
仔细看看,怎么装置文件名没有/dev/sda3与/dev/sda4呢?因为前面四个号码都是保留给Primary或Extended用的嘛! 所以逻辑分割槽的装置名称号码就由5号开始了!这在 MBR 方式的分割表中是个很重要的特性,不能忘记喔!
MBR 主要分割、延伸分割与逻辑分割的特性我们作个简单的定义啰:
- 主要分割与延伸分割最多可以有四笔(硬盘的限制)
- 延伸分割最多只能有一个(操作系统的限制)
- 逻辑分割是由延伸分割持续切割出来的分割槽;
- 能够被格式化后,作为数据存取的分割槽为主要分割与逻辑分割。延伸分割无法格式化;
- 逻辑分割的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分割限制;
事实上,分割是个很麻烦的东西,因为他是以磁柱为单位的『连续』磁盘空间, 且延伸分割又是个类似独立的磁盘空间,所以在分割的时候得要特别注意。我们举底下的例子来解释一下好了:
|
例题: 在Windows操作系统当中,如果你想要将D与E槽整合成为一个新的分割槽,而如果有两种分割的情况如下图所示, 图中的特殊颜色区块为D与E槽的示意,请问这两种方式是否均可将D与E整合成为一个新的分割槽?
图2.2.4、磁盘空间整合示意图 答:
|
MBR 分割表除了上述的主分割、延伸分割、逻辑分割需要注意之外,由于每组分割表仅有 16bytes 而已,因此可纪录的信息真的是相当有限的! 所以,在过去 MBR 分割表的限制中经常可以发现如下的问题:
- 操作系统无法抓取到 2.2T 以上的磁盘容量!
- MBR 仅有一个区块,若被破坏后,经常无法或很难救援。
- MBR 内的存放开机管理程序的区块仅 446bytes,无法容纳较多的程序代码。
这个 2.2TB 限制的现象在早期并不会很严重。但是,近年来硬盘厂商动不对推出的磁盘容量就高达好几个 TB 的容量!目前 (2015) 单一磁盘最高容量甚至高达 8TB 了! 如果使用磁盘阵列的系统,像鸟哥的一组系统中,用了 24 颗 4TB 磁盘搭建出磁盘阵列,那在 Linux 底下就会看到有一颗 70TB 左右的磁盘! 如果使用 MBR 的话...那得要 2TB/2TB 的割下去,虽然 Linux kernel 现在已经可以透过某些机制让磁盘分区高过 63 个以上,但是这样就得要割出将近 40 个分割槽~ 真要命... 为了解决这个问题,所以后来就有 GPT 这个磁盘分区的格式出现了!
3 GUID partition table, GPT 磁盘分区表(注1)
因为过去一个扇区大小就是 512bytes 而已,不过目前已经有 4K 的扇区设计出现!为了兼容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块地址(Logical Block Address, LBA)来处理。GPT 将磁盘所有区块以此 LBA(预设为 512bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从 0 开始编号)。
与 MBR 仅使用第一个 512bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分割信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!详细的结构有点像底下的模样
转-Linux硬件装置和磁盘分区MBR的更多相关文章
- 浅谈Linux下傻瓜式磁盘分区工具cfdisk的使用
对于新手来说,Linux环境下的磁盘分区可能还会存在一些困难.对于熟悉Linux的朋友来说,我们还有fdisk.parted(2TB以上的磁盘分区使用)等磁盘分区工具可以使用.在我们新增磁盘或者在原来 ...
- Linux磁盘分区--MBR分区
今天心情不高兴,做IT不容易被公司重视,一定要速度学会运营,成为一个高逼格的技术男. 今天我要熟练掌握linux系统分区的能力.大家都知道,linux系统分区有两种分区格式:GTP和MBR. MBR作 ...
- Linux学习之路—磁盘分区
1.各硬件设备在Linux中的文件名 在Linux系统中,每个设备都被当做一个文件来对待,同时在Linux系统中,几乎所有的硬件设备文件都在/dev这个目录中. 设备 设备在Linux内的文件名 ID ...
- Linux主机规划与磁盘分区
各硬件设备在Linux中的文件名 在Linux系统当中,几乎所有的硬件设备文件都在/dev这个目录内. 各硬件设备在Linux中的文件名: 设备 设备在Linux中的文件名 IDE接口的硬盘 /dev ...
- 【linux相识相知】磁盘分区及文件系统管理详解
磁盘,提供持久的数据存储,它不像我们的内存,如果突然断电了,在内存中的数据一般都会被丢掉了,内存中的数据在保存的时候,会被写到硬盘里面,磁盘也是一种I/O设备. 我们都知道磁盘分区完成之后,还要进行格 ...
- linux之任务调度,磁盘分区,yum下载
一.crond任务调度 调度机制: 基本语法 crontab [选项] -e : bianji crontab定时任务 -l : 查询crontab -r : 删除当前用户所有的crontab任务 例 ...
- 初始化Linux数据盘、磁盘分区、挂载磁盘(fdisk)
1.操作场景 2.前提条件 3.划分分区并挂载磁盘 4.设置开机自动挂载磁盘分区 1.操作场景 本文以云服务器的操作系统为"CentOS 7.4 64位"为例,采用fdisk分区工 ...
- linux 磁盘 分区 MBR GPT
磁盘:由许多盘片,机械手臂,磁头和主轴马达所构成的,实际的数据都是写入盘片上面,而读写主要是通过机械手臂可伸展让磁头在盘片(在主轴马达的转动左右下,盘片跟着转动)上面进行读写操作.由于单一盘片写入数据 ...
- Linux学习笔记02—磁盘分区
下面介绍四种最常见的分区方式: (1) 最简单的分区方案. SWAP分区:即交换分区,建议大小是物理内存的1-2倍. /分区:建议大小在6GB以上. 使用以上的分区方案,所有的数据都在/分区上, ...
随机推荐
- Java学习笔记14(面向对象七:final、static)
final:意为最终,不可变,是一个修饰词 有时候一个类地功能被开发好了,不想让子类重写,修改,这里就会用到final关键字 final修饰类: 不可以被继承,但是可以继承其他类 示例: public ...
- [笔记]《JavaScript高级程序设计》- JavaScript简介
JavaScript实现 虽然JavaScript和ECMAScript通常都被人们用来表达相同的含义,但JavaScript的含义却比ECMA-262中规定的要多得多.一个完整的JavaScript ...
- windows 纤程
纤程本质上也是线程,是多任务系统的一部分,纤程为一个线程准并行方式调用多个不同函数提供了一种可能,它本身可以作为一种轻量级的线程使用.它与线程在本质上没有区别,它也有上下文环境,纤程的上下文环境也是一 ...
- jsp基础了解
1.什么是动态页面: 所谓的动态网页,是指跟静态网页相对的一种网页编程技术.静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了--除非你修改页面代码.而动态网页则不然, ...
- Core Java 谈谈 ThreadPoolExecutor
说起Java 7的Executors框架的线程池,同学们能想到有几种线程池,它们分别是什么? 一共有四个,它们分别是Executors的 newSingleThreadPool(), newCache ...
- Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
- 【vue系列之三】从一个vue-pdf-shower,说说vue组件和npm包
前言 从去年年初开始,自己便下决心要写一个vue系列的博客,但时至今日,才写系列的第三篇博客,想来甚是惭愧. 但是慢归慢,每一篇都要保证质量,以及要写出自己的心路历程,防止自己工作中填的坑再让读者走一 ...
- 天气类App原型制作分享-ColorfulClouds
ColorfulClouds是一款界面精美的天气预报App,它可以准确预报降雨量.污染程度等.这款App最美的是它的首页天气插画,扁平精美,同时配上了适当的动效,把普通的天气变得漂亮有趣,十分吸引眼球 ...
- CTF---密码学入门第六题 古典密码
古典密码分值:10 来源: 北邮天枢战队 难度:易 参与人数:5115人 Get Flag:1549人 答题人数:1783人 解题通过率:87% 密文内容如下{79 67 85 123 67 70 8 ...
- 51Nod 1083 矩阵取数问题(矩阵取数dp,基础题)
1083 矩阵取数问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下 ...
