磁盘分区-《鸟哥的Linux私房菜》读书笔记1

1、在Linux的装置文件名

在实体机的环境下,使用的是 /dev/sd[a-] 的磁盘文件名
在虚拟机的环境下,为了加速,可能会使用/dev/vd[a-p] 装置文件名

2、装置文件名的命名顺序

根据 Linux 核心侦测到磁盘的顺序

例题:
如果你的 PC 上面有两个 SATA 磁盘以及一个 USB 磁盘,而主板上面有六个 SATA 的插槽。这两个 SATA 磁盘分别安
插在主板上的 SATA1, SATA5 插槽上, 请问这三个磁盘在 Linux 中的装置文件名为何?
答:
由于是使用侦测到的顺序来决定装置文件名,并非与实际插槽代号有关,因此装置的文件名如下:

  1. SATA1 插槽上的檔名:/dev/sda
  2. SATA5 插槽上的檔名:/dev/sdb
  3. USB 磁盘(开机完成后才被系统捉到):/dev/sdc

3、分区

除光盘外,外部存储设备如:软盘、硬盘、U盘等,统称为磁盘

  • 先认识一下硬盘

由许许多多的圆形磁盘盘、机械手臂、 磁盘读取头与主轴马达所组成
在这里插入图片描述
扇区和磁道:
这个小区块就是磁盘的最小物理储存单位,称之为扇区 (sector),那同一个同心圆的扇区组合成的圆就是所谓的磁道(track)。
我们知道同心圆外圈的圆比较大,占用的面积比内圈多啊!所以,为了善用这些空间,因此外围的圆会具有更多的扇区! 就如同图的示意一般。此外,当磁盘盘转一圈时,外圈的扇区数量比较多,因此如果数据写入在外圈,转一圈能够读写的数据量当然比内圈还要多! 因此通常数据的读写会由外圈开始往内写。
另外,原本硬盘的扇区都是设计成 512byte 的容量,但因为近期以来硬盘的容量越来越大,为了减少数据量的拆解,所以新的高容量硬盘已经有 4Kbyte 的扇区设计。
在这里插入图片描述
扇面
在这里插入图片描述
柱面:
是我们抽象出来的一个逻辑概念,简单来说就是处于同一个垂直区域的磁道称为柱面 ,即各盘面上面相同位置磁道的集合。
磁头:
磁盘读写头
在这里插入图片描述
在这里插入图片描述
硬盘总不能真的拿锯子来切切割割吧?那硬盘还真的是会坏掉去!那怎办?在上面图示中,我们有看到『开始与结束磁道』吧?而通常磁盘可能有多个磁盘盘,所有磁盘盘的同一个磁道我们称为柱面 (Cylinder), 通常那是文件系统的最小单位,也就是分区槽的最小单位啦!为什么说『通常』呢?因为近来有 GPT 这个可达到 64bit 纪录功能的分区表, 现在我们甚至可以使用扇区 (sector)号码来作为分区单位!厉害了! 所以说,我们就是利用参考对照柱面或扇区号码的方式来处理啦!
也就是说,分区表其实目前有两种格式喔!我们就依序来谈谈这两种分区表格式吧。
MSDOS(MBR) 与 GPT 磁盘分区表(partition table)

  • MSDOS (MBR) 分区表格式

早期的 Linux 系统为了兼容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512bytes 的大小
所以说,第一个扇区 512bytes 会有这两个数据:

1、主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes

2、分区表(partition table):记录整颗硬盘分区的状态,有 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)分区槽。 根据上面的图示与说明,我们可以得到几个重点信息:

1、 其实所谓的『分区』只是针对那个 64 bytes 的分区表进行设定而已!
2、硬盘默认的分区表仅能写入四组分区信息
3、这四组分区信息我们称为主要(Primary)或延伸(Extended)分区槽
4、分区槽的最小单位『通常』为柱面(cylinder)
5、当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区槽进行数据的处理

