linux:磁盘管理和文件系统

环境:

  • centos7.1
  • ubuntu21.10

参照:
《详解Linux虚拟系统下常用文件系统》
《Linux系统LVM逻辑卷工作原理,必看~》
《MBR与GPT》
《MBR与GPT:磁盘分区方式》
《MBR分区格式最大支持容量?》

1. 当我们有一个硬盘?

一般我们的笔记本或台式机上都会有一块硬盘,500G或1T大小。

那么,我们应该怎么使用这个硬盘呢?
最简单的方式:把它看做是一个大文件容器,我们直接从里面读写字节。
这种方式也可以,不过有几个大缺点:

  • 如果我们把磁盘整体当成一个文件容器,那么我们就不得不在其他地方存储里面的目录、文件大小、字节偏移量等信息;
  • 由于硬盘容量太大,如果我们把它当做一个整体管理,一旦里面某个字节发生了错误,很可能整个硬盘都不能用了,所以我们有必要将它划分成几个隔离的区域;
  • 还有,一般电脑开机后会去硬盘加载操作系统(linux或window),那么去硬盘的哪里去加载呢?

基于以上几点,我们发现不能简单的将一个硬盘当做一个大文件容器使用(一般来说)。
那么,怎么办呢?

  • 第一、按照某种规则,将硬盘划分成几个区域,区域之间互相隔离;
  • 第二、我们需要在硬盘上存一个特殊的东西以标记电脑开机后可以从这个硬盘上加载系统;
  • 第三、我们需要给每个分区上指定一种文件存储格式,比如:文件名字、目录层级、文件大小、字节偏移、权限属性等;

好了,基于上面几点,我们可以对这块硬盘改造了(基于 centos7.6):

  • 首先、使用mbr分区方式将硬盘(sda)分成4个区域,并命名为(sda1sda2sda3sda4)
    那么,mbr是怎么划分的呢?mbr分区是将硬盘的前512个字节拿出来,其中前 446 个字节存储程序代码(电脑启动后第一个执行的代码,446字节足矣),中间 64 字节存储分区表(4*16字节,最多允许4个分区),最后面 2 个字节是魔法数字(当它是 0x55AA的时候,表示电脑开机可以从这个硬盘加载系统);

    下图来自:https://mp.weixin.qq.com/s/LIsqRX51W7d_yw-HN-s2DA

    在这里插入图片描述

  • 然后、我们还需要对这些分区进行文件系统初始化,比如:我们可以将sda1初始化为 ext4 文件系统格式,将sda2初始化为xfs文件系统格式;
  • 最后、我们需要将这些分区挂载到linux上的目录树中,比如:我们将 sda1挂载到 /boot上,将sda2挂载到/上;

之后,我们就可以愉快的操作linux了(touch /demo.txt)。。。

2. 查看centos和ubuntu的实际情况

2.1 查看centos情况

使用lsblk命令列出块设备情况:
在这里插入图片描述
在这里插入图片描述

从上图我们可以读到:

  • 有两个块设备,sda和sr0,sda就是我们的硬盘,而sr0是CD;

    在这里插入图片描述

  • centos将硬盘sda分成sda1和sda2两个区,其中sda1这个区分了1G,并且初始化成 xfs文件系统,挂载到 /boot目录下,sda2初始化成LVM2_member文件系统(这是一种逻辑卷管理技术);
  • sda2又被划分成了两个区域,其中centos-root 分了17G并初始化成xfs 文件系统,挂载到/目录下,而centos-swap分了2G并初始化成swap文件系统,挂载到[swap]下;

    lvm是一种逻辑卷技术,可以划分一块分区或硬盘,也可以整合多块分区和多块硬盘到一个卷组(VG),最终在VG上分出多个逻辑卷(LV)供linux挂载使用。
    swap是一项内存管理技术,它的功能是:在内存不足时将不活跃的进程临时转移到硬盘上,以防止内存不够用。

2.2 查看ubuntu情况

还是使用 lsblk命令:

在这里插入图片描述
在这里插入图片描述

从上图我们可以读到:

  • 有两个块设备,sda和sr0,sda就是我们的硬盘,而sr0是CD;

    其他的 loop0-loop12是ubuntu的snap软件挂载的只读文件包,可参考:《什么是Snap应用?》

  • ubuntu将硬盘sda划分成了3个区域,sda1、sda2和sda3,其中sda1只分了1M并且没有初始化文件系统也没有挂载,而sda2分得513M并初始化为vfat文件系统挂载到/boot/efi下,最后sda3分得39.5G并初始化为ext4文件系统挂载到/目录下;

    注意:ubuntu21.10 使用的是GPT分区格式,不同于MBR分区格式,从下面的命令结果中可以看出:
    在这里插入图片描述
    在这里插入图片描述
    虽说是两个分区格式,但它们本质都是将硬盘隔离成不同的区域管理,关于 MBR 和 GPT 可以参考后面部分。

3. 当我们又有了一块新硬盘?

让我们在centos7.6下新添加一个2G的硬盘(可能需要重启),如下:
在这里插入图片描述
那么,此时我们准备怎么用呢?

