磁盘的分区,建立文件系统,挂载

这一节要将整个磁盘,分区,文件系统的脉络讲清楚.

首先,我们必须明确,我们的文件,数据包括我们的操作系统,都是存储在哪?存储在磁盘中.

磁盘的分区,建立文件系统,挂载
磁盘是啥?上图那东西就是磁盘,是可以存储数据的地方.

另外,我们一般都不会使用一整块磁盘,我们都会对磁盘进行分区,就好像使用window系统,我们有C盘,D盘,E盘,F盘一样.这些盘是什么?这些盘就是所谓的分区.

为什么需要分区,首先是分区可以更加方便地让我们管理和使用文件.而且倘如某个分区出错时,也只需要备份和恢复对应的分区即可,总的来说,就是更加方便我们维护和管理.

磁盘文件名:
正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境底下,为了加速,可能就会使用 /dev/vd[a-p] 这种装置文件名喔!

再以 SATA 接口来说,由于 SATA/USB/SAS 等磁盘接口都是使用 SCSI 模块来驱动的, 因此这些接口的磁盘装置文件名都是/dev/sd[a-p]的格式。 所以 SATA/USB 接口的磁盘根本就没有一定的顺序,那如何决定他的装置文件名呢?

对于磁盘更深入的了解可以参考以下链接:
磁盘深入理解

磁盘盘上面又可细分出扇区(Sector)与磁道(Track)两种单位, 其中扇
区的物理量设计有两种大小,分别是 512bytes 与 4Kbytes。

磁盘的分区大致分为以下两种,一种是MBR分区,一种是GPT分区。

先来简单讲一下MBR分区吧。

早期的分区是磁柱为基本单位,所谓的磁柱,这么说,磁盘其实是由很多个磁片组成的,而每个磁片上都有很多个同心圆轨道。那么所有磁片的同一个同心圆轨道就为一个磁柱。

磁盘实际在存储数据时,先从一个扇区拿,然后区同一个磁柱的下一个磁片,直到所有磁片存取完再去下一个扇区,然后同一磁道上所有扇区都取完再去下一磁道。

MBR分区:
而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区,这个扇区通常是 512bytes 的大小 (旧的磁盘扇区都是 512bytes 喔!)。

 主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
 分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes。

而因为分区表仅有64字节,而一组记录需要16字节,所以只能记录4组记录去。每组记录区记录了该区段的起始与结束的磁柱号码。

磁盘的分区,建立文件系统,挂载
磁盘的分区,建立文件系统,挂载
但是,我们实际上是不止能分出四个分区槽的。可能还能分成十个以上。那就是利用延伸分区来处理。延伸分区的想法是: 既然第一个扇区所在的分区表只能记录四笔数据, 那我可否利用额外的扇区来记录更多的分区信息?实际上图示有点像底下这样:
磁盘的分区,建立文件系统,挂载
也就是说,MBR会分一个延伸分区,而这个延伸分区的第一个扇区就也可以记录分区表,然后从延伸分区分出很多个逻辑分区来。

磁盘的分区,建立文件系统,挂载
磁盘的分区,建立文件系统,挂载
但是MBR有个致命的缺陷,就是没法直接2T以上的磁盘。所以为了支持2T以上的磁盘,我们不得不求助于GPT。

GPT

因为过去一个扇区大小就是 512bytes 而已,不过目前已经有 4K 的扇区设计出现!为了兼容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块地址(Logical Block Address, LBA)来处理。

GPT 将磁盘所有区块以此 LBA(预设为512bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从0 开始编号)。

也就是无论扇区是512bytes还是4K,限制GPT都是用LBA来规划(预设为512bytes),如果扇区也为512bytes,那么一个扇区就是一个LBA,如果是4K,那么一个扇区内就可以用很多个LBA。

与 MBR 仅使用第一个 512bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!
同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!详细的结构有点像底下的模样(注 1):

磁盘的分区,建立文件系统,挂载

磁盘的分区,建立文件系统,挂载
也就是说446bytes用来存开机管理程序,剩下66bytes来标识此分区为GPT分区。

磁盘的分区,建立文件系统,挂载
磁盘的分区,建立文件系统,挂载
什么意思,就是说扇区号码是用二进制来记载的,那么64bits就可以记载2的64方个扇区地址,而每个扇区可以存储512bytes,所以总共可以村下的内存是磁盘的分区,建立文件系统,挂载
好吧,上面讲的只是磁盘分区时能采取的两种不同方式。做个不洽当的类比,磁盘分区就像切正方形豆腐,而切豆腐也可以有多种方式,比如只能切成一整条一整条长方形的,只能切四五条比如MBR。或者说可以将大正方形切成很多很多小的正方形,比如说GPT。

然后切完的这些小豆腐块,就是你磁盘的分区,你就可以将其格式化,然后将其挂载。

那么讲完磁盘的分区的理论知识,来讲讲分区的实操。

都是很简单的指令。

观察

lsblk 列出所有存储装置

磁盘的分区,建立文件系统,挂载
blkid列出装置的UUID,文件系统等参数

磁盘的分区,建立文件系统,挂载
其实一般能列出来的,要已经格式化后的分区,或者说一个文件系统。

parted /dev/vda print
列出/dev/vda 磁盘的相关数据,包括分区表格式

磁盘的分区,建立文件系统,挂载

实际操作

上一篇:剑指 Offer 06. 从尾到头打印链表


下一篇:NO.14 2021/11/10(06:15) [周三]