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/usb/lp[0-15] (USB 界面)

鼠标

/dev/input/mouse[0-15] (通用)
/dev/psaux (PS/2界面)
/dev/mouse (当前鼠标)

CDROM/DVDROM

/dev/scd[0-1] (通用)
/dev/sr[0-1] (通用,CentOS 较常见)
/dev/cdrom (当前 CDROM)

磁带机

/dev/ht0 (IDE 界面)
/dev/st0 (SATA/SCSI界面)
/dev/tape (当前磁带)

IDE硬盘机

/dev/hd[a-d] (旧式系统才有)

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)
  • 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分割槽进行数据的处理

咦!你会不会突然想到,为啥要分割啊?基本上你可以这样思考分割的角度:

  1. 数据的安全性:
    因为每个分割槽的数据是分开的!所以,当你需要将某个分割槽的数据重整时,例如你要将计算机中Windows的C槽重新安装一次系统时, 可以将其他重要数据移动到其他分割槽,例如将邮件、桌面数据移动到D槽去,那么C槽重灌系统并不会影响到D槽! 所以善用分割槽,可以让妳的数据更安全。
  2. 系统的效能考虑:
    由于分割槽将数据集中在某个磁柱的区段,例如上图当中第一个分割槽位于磁柱号码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、磁盘空间整合示意图

答:

  • 上图可以整合:因为上图的D与E同属于延伸分割内的逻辑分割,因此只要将两个分割槽删除,然后再重新建立一个新的分割槽,
    就能够在不影响其他分割槽的情况下,将两个分割槽的容量整合成为一个。
  • 下图不可整合:因为D与E分属主分割与逻辑分割,两者不能够整合在一起。除非将延伸分割破坏掉后再重新分割。 但如此一来会影响到所有的逻辑分割槽,要注意的是:如果延伸分割被破坏,所有逻辑分割将会被删除。 因为逻辑分割的信息都记录在延伸分割里面嘛!

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的更多相关文章

  1. 浅谈Linux下傻瓜式磁盘分区工具cfdisk的使用

    对于新手来说,Linux环境下的磁盘分区可能还会存在一些困难.对于熟悉Linux的朋友来说,我们还有fdisk.parted(2TB以上的磁盘分区使用)等磁盘分区工具可以使用.在我们新增磁盘或者在原来 ...

  2. Linux磁盘分区--MBR分区

    今天心情不高兴,做IT不容易被公司重视,一定要速度学会运营,成为一个高逼格的技术男. 今天我要熟练掌握linux系统分区的能力.大家都知道,linux系统分区有两种分区格式:GTP和MBR. MBR作 ...

  3. Linux学习之路—磁盘分区

    1.各硬件设备在Linux中的文件名 在Linux系统中,每个设备都被当做一个文件来对待,同时在Linux系统中,几乎所有的硬件设备文件都在/dev这个目录中. 设备 设备在Linux内的文件名 ID ...

  4. Linux主机规划与磁盘分区

    各硬件设备在Linux中的文件名 在Linux系统当中,几乎所有的硬件设备文件都在/dev这个目录内. 各硬件设备在Linux中的文件名: 设备 设备在Linux中的文件名 IDE接口的硬盘 /dev ...

  5. 【linux相识相知】磁盘分区及文件系统管理详解

    磁盘,提供持久的数据存储,它不像我们的内存,如果突然断电了,在内存中的数据一般都会被丢掉了,内存中的数据在保存的时候,会被写到硬盘里面,磁盘也是一种I/O设备. 我们都知道磁盘分区完成之后,还要进行格 ...

  6. linux之任务调度,磁盘分区,yum下载

    一.crond任务调度 调度机制: 基本语法 crontab [选项] -e : bianji crontab定时任务 -l : 查询crontab -r : 删除当前用户所有的crontab任务 例 ...

  7. 初始化Linux数据盘、磁盘分区、挂载磁盘(fdisk)

    1.操作场景 2.前提条件 3.划分分区并挂载磁盘 4.设置开机自动挂载磁盘分区 1.操作场景 本文以云服务器的操作系统为"CentOS 7.4 64位"为例,采用fdisk分区工 ...

  8. linux 磁盘 分区 MBR GPT

    磁盘:由许多盘片,机械手臂,磁头和主轴马达所构成的,实际的数据都是写入盘片上面,而读写主要是通过机械手臂可伸展让磁头在盘片(在主轴马达的转动左右下,盘片跟着转动)上面进行读写操作.由于单一盘片写入数据 ...

  9. Linux学习笔记02—磁盘分区

    下面介绍四种最常见的分区方式: (1)    最简单的分区方案. SWAP分区:即交换分区,建议大小是物理内存的1-2倍. /分区:建议大小在6GB以上. 使用以上的分区方案,所有的数据都在/分区上, ...

随机推荐

  1. CentOS修改系统时间

    CentOS修改系统时间 操作: 1. date –s '1987-05-02 10:10:10' 2. clock –w //将日期写入CMOS 补充: 修改Linux时间一般涉及到3个命令: 1. ...

  2. Java学习笔记13(面向对象六:super)

    在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句 注意:父类构造方法第一行也有隐式的super(); 所有类都有一个"祖宗类" ...

  3. python之Character string

    1.python字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串,l Python不支持单字符类型,单字符也在Python也是作为一个字符串使用. ...

  4. Jerry的CDS view自学系列

    My CDS view self study tutorial - part 1 how to test odata service generated by CDS view https://blo ...

  5. Windows下安装Selenium

    安装python,建议在官网下载python3以上的版本 安装easy_install,找度娘 安装selenium,在命令行窗口下输入:pip install -U selenium 下载chrom ...

  6. Linux中oops信息调试【转】

    1.Oops 信息来源及格式 Oops 这个单词含义为“惊讶”,当内核出错时(比如访问非法地址)打印出来的信息被称为 Oops 信息. 2.Oops 信息包含以下几部分内容 2.1 一段文本描述信息. ...

  7. metasploit魔鬼训练营 (安全漏洞生命周期)

    1,前期 渗透测试工程师在挖掘0day的出来的 2,前中期 在一个密封的团体里,互相交流,利用漏洞带来的价值和,金钱 3,中期 安全漏洞被披露!!黑客们快速掌握该漏洞 4,中后期 漏洞被制作成更为简单 ...

  8. cs231n spring 2017 lecture12 Visualizing and Understanding 听课笔记

    这一节课很零碎. 1. 神经网络到底在干嘛? 浅层的是具体的特征(比如边.角.色块等),高层的更抽象,最后的全连接层是把图片编码成一维向量然后和每一类标签作比较.如果直接把图片和标签做像素级的最近领域 ...

  9. Maven(三)在Eclipse中使用Maven与Maven坐标

    这一篇讲解一下在eclipse中使用maven,在一些高版本的eclipse中是自带maven插件的.所以这里就不在讲解怎么安装插件了. 接下来我们创建一个MavenFirst项目 一.在Eclips ...

  10. vue -- v-cloak解决刷新或者加载出现闪烁(显示变量)

    在使用vue绑定数据的时候,渲染页面时会出现变量闪烁,例如 <div class="#app"> <p>{{value.name}}</p> & ...