3.1 将整个硬盘当做大文件容器使用

因为硬盘安装后,linux就自动挂载到了 /dev/sdb下,所以我们可以把它当做大文件容器读写,如下:
在这里插入图片描述
但一般我们不会这么干。。。

3.2 将整个硬盘初始化为文件系统格式 xfs

直接执行mkfs.xfs
在这里插入图片描述
可以看到,它已经被初始化为 xfs文件系统了,现在就让我们挂载上去吧:

3.3 将它挂载到linux目录上

在这里插入图片描述
可以看到,已经挂载上了。

3.4 验证挂载后能否正常使用

那挂载上后就要检查下是否能正常使用:
在这里插入图片描述
测试完成后,我们把它取消挂载:
在这里插入图片描述
我们可以看到,取消挂载后,便在 /mnt目录下看不到 demo.txt 文件了。

注意:取消挂载前,需要我们先退出对 /mnt的访问

3.5 重新挂载后观察demo.txt是否还存在?

在这里插入图片描述
可以看到,重新挂载后 demo.txt 又出现了。

3.6 将挂载配置写入到 /etc/fstab 里

上面我们实现的挂载,在机器重启后会失效,我们可以将 挂载的配置写入到 /etc/fstab 配置文件里:
在这里插入图片描述
这样,当我们重启后就会自动挂载了。

4. 当我们又有了一块新硬盘?

上面我们测试的是将整个硬盘当做一个大文件容器或者是整个磁盘做一个文件系统。但它们都不符合我们正常使用的套路,于是我们按照传统方式再实验一次:

4.1 新添加一块10G硬盘

在这里插入图片描述

4.2 按照mbr格式分区

我们使用 fdisk 将硬盘分区。
在分区前,我们可以先查看这个硬盘的分区情况:
在这里插入图片描述
可以看到,这个硬盘上没有任何分区。

执行 fdisk /dev/sdc
在这里插入图片描述
看上面的提示:“更改将停留在内存中”,说明一会我们需要将分区信息写入到硬盘中。

m看下帮助:
在这里插入图片描述

我们接着按n
在这里插入图片描述
这个提示让我们选择分区类型,熟悉MBR分区的会知道,MBR格式的分区表只有64字节,所以最多允许4个分区(称为主分区),但它显然是不够的,这个时候,我们可以将其中一个主分区当做扩展分区,然后在扩展分区内部再进行划分(称为逻辑分区),再进行分得话,规则就很灵活了,就没有4个主分区的限制了,不过扩展分区只能有一个
这里,我们直接选择扩展分区,输入e
在这里插入图片描述
经过几个提示操作,我们就将这个硬盘划分成一个逻辑分区。
输入p命令,列出已有的分区:
在这里插入图片描述
到了这里,我们还需要在这个扩展分区上划分出5个逻辑分区(为什么是5个?因为想对比mbr最多4个主分区的限制),继续输入 n
在这里插入图片描述
我们可以从提示上看出来,当前已有一个扩展分区,还可以再创建3个主分区,我们不能再创建扩展分区了,但是我们可以创建逻辑分区,让我们输入l
在这里插入图片描述
上图,我们新增了一个2G大小的逻辑分区,同样的操作,让我们创建另外四个逻辑分区(注意:最后一个逻辑分区我们可以使用默认大小,不必指定2G),完成后输入p打印分区表:
在这里插入图片描述

这样5个逻辑分区就完成了,下面,我们需要输入 w 以将MBR分区信息写入到磁盘:
在这里插入图片描述
可以看到,已经同步完了。

4.3 查看分区后的硬盘情况

在这里插入图片描述

4.4 将创建的分区进行文件系统格式化并挂载

依次执行下面命令即可:

mkfs.xfs /dev/sdc5
mkfs.xfs /dev/sdc6
mkfs.xfs /dev/sdc7
mkfs.xfs /dev/sdc8
mkfs.xfs /dev/sdc9

执行完成后,观察硬盘情况:
在这里插入图片描述
现在让我们把它们别挂载到 [mnt_sdc5, mnt_sdc9] 上:
在这里插入图片描述

4.5 测试挂载后的情况

简单测试下,其实和上面的把一整个硬盘都挂载上是一个效果:
在这里插入图片描述

4.6 将挂载的配置写入到 /etc/fstab 里

在这里插入图片描述
这样,当我们重启后,能自动挂载。

5. 文件系统

在上面的实验中,我们对硬盘整体或其下的分区初始化成xfs文件系统,那么

  • 为什么要初始化xfs文件系统呢?
  • 能不能初始化成不同的文件系统呢,比如1个xfs,2个ext4?
  • 如果说不同的硬盘分区使用不同的文件系统,那么我们可以跨文件系统拷贝、移动文件吗?

要理解上面的问题,我们就不得不说linux中的虚拟文件系统了(VFS)。

5.1 虚拟文件系统 VFS

在linux中一切外围设备皆文件,linux内部维护着一个虚拟的文件系统(VFS),对应着linux的目录树:

