Linux学习笔记——1.磁盘与磁盘分区

1.磁盘与磁盘分区

命令篇

lsblk 列出所有存储装置
blkid 列出装置的UUID,文件系统等参数。
parted /dev/vda print 列出/dev/vda的分区参数以及分区格式
gdisk dev/vda 对dev/vda进行分区
==partprobe -s == 分区后进行更新

原理篇

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

磁盘概述

首先,我们必须明确,系统内的文件,数据甚至我们的操作系统,都是存储在在磁盘当中.磁盘是啥?下图那东西就是磁盘(严格说来只是磁盘的一个盘片),是用来存储数据的地方。

在这里插入图片描述

磁盘文件名

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

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

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

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

磁盘分区

分区的意义

使用磁盘时,我们一般都会对磁盘进行分区。就好像使用window系统时,我们也会分出C盘,D盘,E盘,F盘一样.这些盘是什么?这些盘就是所谓的分区.

为什么需要分区,总的来说分区可以更加方便地让我们管理.

首先,举个例子,我们可以把不同类型的文件放在不同的分区内,方便我们的查找与管理。想一下:如果你知道你的文件放在D盘,那么在D盘查找文件是否要比在整个电脑磁盘上查找文件快得多。

其次,倘如某个分区出错时,也只需要备份和恢复对应的分区即可,如果我们D盘出错了,我们可以把D盘的文件备份到其它盘,因为此时其它盘并不会受到D盘出错的影响。

分区的形式

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

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

MBR分区

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HWdcWrbL-1644493306176)(C:\Users\spaceman\AppData\Roaming\Typora\typora-user-images\image-20220210171433508.png)]

在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。

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

原本打算把LVM的内容放在这里,因为感觉LVM也算是一种分区方式。但后来想了一下,其实LVM是要建立在已经分完区之后,将我们的分区再去一顿操作一顿整合再去变成新的分区。所以并不能属于纯粹分区的范畴,而且内容过于冗长和劝退,所以还是放在文章的最后再去了解。

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

都是很简单的指令。

实操篇

分区查看

lsblk

lsblk 列出所有存储装置

在这里插入图片描述

blkid

blkid列出装置的UUID,文件系统等参数。

什么是 UUID 呢?UUID 是全局单一标识符 (universally unique identifier),Linux 会将系统内所有的装置都给予一个独一无二的标识符, 这个标识符就可以拿来作为挂载或者是使用这个装置/文件系统之用了。

在这里插入图片描述
其实一般能列出来的,要已经格式化后的分区,或者说一个文件系统。

parted

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

在这里插入图片描述

分区操作

gdisk 对GPT添加分区

GPT分区方式,用gdisk添加分区。

使用gdisk时,直接按下?就能够看到所有动作!
其中比较不一样的是『q 与 w』这两个玩意儿! 不管你进行了什么动作,只要离开 gdisk 时按下『q』,那么所有的动作『都不会生效!』相反的, 按下『w』就是动作生效的意思。

下面来尝试一下新增分区:(一定要注意,分区是对磁盘进行分区!!!,所以文件名一定是/dev/vda或/dev/vdb啥的,不能是/dev/vda1!)

在这里插入图片描述

注意图中三个圈:

圈1:必须先使用p指令查看原有的分区,可以看到已经该磁盘已经分了三个区,且要注意最后一个分区的end sector。

然后后面就点击n,然后就直接enter下去,因为系统会给你预设,比如预设第4号分区,预设从原有最后一个分区的end sector的下一个sector号码给新的分区。

然后最要注意的就是容量那里,千万不要enter,这里我们直接要分配多少容量,就自己+ 1G或者加自己想要的容量就行!!!

然后最后一点,就是让你给个System Code,也就是分区槽可能的文件系统,这里如果是swap分区就填8200,如果是LVM,也要填特殊的8e,其它的在看情况,一般就填Linux的8300.

此时,因为我们还在使用该磁盘,所以磁盘还不会更新分区表,所以我们需要使用partprobe -s来强制更新。