为啥要分区啊?基本上你可以这样思考分区的角度:

  1. 数据的安全性:
    因为每个分区槽的数据是分开的!所以,当你需要将某个分区槽的数据重整时,例如你要将计算机中Windows 的 C 槽重新安装一次系统时, 可以将其他重要数据移动到其他分区槽,例如将邮件、桌面数据移动到 D 槽去,那么 C 槽重灌系统并不会影响到 D 槽! 所以善用分区槽,可以让妳的数据更安全。
  2. 系统的效能考虑:
    由于分区槽将数据集中在某个磁柱的区段,例如上图当中第一个分区槽位于磁柱号码 1~100 号,如此一来当有数据要读取自该分区槽时, 磁盘只会搜寻前面 1~100 的磁柱范围,由于数据集中了,将有助于数据读取的速度与效能!所以说,分区是很重要的!
    既然分区表只有记录四组数据的空间,那么是否代表我一颗硬盘最多只能分区出四个分区槽?当然不是啦!有经验的朋友都知道, 你可以将一颗硬盘分区成十个以上的分区槽的!那又是如何达到的呢?

在 Windows/Linux 系统中, 我们是透过刚刚谈到的延伸分区(Extended)的方式来处理的啦!延伸分区的想法是: 既然第一个扇区所在的分区表只能记录四笔数据, 那我可否利用额外的扇区来记录更多的分区信息?实际上图示有点像底下这样:
在这里插入图片描述
在上图当中,我们知道硬盘的四个分区记录区仅使用到两个,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 主要分区、延伸分区与逻辑分区的特性我们作个简单的定义:

1、主要分区与延伸分区最多可以有四笔(硬盘的限制);
2、延伸分区最多只能有一个(操作系统的限制);
3、逻辑分区是由延伸分区持续切割出来的分区槽;
4、能够被格式化后,作为数据存取的分区槽为主要分区与逻辑分区。延伸分区无法格式化;
5、逻辑分区的数量依操作系统而不同,在 Linux 系统中 SATA 硬盘已经可以突破 63 个以上的分区限制;

事实上,分区是个很麻烦的东西,因为他是以柱面单位的『连续』磁盘空间, 且延伸分区又是个类似独立的磁盘空间,所以在分区的时候得要特别注意。

我们举底下的例子来解释一下好了:

例题:
在 Windows 操作系统当中,如果你想要将 D 与 E 槽整合成为一个新的分区槽,而如果有两种分区的情况如下图所
示, 图中的特殊颜色区块为 D 与 E 槽的示意,请问这两种方式是否均可将 D 与 E 整合成为一个新的分区槽?
在这里插入图片描述
答:

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

由于第一个扇区所记录的分区表与MBR是这么的重要,几乎只要读取硬盘都会先由这个扇区先读起。
因此,如果整颗硬盘的第一个扇区(就是 MBR 与 partition table 所在的扇区)物理实体坏掉了,那这个硬盘大概就没有用了! 因为系统如果找不到分区表,怎么知道如何读取磁柱区间呢?您说是吧!底下还有一些例题您可以思考看看:

例题1:
如果我想将一颗大硬盘『暂时』分区成为四个 partitions,同时还有其他的剩余容量可以让我在未来的时候进行规
划, 我能不能分区出四个 Primary?若不行,那么你建议该如何分区?
答:

  • 由于 Primary+Extended 最多只能有四个,其中 Extended 最多只能有一个,这个例题想要分区出四个分区槽且还要预留剩余容量, 因此 P+P+P+P 的分区方式是不适合的。因为如果使用到四个 P,则即使硬盘还有剩余容量, 因为无法再继续分区,所以剩余容量就被浪费掉了。
  • 假设你想要将所有的四笔记录都花光,那么 P+P+P+E 是比较适合的。所以可以用的四个 partitions 有 3 个主要及一个逻辑分区, 剩余的容量在延伸分区中。
  • 如果你要分区超过 4 槽以上时,一定要有 Extended 分区槽,而且必须将所有剩下的空间都分配给 Extended,然后再以 logical 的分区来规划 Extended 的空间。 另外,考虑到磁盘的连续性,一般建议将Extended 的磁柱号码分配在最后面的磁柱内。

