sblk 列出所有存储装置
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分区吧。
早期的分区是磁柱为基本单位,磁柱是什么呢?这么说,磁盘其实是由很多个磁片组成的,而每个磁片上都有很多个同心圆轨道,那么所有磁片的同一个同心圆轨道合起来就为一个磁柱。
磁盘实际在存储数据时,会先对一个扇区操作,然后对同一个磁柱的下一个磁片操作,直到所有磁片存取完再去下一个扇区,然后同一磁道上所有扇区都取完再去下一磁道。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HWdcWrbL-1644493306176)(C:\Users\spaceman\AppData\Roaming\Typora\typora-user-images\image-20220210171433508.png)]
在MBR分区中,开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区,这个扇区通常是 512bytes 的大小 (旧的磁盘扇区都是 512bytes 喔!)。
而因为分区表仅有64字节,而一组记录需要16字节,所以只能记录4组记录去。每组记录区记录了该区段的起始与结束的磁柱号码。
但是,我们实际上是不止能分出四个分区槽的。可能还能分成十个以上。那就是利用延伸分区来处理。延伸分区的想法是: 既然第一个扇区所在的分区表只能记录四笔数据, 那我可否利用额外的扇区来记录更多的分区信息?实际上图示有点像底下这样:
也就是说,MBR会分一个延伸分区,而这个延伸分区的第一个扇区就也可以记录分区表,然后从延伸分区分出很多个逻辑分区来。
但是MBR有个致命的缺陷,就是没法直接2T以上的磁盘。所以为了支持2T以上的磁盘,我们不得不求助于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 列出所有存储装置
blkid列出装置的UUID,文件系统等参数。
什么是 UUID 呢?UUID 是全局单一标识符 (universally unique identifier),Linux 会将系统内所有的装置都给予一个独一无二的标识符, 这个标识符就可以拿来作为挂载或者是使用这个装置/文件系统之用了。
其实一般能列出来的,要已经格式化后的分区,或者说一个文件系统。
parted /dev/vda print
列出/dev/vda 磁盘的相关数据,包括分区表格式
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来强制更新。
我们也可以查看 /proc/partitions来查看核心的分区记录。
然后,删取分区也很简单,简单看下截图吧。删除图中第六号分区。
而fdisk的指令是对MBR分区表分区,操作和gdisk基本一致。
当然,也可以使用parted命令分区,此命令对于GPT和MBR都有效。不仅如此,它还支持可以将MBR分区变为GPT分区或反过来。是个很好用的命令。
总结一下,其实进行磁盘分区的步骤很简单。
1.使用lsblk查看要可以进行分区的磁盘
2.可以使用parted查看该磁盘的分区形式,是GPT还是MBR
3.使用gdisk或者fdisk实际对磁盘进行分区。
4.partprobe -s 更新。
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 的作法是将几个实体的partitions (或 disk) 透过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分区成为可用分区槽 (LV), 最终就能够挂载使用了。但是为什么这样的系统可以进行 filesystem 的扩充或缩小呢?其实与一个称为 PE 的项目有关! 底下我们就得要针对这几个项目来好好聊聊!
我将LVM的整个过程做了一个不那么恰当的类比:
假设我们现在手头有好多不同金属棒,银棒,铁棒,不锈钢棒……这些棒彼此之间没有关系,多长就是多长。谁太长了,谁太短了,都没办法,一个棒没法将其多余的部分给另一个棒。
然后我们现在有一个技术,可以将所有不同的金属板变成钢棒,然后将所有的钢棒合在一起形成一条(我们称之为)金箍棒好了。
这条金箍棒的长度就是所有钢棒的总长.如果我们觉得金箍棒不够长,就可以拿更多的钢棒进来将其融进金箍棒中,金箍棒就会变长。
而金箍棒有个功能,它可以切割为很多很多的小金棒,或者说这个金箍棒变成由很多小金棒组成。而我们就能拿里面的几个小金棒组成我们之间的专属棒。而如果我们的专属棒太短了,只要金箍棒还有剩余的小金棒,就可以将它的小金棒给我们补充.
好了,对应上面的故事。
所谓的PV也就是我们的钢棒.而分区就是我们不同的金属棒.我们要将不同金属棒变成相同的钢棒格式,也就是要将分区partition调整 system ID成为8e,变成相同的格式PV,实体滚动条。
然后我们将很多钢棒合成金箍棒.对应的就是将很多的PV合成一个VG.这个VG就是LVM组合起来的大磁盘。
这个就是我们故事中的小金棒,LVM预设使用4MB的PE区块.而LVM的LV在32位系统上最多仅能含有65534个PE.PE是LVM最小的存储区块,类似于文件系统里面block的大小.
最终的 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 来扩充的!
好了,理解清楚上面的各个区代表的含义之后,对于整体的步骤也有个大概率吧,
当然,前面讲的这些都是基础操作.忘了我们使用LVM的初衷是啥了吧?是想放大文件系统的容量,那么如何操作呢?下面就来讲讲咧.
直接看最后的的Free PE 那里,是否足够.
足够的话,就进行下一步骤.放大LV.
检查一下:
但是我们发现,只是将LV放大了,实际的文件系统并没有放大,于是我们要给文件系统放大.
check it
当然,LVM还有一个自动调整磁盘使用率和快照的功能,有兴趣的区看看书.
LVM相关指令汇整与LVM的关闭
至于文件系统阶段 (filesystem 的格式化处理) 部分,还需要以 xfs_growfs 来修订文件系统实际的大小才行啊!_ 。至于虽然 LVM 可以弹性的管理你的磁盘容量,但是要注意,如果你想要使用 LVM 管理您的硬盘时,那么在安装的时候就得要做好 LVM 的规划了, 否则未来还是需要先以传统的磁 盘增加方式来增加后,移动数据后,才能够进行 LVM 的使用啊!
好的,讲完磁盘的分区,相信我们现在也已经会给磁盘分区了吧。
但是,给磁盘分区只是第一步,我们只是将磁盘分为不同的区域来方便我们在这些区域建立文件,存储数据。但是我们如何将数据存储到这些硬盘中的区域(分区),系统如何管理我们建立的文件?我们文件建立的数据放在哪?属性又放在哪?这些都是文件系统考虑的事。
所以学完了分区,现在让我们马不停蹄地去看往文件系统的知识吧。
参考资料:《鸟哥的Linux私房菜》