环境:
- centos7.1
- ubuntu21.10
参照:
《详解Linux虚拟系统下常用文件系统》
《Linux系统LVM逻辑卷工作原理,必看~》
《MBR与GPT》
《MBR与GPT:磁盘分区方式》
《MBR分区格式最大支持容量?》
一般我们的笔记本或台式机上都会有一块硬盘,500G或1T大小。
那么,我们应该怎么使用这个硬盘呢?
最简单的方式:把它看做是一个大文件容器,我们直接从里面读写字节。
这种方式也可以,不过有几个大缺点:
- 如果我们把磁盘整体当成一个文件容器,那么我们就不得不在其他地方存储里面的目录、文件大小、字节偏移量等信息;
- 由于硬盘容量太大,如果我们把它当做一个整体管理,一旦里面某个字节发生了错误,很可能整个硬盘都不能用了,所以我们有必要将它划分成几个隔离的区域;
- 还有,一般电脑开机后会去硬盘加载操作系统(linux或window),那么去硬盘的哪里去加载呢?
基于以上几点,我们发现不能简单的将一个硬盘当做一个大文件容器使用(一般来说)。
那么,怎么办呢?
- 第一、按照某种规则,将硬盘划分成几个区域,区域之间互相隔离;
- 第二、我们需要在硬盘上存一个特殊的东西以标记电脑开机后可以从这个硬盘上加载系统;
- 第三、我们需要给每个分区上指定一种文件存储格式,比如:文件名字、目录层级、文件大小、字节偏移、权限属性等;
好了,基于上面几点,我们可以对这块硬盘改造了(基于 centos7.6):
- 首先、使用mbr分区方式将硬盘()分成4个区域,并命名为(、、、)
那么,mbr是怎么划分的呢?mbr分区是将硬盘的前512个字节拿出来,其中前 446 个字节存储程序代码(电脑启动后第一个执行的代码,446字节足矣),中间 64 字节存储分区表(4*16字节,最多允许4个分区),最后面 2 个字节是魔法数字(当它是 0x55AA的时候,表示电脑开机可以从这个硬盘加载系统);下图来自:https://mp.weixin.qq.com/s/LIsqRX51W7d_yw-HN-s2DA
- 然后、我们还需要对这些分区进行文件系统初始化,比如:我们可以将sda1初始化为 文件系统格式,将sda2初始化为文件系统格式;
- 最后、我们需要将这些分区挂载到linux上的目录树中,比如:我们将 sda1挂载到 上,将sda2挂载到上;
之后,我们就可以愉快的操作linux了()。。。
从上图我们可以读到:
- 有两个块设备,sda和sr0,sda就是我们的硬盘,而sr0是CD;
- centos将硬盘sda分成sda1和sda2两个区,其中sda1这个区分了1G,并且初始化成 文件系统,挂载到 目录下,sda2初始化成文件系统(这是一种逻辑卷管理技术);
- sda2又被划分成了两个区域,其中centos-root 分了17G并初始化成 文件系统,挂载到目录下,而centos-swap分了2G并初始化成文件系统,挂载到下;
lvm是一种逻辑卷技术,可以划分一块分区或硬盘,也可以整合多块分区和多块硬盘到一个卷组(VG),最终在VG上分出多个逻辑卷(LV)供linux挂载使用。
swap是一项内存管理技术,它的功能是:在内存不足时将不活跃的进程临时转移到硬盘上,以防止内存不够用。
还是使用 命令:
从上图我们可以读到:
-
有两个块设备,sda和sr0,sda就是我们的硬盘,而sr0是CD;
其他的 loop0-loop12是ubuntu的snap软件挂载的只读文件包,可参考:《什么是Snap应用?》
-
ubuntu将硬盘sda划分成了3个区域,sda1、sda2和sda3,其中sda1只分了1M并且没有初始化文件系统也没有挂载,而sda2分得513M并初始化为文件系统挂载到下,最后sda3分得39.5G并初始化为文件系统挂载到目录下;
注意:取消挂载前,需要我们先退出对 /mnt的访问
上面我们测试的是将整个硬盘当做一个大文件容器或者是整个磁盘做一个文件系统。但它们都不符合我们正常使用的套路,于是我们按照传统方式再实验一次:
依次执行下面命令即可:
在上面的实验中,我们对硬盘整体或其下的分区初始化成xfs文件系统,那么
- 为什么要初始化xfs文件系统呢?
- 能不能初始化成不同的文件系统呢,比如1个xfs,2个ext4?
- 如果说不同的硬盘分区使用不同的文件系统,那么我们可以跨文件系统拷贝、移动文件吗?
要理解上面的问题,我们就不得不说linux中的虚拟文件系统了(VFS)。
在linux中一切外围设备皆文件,linux内部维护着一个虚拟的文件系统(VFS),对应着linux的目录树:
- 节点挂载着一个xfs格式的硬盘分区;
- :挂载着一个ext4格式的硬盘分区;
- 等等。。。
尽管,不同的节点是以不同的文件系统管理的,但它们加载到了linux内部,都会映射到 VFS 上,这样,当我们在程序中读写、甚至跨设备拷贝文件时,便不再用考虑不同文件系统了。
-
window系列文件系统
FAT、FAT16、FAT32:早期window文件系统
NTFS:window2000以后的现行文件系统 -
linux系列文件系统
ext2、ext3、ext4、xfs、SWAP等
如:- ubuntu21.10 使用 ext4作为外设文件系统
- centos7.1使用xfs作为外设文件系统
这里只做简单介绍,详细对比参考引用的文章链接。
MBR(Master Boot Record)主引导记录,相对古老的分区方式,自1982年创建,使用至今。
它是取硬盘的前512个字节记录 MBR 信息。
而这512个字节中,前446 字节存放主引导程序代码(一般放几个汇编命令,足够用),中间64个字节存放分区信息,最后2个字节是魔法数字(如果是:0x55AA 就表示,可以开机从这里加载操作系统)。
我们可以先观察下 centos7.6 的第一块硬盘:
我们重点关注中间的64字节,这里面存储分区表信息,由于太短,所以只能记录4个信息(4*16=64)。
而每个分区结构(16个字节)中又各有4个字节记录偏移量和扇区总量的,这就导致最大的偏移量不能超过 232各扇区、每个分区最大不超过232个扇区,又因为1个扇区有512字节,所以一般认为MBR分区支持最大2T的硬盘。
但其实,只要我们分区的时候控制好最后一个主分区的大小是2T,理论上MBR最大支持4T的硬盘。
但如果说能让我们随心所欲划分大小的话,那就是2T的硬盘了。
我们注意到,分区表里64个字节最多允许我们创建四个主分区,但一般我们也会创建5个或以上的分区,那怎么办呢?
其实上面的实验已经做出来了,这里再说明下:
我们将其中一个主分区拿出来当做扩展分区,然后在这个扩展分区内部做一个链式结构,这样每个节点就是一个逻辑分区,并且逻辑分区的多少理论上没有限制,这样就能解决问题了。
GPT(GUID partition table)全局唯一标识分区表,这个是新的分区格式,属于 UEFI 标准的一部分。
GPT本身兼容 MBR,功能要比MBR强大的多,分区数量上、硬盘容量上几乎没有限制。正因为如此,在GPT中没有扩展分区和逻辑分区的概念,所有的分区都是主分区。
通常来说,MBR和BIOS(MBR+BIOS)、GPT和UEFI(GPT+UEFI)是相辅相成的。这对于某些操作系统(例如 Windows)是强制性的,但是对于其他操作系统(例如 Linux)来说是可以选择的。
上面我们都是把硬盘拿来直接做分区挂载使用的,它有几个缺点:
- 数据安全性不足,一旦硬盘坏掉,就直接宕机了,而且数据不见得能恢复过来;
- 一块硬盘的读写性能毕竟有限;
正是基于以上原因,出现了磁盘阵列技术:磁盘阵列(Redundant Arrays of Independent Disks,RAID)。
raid能将多个磁盘组装成一组,同时对外提供服务,即提高了读写性能,又提高了数据安全性。
常见的raid级别有:
-
raid0
将2或多块磁盘组成一个磁盘组,当数据写入时,会被均匀的写入到不同磁盘。它的特点是- 极大的提高读写性能(组内磁盘数越高,性能越高);
- 增加了数据的不安全性(组内磁盘数越高,数据越不安全);
- 磁盘空间无浪费;
-
raid1
将2或多块磁盘组成一个磁盘组,当数据写入时,会同时写入到组内各个磁盘。它的特点是- 极大的提高了数据的安全性,一块硬盘坏掉完全不影响(组内磁盘数越高,安全性越好);
- 对读写性能无影响;
- 磁盘存储空间浪费严重(组内磁盘数越高,空间浪费越严重);
-
raid5
至少3块磁盘组成一个磁盘组,当写入数据时,会同时写入数据本身以及数据的异或运算结果,并将它们均匀的写入到不同的硬盘,被广泛的应用,它的特点是- 兼顾数据安全性和磁盘空间(相比raid0和raid1);
- 对读写性能几无影响;
-
raid10
这个是raid0+raid1技术的组合,比如:有4块硬盘,先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性,然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。
raid技术的实现有 硬件raid和软件raid。
- 硬件raid就是使用阵列柜或阵列卡,只需要我们将多块硬盘插进去就行了,再看看说明书操作,即操作简单、性能又好,如果企业要做raid的话,一般就是硬件raid;
- 软件raid是采用软件技术模拟的效果,一般学习其原理的时候使用;
前面我们讨论的都是直接对硬盘进行的操作(raid技术也是最终提供“硬盘”),这就有个问题:当我们硬盘容量不够或分区不当需要扩容或调整分区大小时,我们需要关机使用其他专门软件处理,而且很容易破坏数据。
为了解决这个问题,出现了一种LVM(Logical volume Manager,逻辑卷管理的简称
)技术。它的原理是将原来的硬盘或硬盘分区进行重新的拆分、组装成一个VG(Volume Group,卷组),再在VG上划分出LV(逻辑卷)出来供系统使用,总之LVM是一种硬盘等存储设备的虚拟化管理技术。