在这里插入图片描述
这颗树的节点可以挂载着不同的文件系统,如:

  • /mnt_sdc5节点挂载着一个xfs格式的硬盘分区;
  • /mnt_ext4:挂载着一个ext4格式的硬盘分区;
  • 等等。。。

尽管,不同的节点是以不同的文件系统管理的,但它们加载到了linux内部,都会映射到 VFS 上,这样,当我们在程序中读写、甚至跨设备拷贝文件时,便不再用考虑不同文件系统了。

5.2 常见文件系统

  • window系列文件系统

    FAT、FAT16、FAT32:早期window文件系统
    NTFS:window2000以后的现行文件系统

  • linux系列文件系统
    ext2、ext3、ext4、xfs、SWAP等
    如:

    • ubuntu21.10 使用 ext4作为外设文件系统
    • centos7.1使用xfs作为外设文件系统

6. 硬盘分区方式(MBR和GPT)

这里只做简单介绍,详细对比参考引用的文章链接。

6.1 MBR

MBR(Master Boot Record)主引导记录,相对古老的分区方式,自1982年创建,使用至今。
它是取硬盘的前512个字节记录 MBR 信息。
而这512个字节中,前446 字节存放主引导程序代码(一般放几个汇编命令,足够用),中间64个字节存放分区信息,最后2个字节是魔法数字(如果是:0x55AA 就表示,可以开机从这里加载操作系统)。

我们可以先观察下 centos7.6 的第一块硬盘:

在这里插入图片描述
你也可以看看自己linux的硬盘前512字节内容。

我们重点关注中间的64字节,这里面存储分区表信息,由于太短,所以只能记录4个主分区信息(4*16=64)。
而每个分区结构(16个字节)中又各有4个字节记录偏移量和扇区总量的,这就导致最大的偏移量不能超过 232各扇区、每个分区最大不超过232个扇区,又因为1个扇区有512字节,所以一般认为MBR分区支持最大2T的硬盘。

但其实,只要我们分区的时候控制好最后一个主分区的大小是2T,理论上MBR最大支持4T的硬盘。
但如果说能让我们随心所欲划分大小的话,那就是2T的硬盘了。

我们注意到,分区表里64个字节最多允许我们创建四个主分区,但一般我们也会创建5个或以上的分区,那怎么办呢?

其实上面的实验已经做出来了,这里再说明下:

我们将其中一个主分区拿出来当做扩展分区,然后在这个扩展分区内部做一个链式结构,这样每个节点就是一个逻辑分区,并且逻辑分区的多少理论上没有限制,这样就能解决问题了。

6.2 GPT

GPT(GUID partition table)全局唯一标识分区表,这个是新的分区格式,属于 UEFI 标准的一部分。

GPT本身兼容 MBR,功能要比MBR强大的多,分区数量上、硬盘容量上几乎没有限制。正因为如此,在GPT中没有扩展分区和逻辑分区的概念,所有的分区都是主分区。

通常来说,MBR和BIOS(MBR+BIOS)、GPT和UEFI(GPT+UEFI)是相辅相成的。这对于某些操作系统(例如 Windows)是强制性的,但是对于其他操作系统(例如 Linux)来说是可以选择的。

7. 磁盘阵列(raid)

7.1 概念

上面我们都是把硬盘拿来直接做分区挂载使用的,它有几个缺点:

  • 数据安全性不足,一旦硬盘坏掉,就直接宕机了,而且数据不见得能恢复过来;
  • 一块硬盘的读写性能毕竟有限;

正是基于以上原因,出现了磁盘阵列技术:磁盘阵列(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技术,进一步提高硬盘设备的读写速度。

7.2 实现方式

raid技术的实现有 硬件raid和软件raid。

  • 硬件raid就是使用阵列柜或阵列卡,只需要我们将多块硬盘插进去就行了,再看看说明书操作,即操作简单、性能又好,如果企业要做raid的话,一般就是硬件raid;
  • 软件raid是采用软件技术模拟的效果,一般学习其原理的时候使用;

看几个硬件的商品:
在这里插入图片描述

8. LVM技术

前面我们讨论的都是直接对硬盘进行的操作(raid技术也是最终提供“硬盘”),这就有个问题:当我们硬盘容量不够或分区不当需要扩容或调整分区大小时,我们需要关机使用其他专门软件处理,而且很容易破坏数据。

为了解决这个问题,出现了一种LVM(Logical volume Manager,逻辑卷管理的简称
)技术。它的原理是将原来的硬盘或硬盘分区进行重新的拆分、组装成一个VG(Volume Group,卷组),再在VG上划分出LV(逻辑卷)出来供系统使用,总之LVM是一种硬盘等存储设备的虚拟化管理技术。

9. 磁盘阵列(raid)+LVM

raid解决了磁盘的性能和安全性问题,LVM解决了动态扩容的问题,那么能否将两种技术结合呢?答案是可以的,比如:底层使用raid,上层做LVM。。。

猜你喜欢

转载自blog.csdn.net/u010476739/article/details/127185906