使用partprobe -s更新

我们也可以查看 /proc/partitions来查看核心的分区记录。

然后,删取分区也很简单,简单看下截图吧。删除图中第六号分区。

在这里插入图片描述

而fdisk的指令是对MBR分区表分区,操作和gdisk基本一致。

当然,也可以使用parted命令分区,此命令对于GPT和MBR都有效。不仅如此,它还支持可以将MBR分区变为GPT分区或反过来。是个很好用的命令。

分区步骤总结

总结一下,其实进行磁盘分区的步骤很简单。

1.使用lsblk查看要可以进行分区的磁盘

2.可以使用parted查看该磁盘的分区形式,是GPT还是MBR

3.使用gdisk或者fdisk实际对磁盘进行分区。

4.partprobe -s 更新。

LVM

LVM 理论

LVM是什么?

LVM做逻辑滚动条管理员 (Logical Volume Manager).它的重点在于于『可以弹性的调整 filesystem 的容量!』

这么说,一个磁盘我们划分为很多个分区,然后不同的分区格式化为不同的文件系统,挂载在不同的目录上。然后比如现在发现分区1的容量太小了,也就是说它挂载的目录放了太多东西下去。而分区2的容量还很多,这个时候怎么办?好像我们也没办法将分区2的容量迁移到分区1中,真是让人头大.

而LVM就是来解决这个问题的!

LVM 可以整合多个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁盘一样!而且,还可以在未来新增或移除其他的实体 partition 到这个 LVM 管理的磁盘当中。

所以,说白了,LVM其实不是针对于磁盘,也不是针对于文件系统的,它是针对分区的.就是要有LVM的前提,是磁盘已经有实际的分区。然后LVM再去将这些分区一顿操作,变成LVM。

那么想一想,分区?我们要在哪里能够设置分区的格式,或者说设置不同分区的标准,让它能支持lVM呢?

想起来没,就是在我们用gdisk或者fdish时,系统会问我们该分区的System ID,而将分区设置为LVM,就是在这里设置.也就是将system ID 设置为8E00,此时就能检测到为[Linux LVM].

在这里插入图片描述

就是图中的圈3这里。设置Code为8e,就能支持LVM格式。

好了,明白了LVM是针对于分区,和如果设置分区为LVM后,就可以深入了解LVM的知识了.

什么是 LVM: PV, PE, VG, LV 的意义

LVM 的作法是将几个实体的partitions (或 disk) 透过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分区成为可用分区槽 (LV), 最终就能够挂载使用了。但是为什么这样的系统可以进行 filesystem 的扩充或缩小呢?其实与一个称为 PE 的项目有关! 底下我们就得要针对这几个项目来好好聊聊!

我将LVM的整个过程做了一个不那么恰当的类比:

假设我们现在手头有好多不同金属棒,银棒,铁棒,不锈钢棒……这些棒彼此之间没有关系,多长就是多长。谁太长了,谁太短了,都没办法,一个棒没法将其多余的部分给另一个棒。

然后我们现在有一个技术,可以将所有不同的金属板变成钢棒,然后将所有的钢棒合在一起形成一条(我们称之为)金箍棒好了。

这条金箍棒的长度就是所有钢棒的总长.如果我们觉得金箍棒不够长,就可以拿更多的钢棒进来将其融进金箍棒中,金箍棒就会变长。

而金箍棒有个功能,它可以切割为很多很多的小金棒,或者说这个金箍棒变成由很多小金棒组成。而我们就能拿里面的几个小金棒组成我们之间的专属棒。而如果我们的专属棒太短了,只要金箍棒还有剩余的小金棒,就可以将它的小金棒给我们补充.

好了,对应上面的故事。

PV,PE,VG,LV

  • Physical Volume, PV, 实体滚动条

所谓的PV也就是我们的钢棒.而分区就是我们不同的金属棒.我们要将不同金属棒变成相同的钢棒格式,也就是要将分区partition调整 system ID成为8e,变成相同的格式PV,实体滚动条。

  • Volume Group, VG, 滚动条群组