例题2:
假如我的 PC 有两颗 SATA 硬盘,我想在第二颗硬盘分区出 6 个可用的分区槽(可以被格式化来存取数据之用), 那每个分区槽在 Linux 系统下的装置文件名为何?且分区类型各为何?至少写出两种不同的分区方式。
答:
由于 P(primary)+E(extended)最多只能有四个,其中 E 最多只能有一个。现在题目要求 6 个可用的分区槽,因此不可能分出四个 P。 底下我们假设两种环境,一种是将前四号全部用完,一种是仅花费一个 P 及一个 E 的情况:

  • P+P+P+E 的环境:
    在这里插入图片描述
    实际可用的是/dev/sdb1, /dev/sdb2, /dev/sdb3, /dev/sdb5, /dev/sdb6, /dev/sdb7 这六个,至于/dev/sdb4 这个延伸分区本身仅是提供来给逻辑分区槽建立之用。
  • P+E 的环境:
    在这里插入图片描述
    注意到了吗?因为 1~4 号是保留给主要/延伸分区槽的,因此第一个逻辑分区槽一定是由 5 号开始的!再次强调啊!
    所以/dev/sdb3,/dev/sdb4 就会被保留下来没有用到了!

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 这个磁盘分区的格式出现了!

  • GUID partition table,GPT 磁盘分区表格式

因为过去一个扇区大小就是 512bytes 而已,不过目前已经有 4K 的扇区设计出现!为了兼容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块地址(Logical Block Address, LBA)来处理。
GPT 将磁盘所有区块以此 LBA(预设为 512bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从0 开始编号)。
与 MBR 仅使用第一个 512bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!详细的结构有点像底下的模样:

在这里插入图片描述
上述图示的解释说明如下:

  • LBA0 (MBR 相容区块)
    与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的区块,储存了第一阶段的开机管理程序! 而在原本的分区表的纪录区内,这个兼容模式仅放入一个特殊标志的分区,用来表示此磁盘为 GPT 格式之意。而不懂 GPT 分区表的磁盘管理程序, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件不能修改此分区信息,进一步保护了此磁盘喔!
  • LBA1 (GPT 表头纪录)
    这个部份纪录了分区表本身的位置与大小,同时纪录了备份用的 GPT 分区 (就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分区表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以透过这个纪录区来取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运作!
  • LBA2-33 (实际纪录分区信息处)
    从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可以有 4*32 = 128 笔分区纪录喔!因为每个 LBA 有 512bytes,因此每笔纪录用到 128bytes 的空间,除了每笔纪录所需要的标识符与相关的纪录之外,GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码,因此,GPT 分区表对于单一分区槽来说, 他的最大容量限制就会在『 264 * 512bytes = 263 * 1Kbytes = 233 *TB = 8 ZB 』,要注意 1ZB =230 TB 啦! 你说有没有够大了?
    现在 GPT 分区预设可以提供多达 128 笔纪录,而在 Linux 本身的核心装置纪录中,针对单一磁盘来说,虽然过去最多只能到达 15 个分区槽,不过由于 Linux kernel 透过 udev 等方式的处理,现在Linux 也已经没有这个限制在了! 此外,GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用!

Tips 鸟哥一直以为核心认识的装置主要/次要号码就一定是连续的,因此一直没有注意到由于新的机制的关系,分区槽已经可以突破核心限制的状况! 此外,为了查询正确性,鸟哥还真的有注意到网络上有朋友实际拿一颗磁盘分区出 130 个以上的分区槽, 结果他发现 120 个以前的分区槽均可以格式化使用,但是 130 之后的似乎不太能够使用了!或许跟默认的 GPT 共 128 个号码有关!

虽然新版的 Linux 大多认识了 GPT 分区表,没办法,我们 server 常常需要比较高容量的磁盘嘛!不过,在磁盘管理工具上面, fdisk 这个老牌的软件并不认识 GPT 喔!要使用 GPT 的话,得要操作类似 gdisk 或者是 parted 指令才行!这部份我们会在第二篇再来谈一谈。 另外,开机管理程序方面, grub 第一版并不认识 GPT 喔!得要 grub2 以后才会认识的!
并不是所有的操作系统都可以读取到 GPT 的磁盘分区格式喔!同时,也不是所有的硬件都可以支持GPT 格式喔!是否能够读写 GPT 格式又与开机的检测程序有关! 那开机的检测程序又分成啥鬼东西呢?就是 BIOS 与 UEFI 啦!那这两个又是啥东西?就让我们来聊一聊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值