然后我们将很多钢棒合成金箍棒.对应的就是将很多的PV合成一个VG.这个VG就是LVM组合起来的大磁盘。

  • Physical Extent, PE, 实体范围区块

这个就是我们故事中的小金棒,LVM预设使用4MB的PE区块.而LVM的LV在32位系统上最多仅能含有65534个PE.PE是LVM最小的存储区块,类似于文件系统里面block的大小.

  • Logical Volume, LV, 逻辑滚动条

最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区槽的咚咚了!这个就是我们故事中每个人用小金帮组合而成的属于之间的专属棒. LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便用户利用 LVM 来管理其系统,因此 LV 的装置文件名通常指定为『 /dev/vgname/lvname 』的样式!

此外,我们刚刚有谈到 LVM 可弹性的变更 filesystem 的容量,那是如何办到的?其实他就是透过『交换 PE 』来进行数据转换, 将原本 LV 内的 PE 移转到其他装置中以降低 LV 容量,或
将其他装置的 PE 加到此 LV 中以加大容量! VG、LV 与 PE 的关系有点像下图:

在这里插入图片描述
如上图所示,VG 内的 PE 会分给虚线部分的 LV,如果未来这个 VG 要扩充的话,加上其他的PV 即可。而最重要的 LV 如果要扩充的话,也是透过加入 VG 内没有使用到的 PE 来扩充的!

好了,理解清楚上面的各个区代表的含义之后,对于整体的步骤也有个大概率吧,

  • 首先,将分区变为PV,然后用很多PV组成VG。

  • 然后从VG分出LV出来,这个LV就是我们可以重新用来格式化的东西.。

    在这里插入图片描述
    从下到上的顺序

    在这里插入图片描述
    当然,主要是线性模式.

    LVM实际操作

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

分区格式化为LVM格式,使用pscreate将其变成PV

在这里插入图片描述

将PV合成VG

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

用PV增加VG的量

在这里插入图片描述

使用lvcreate将VG分割为LV

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

将LV格式化并挂载

在这里插入图片描述

LVM的放大功能

当然,前面讲的这些都是基础操作.忘了我们使用LVM的初衷是啥了吧?是想放大文件系统的容量,那么如何操作呢?下面就来讲讲咧.

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

先检查vg里是否还有容量可以给lv增加
在这里插入图片描述

直接看最后的的Free PE 那里,是否足够.
足够的话,就进行下一步骤.放大LV.

使用lvresize来增加

在这里插入图片描述

检查一下:

在这里插入图片描述

但是我们发现,只是将LV放大了,实际的文件系统并没有放大,于是我们要给文件系统放大.

xfs使用xfs_growfs将文件系统放大

在这里插入图片描述

check it
在这里插入图片描述
当然,LVM还有一个自动调整磁盘使用率和快照的功能,有兴趣的区看看书.

LVM相关指令汇整与LVM的关闭

在这里插入图片描述

至于文件系统阶段 (filesystem 的格式化处理) 部分,还需要以 xfs_growfs 来修订文件系统实际的大小才行啊!_ 。至于虽然 LVM 可以弹性的管理你的磁盘容量,但是要注意,如果你想要使用 LVM 管理您的硬盘时,那么在安装的时候就得要做好 LVM 的规划了, 否则未来还是需要先以传统的磁 盘增加方式来增加后,移动数据后,才能够进行 LVM 的使用啊!

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

结尾

好的,讲完磁盘的分区,相信我们现在也已经会给磁盘分区了吧。

但是,给磁盘分区只是第一步,我们只是将磁盘分为不同的区域来方便我们在这些区域建立文件,存储数据。但是我们如何将数据存储到这些硬盘中的区域(分区),系统如何管理我们建立的文件?我们文件建立的数据放在哪?属性又放在哪?这些都是文件系统考虑的事。

所以学完了分区,现在让我们马不停蹄地去看往文件系统的知识吧。

参考资料:《鸟哥的Linux私房菜》

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值