Linux内核之磁盘和分区

参考链接:
https://www.dell.com/community/数据存储和保护-资料文档/AIX主机逻辑卷管理器-LVM-概念详解-卷组-物理-逻辑卷-分区/ta-p/7183538
 
一: 磁盘
首先磁盘我们都知道,是真正的用来存储数据的,当然帮我们往里面写的软件就是磁盘驱动了
但是,磁盘写了擦擦了写,就会诞生很多不连续的物理空间,
于是,诞生了逻辑分区,即在逻辑层面模拟了磁盘分区,划分的单位称为逻辑卷,即一个逻辑上连续的逻辑卷可能地下连着多个不连续的物理空间
          为了描述实现这种映射,于是诞生了物理卷等的概念,所以说所谓"物理"是相对于"逻辑"而言,其实是先有逻辑卷后有物理卷
          此时帮上层应用往逻辑卷中写数据的就是"逻辑卷驱动"了
从底层向上层,一层层来阐述吧
一. 硬件1:磁盘的组成原理
磁盘: 由很多个盘片组成的柱状设备,其他器件比如主轴,控制器,磁头等协作工作将数据写到磁盘中。
 

参考链接: https://mp.weixin.qq.com/s?src=11&timestamp=1591758659&ver=2391&signature=O9LSbW4ID2jVfPIcd3RLiBMfKnS-L*19FBttwHx0laKOuYe4gqnJQUK7H8jNvGY4*Wx08F8KYdjkkj-DZNhbvugrrV6lwHpMpl1bdpnvDLvTMWhoc2fchuRqllZFMQ0i&new=1

platter:盘片
head:磁头,每个盘片一般有上下两面,分别对应1个磁头,共2个磁头
            wxy: 难道还存在有3个磁头的?
track:磁道,是从盘片外圈往内圈编号0磁道,1磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据
            wxy: 其作用貌似就是用于划分的,即我就是分"圈圈"维度的分割符
cylinder:柱面/磁柱,圆柱体被磁道划分后得到的就是一个个cylinder,一个磁盘具有cylinder数等同track的数量
           wxy: 我的理解称为磁柱更合适,因为无论是从其英文的含义还是划分方式,都可以看做是一个空心的水桶,
                   磁盘是多个水桶套水桶,当然水桶也是有厚度的,这就跟扇区有关系了,下面会说。
                   另外,为了理解的方便往往称之为"圈",即内外圈....
sector:扇区, 每个磁道都被切分成很多扇形区域,每道的扇区数量相同。
             wxy: 查了一些资料,sector即扇区确实是指每个磁柱的横截面上被切分的小区域,切分者是半径,
                    所以这里其实还隐藏一个新的概念: 扇面, 顾名思义就是指横截面被半径切分得到的像蛋糕一样的一个"小面",称为"扇面"
                    track 和 扇面的结合就得到了 sector
扇区的大小: 每一个扇区可存储的字节数据,一般为512B,扇区为数据存储的最小单元。
                   之前,外圈的扇区面积比内圈的大,但是因为使用的磁物质密度不同,所以内外圈(即内外cylinder)上的扇区大小都相同。
                   现在,内外圈已经采用相同密度物质来存储数据,但是内外圈扇区数量不同
                              wxy: 内外圈大小不同,划分数量又不同,就表示有可能每个扇区大小相同
   
综上所述:
磁盘的容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数。
                   =有几面(比如一般都是2面)   × 从圆心向外一共有多少层  ×  每一层有多少个小扇面单元   ×  每一个单元中有多少字节

二. 分区
       硬件是死的,想要能用起来就需要驱动,操作系统这些软件的操作,于是从安装系统开始来讲讲到底是怎么使用这一坨"死的"存储设备
所以接下来的概念,就有软件层面的元素注入了。
 

0. windows的分区

首先,一块物理硬盘是没有什么分区的概念的,但是为了众所周知的原因需要分成一块一块分区,如何分呢?谁来分呢?

在装机(安装操作系统)之前就需要利用单独的软件为其分区,然后将分区的信息保存在主引导记录(Master Boot Record,MBR)中,

之后开始安装系统,相当于将操作系统程序放到一个分区中,然后将启动程序(用来启动操作系统的启动程序)也放到MBR中

所以,MBR:这是一块存在于磁盘驱动器开始部分的一个特殊的启动扇区,正如上面所说的,MBR有两个作用:记录分区情况和启动程序

最后,再回到分区,有以下几个特性

1, 分区只能分成主分区和扩展分区,其实就是只能划分出来一个或几个主分区,剩下的就叫做扩展分区。所以之有主分区才是真正官方圈出的地盘,也才是可以安装操作系统的

2,主分区最多有4个,因为MBR中只能容纳4条记录

3,扩展分区里可以再在操作系统层面进行划分成若干逻辑分区

4,当然分区后还是不能直接安装操作系统的,和Linux一样要格式化,也就是安装文件系统。

5,一般我们的划分都是一个主分区(第一分区),有了操作系统后就是C盘,然后操作系统会 在剩下的扩展分区中划分出DEF...盘符

     分区是硬件,盘符是操作系统即软件层面的东西,所谓分配盘符,就相当于挂载......

6,据说现在使用机械硬盘,所以没有划分分区的必要了,具体也没有深究....

 
 
1. Linux的分区
       硬盘为什么要分区,这就像整理房间一样,东西都要分门别类,所以我们就提前规划好这一区域做什么那一区域做什么,而在这里"区域"就是"分区"
学院派说: 数据安全和性能考虑? 哈哈哈哈哈哈.....
另外,分配单元是cylinder?,每一个分区都是连续的cylinder组成。
 
第一部分: 主引导记录分区
称为第1分区,占用刚好1个扇区,硬盘的重要信息都在这一分区中,包含三部分
1)MBR(Master Boot Record)区:
规定专门用来存放开机引导程序,占用446byte,因为主机上电后首先就是从这里读取数据,这样才能进行操作系统的启动。
2)DPT(Disk Partition table)区:
硬盘分区表,记录硬盘上的分区元信息,占用64byte,每条分区记录占用16字节,所以一块磁盘最多只能分4个。那么我们首先来看看是如何进行分区的。
3)特殊标记
用2个字节存放一个固定值:0x55AA,用来标识这个是第一分区
wxy:前面说分区的单元是cylinder,那么这个分区只占用了一个扇区,剩余的扇区呢?
 
第二部分: 数据分区们
主要用来存放数据,分为2类分区: 主分区 和 逻辑分区
为什么这么划分,那是为了能够不受只能分4区所限。
试想一下,如果一块磁盘就划分成4个分区,那么如果一旦我又插入一个磁盘,我该将他分到哪里了?你又不能去变更划分好的分区吧(wxy:为什么不能)
所以,我就搞了一个扩展分区,类似于二级指针这种,可以在这个分区里可以进一步划分,即逻辑分区
附: 用来存放诗句的分区单元我们称之为"基本分区",每一个基本分区分为:引导扇区 和 数据扇区
主分区(Primary Partion):就是普通用于存放数据的分区,主分区就是"基本分区",分区的元信息被记录在DPT。这块分区直接就可以使用。
扩展分区(Extension Partion):  需要再划分得到逻辑分区才能使用,每一个逻辑分区都是好比一个带分区磁盘,麻雀虽小五脏俱全,所以每一个逻辑分区也包含两部分:
                 1) 扩展引导记录,类似于DPT,只不过不用包含MBR,就只有扩展分区表和0x55AA结束符
                 2) 扩展基本分区/逻辑分区(Logical Partion):也是两部分,引导扇区和数据扇区
                     为了实现逻辑分区的划分,每个逻辑分区都需要软件层面的支持即"逻辑驱动器"
 
小小结:
主引导记录分区
数据分区  ---   主分区(1 - 4号分区)
       扩展分区(2 -  4号分区) ----   扩展引导记录区
                                       逻辑分区 ( > 5号分区)  -----   引导扇区
                                    数据扇区
总结几个要点:
  • 1 - 4号都是给主分区和扩展分区用的,5号之后才是给逻辑分区使用;
  • 主分区是实实在在的分区,而扩展分区类似是指针的存在,其指向的下一级才是真正代表存储介质的分区;
  • 主分区可以有多个,但是扩展分区要么没有(都是主分区),  要么只有一个(用来指向下一级)
 
3. Linux磁盘分区命名及分区示例
1). 磁盘设备的命名
   (1)  IDE磁盘为hdx,  其中x取值a ~ d,即hda,hdb, hdc,hdd,    因为IDE磁盘最多四个;
   (2)  SCSI,SATA,USB磁盘为sdx, 其中x取值为a ~ z, 即sda,sdb,sdc,sdd,sde,...sdz, 也就是说最多可以有26个磁盘
 
 2) 分区的命名
     hda1 - 4
     sdb1 - 4
# fdisk -l      ---查看所有磁盘,以及磁盘的分区情况

磁盘 /dev/sda:1000.2 GB, 1000204886016 字节,1953525168 个扇区    -----第一个磁盘:/dev/sda, 1000G的硬盘
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:dos
磁盘标识符:0x000809ff

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   104859647    52428800   83  Linux   ----这个磁盘的主分区
/dev/sda2       104859648  1953523711   924332032   8e  Linux LVM  ---id 为8e,代表是逻辑卷,LVM

磁盘 /dev/mapper/cl-root:53.7 GB, 53687091200 字节,104857600 个扇区    -----第二个磁盘: 53.7G
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节


磁盘 /dev/mapper/cl-swap:34.4 GB, 34359738368 字节,67108864 个扇区     ------第三个磁盘
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节


磁盘 /dev/mapper/cl-home:858.5 GB, 858464976896 字节,1676689408 个扇区    ------第四个磁盘
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节

3. 分区格式化与挂载

物理磁盘分区好之后,如下想要真正被使用,还需要进行格式化,即安装上文件系统,从软件层面将硬件纳入到软件层面的管理中来

详细的原理参见另一篇博文

https://www.cnblogs.com/shuiguizi/p/12100859.html

 
三:逻辑卷/物理卷的概念
 
1. 为什么使用卷
  • 为了解决分区空间不够用或者分区空间绰绰有余的情况.
  • 解决基本磁盘分区的边界是不能随意扩展的问题,分区大小是在刚刚划分分区的时候就决定了。
         LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样可以减少操作成本.
LVM与直接使用物理存储相比,有以下优点:
1. 灵活的容量.
当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷.
2.可伸缩的存储池.
你可以使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备.
3.在线的数据再分配.
你可以在线移动数据,数据可以在磁盘在线的情况下重新分配.比如,你可以在线更换可热插拔的磁盘.
4. 方便的设备命名
逻辑卷可以按你觉得方便的方式来起任何名称.
5.磁盘条块化.
你可以生成一个逻辑盘,它的数据可以被条块化存储在2个或更多的磁盘上.这样可以明显提升数据吞吐量.
6.镜像卷
逻辑卷提供方便的方法来镜像你的数据.
7.卷快照
使用逻辑卷,你可以获得设备快照用来一致性备份或者测试数据更新效果而不影响真实数据.
 
wxy: 即分区在使用一段时间后碎片化了无法使用连续的空间,另外看来前面想的是对的,果然划分完了就不能再划分了。
        所以为了解决划分完还想继续加工,那么我们可以将划分好的存储空间重新虚拟化出来一个"磁盘",然后对他进行分区。

2.实现原理
【核心思想】:
      将整个存储空间在逻辑上划分成一个一个卷称为逻辑卷,为了方便和底层硬件映射,又将物理存储介质统一用一个一个卷来划分称为物理卷
而管理这种映射关系的称为LVM。这个实现可以用如下的一张图进行阐述。
 

   注意:   物理卷实际是逻辑层面的抽象,只不过是对物理介质的抽象而已,实际上并不存在物理卷。所以按照这样的思路我们自上而下的开始研究。
LV(Logical Volume):   逻辑卷,相当于为上层提供的存储单元,类似于实际的物理层面中的磁盘扇区,在逻辑卷之上可以建立文件系统。
                                     它建立在卷组之上,于是引入VG的概念。
VG(Volume Group:卷组,起到一个中间转换的角色,卷组是由一个或多个物理卷组成的存储池,在卷组上又能创建一个或多个逻辑卷。
       wxy: 其实很好理解这个概念,把底层分布在各处的物理扇区整合成一个个物理卷然后集合在一起成为一个池子,最后就可以将其划分成整块的逻辑卷。
PV(Physical Volume):   物理卷,是指在Logical层看到的磁盘分区或从与磁盘分区具有同样功能的设备(如RAID),对于LVM来说就是基本的存储逻辑块。
PE(Physical Extent):物理块,每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。
                                   PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。(当PV没有加入卷组的时候 这时候PV的PE是未定的,
                                   当PV加入卷组,PV的PE大小与卷组设定的PE大小相同)
                                   wxy:我的理解是让逻辑层面的物理卷并不是直接一对一对应到物理存储介质,而是用PE来作为度量衡,然后这个度量衡还可配置。
                                             例如上面的图中,一个物理设备驱动而能属于不同的PV,也就是说为了收集各个磁盘设备上的零散分区,用小单元去丈量。
                                            

PhysicalStorageMedia:物理存储介质,指系统的物理存储设备,如磁盘(/dev/hda、/dev/sda)等,是存储系统最底层的存储单元。
      逻辑卷(lv)是将几个磁盘分区或者块设备(pv,pv的id必须是8e的,pv可以位于不同的磁盘分区里,pv大小可以不一)组织起来形成一个大的扩展分区(vg,卷组,一个vg至少要包含一个pv。),该扩展分区不能直接用,需要将其划分成逻辑卷(lv)才能使用,lv可以格式化成不同的文件系统,挂载后直接使用。 lv的扩展和缩减是不会影响原有数据的,但逻辑卷缩减的风险大于逻辑卷扩展的风险。逻辑卷可以支持快照功能。
逻辑卷只能属于一个卷组。一个逻辑卷可以:
·         位于一个物理卷
·         跨越一个卷组的多个物理卷
·         多个镜像位于同一卷组的不同物理卷
用如下的一张图可以阐述这个过程

3. 快照
作用:
对某一时刻数据状态的备份提供另一条访问路径,通过快照来备份数据到其它位置,备份完成后,快照就没用了,卸载和移除该快照卷。快照空间的大小取决于数据改变的频度和所需要使用的时间长度,即有限的时间内原文件数据改变的空间大小。
工作原理:
保存数据某一时刻的状态。快照刚刚建立的时候,它的大小是空的。快照是访问原文件的另一条路径。快照是在数据改变之前将数据原封不动的保存到快照空间里面。注意数据变化的幅度不能超过给定快照空间的大小,否则快照将崩溃。

wxy: 还是不是很理解,反正就是一个思想是: 类似于git,如果发现数据写错了可以退回去。然后具体应用场景和用法可以等之后接触到了再补充。
 
 
四. Device mapper机制
Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户能够很方便的根据自己的需要定制实现存储资源的管理策略,当前比较流行的 Linux 下的逻辑卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基于该机制实现的。
 
wxy: 前面的章节我们讲述了逻辑卷/物理卷概念的提出以及实现原理,而这种实现原理在内核中称为Device mapper机制,具体的实现代码则有各种版本,包括LVM2,EVMS,dmraid等。
 
1. DM机制原理
参考链接:https://www.ibm.com/developerworks/cn/linux/l-devmapper/index.html
核心架构图如下:
wxy:
首先,Device mapper 在内核中作为一个块设备驱动被注册, 这里我认为确切的说是某个基于DM机制实现的LVM2,EVMS,dmraid等
其次,关于DM的层次划分,从用户态到底层物理设备,
    ...
然后,说说MD机制中的三个关键的概念
      1) mapped device,是内核抽象出来的逻辑设备,他并不是真正的存储设备,而是由DM帮我们抽象出来的,给用户层看的存储设备。 
           2) target device,代表底层物理设备,注意是"代表", 他是DM机制里对底层设备的抽象,表示的是 mapped device 所映射的物理空间段。
           3) 映射表,  从 Mapped device 到一个 target device 的映射表由一个多元组表示,该多元组由表示 mapped device 逻辑的起始地址、范围、和表示在 target device 所在物理设备的地址偏移量以及target 类型等变量组成(这些地址和偏移量都是以磁盘的扇区为单位的,即 512 个字节大小)。
 
 最后,三个关键的对象(mapped device,映射表,target device) ,结合底层设备驱动(target driver)一起构成了一个可迭代的设备树,
             该树的根节点就是mapped device,作为逻辑设备对外提供存储; 该树的叶子节点为target device ,表示的底层物理设备提供真正的存储介质。
 
 
 2. 如何查看DM状况
在用户态,可以使用device mapper库接口函数 或 dmsetup工具查看映射情况,如下:
1) 查看逻辑磁盘设备的映射表
[root@k8s220 ~]# dmsetup  table
cl-swap: 0 6291456 linear 202:2 2048
cl-root: 0 54517760 linear 202:2 6293504
[root@k8s220 ~]# ll /dev |grep xvda
brw-rw----. 1 root disk 202, 0 11月 24 14:17 xvda
brw-rw----. 1 root disk 202, 1 11月 24 14:17 xvda1
brw-rw----. 1 root disk 202, 2 11月 24 14:17 xvda2

解析: 有两个逻辑分区,存储情况如下

分区cl-swap, 6291456个扇区大小( 对应逻辑设备的0 ~ 6291456-1号扇区),

         以线性映射的方式对应到物理设备202:2(代表/dev/xvda2)的第2048号开始的扇区( 结束于 2048 + 6291456 - 1=  6293503 )

分区cl-root,  54517760 个扇区大小(对应逻辑设备的0 ~ 54517760 -1 号扇区),

        以线性映射的方式对应到物理设备202:2(代表/dev/xvda2)的第6293504号开始的扇区 ( 结束于 6293504 + 54517760 - 1=  60,811,263 )

2) 从磁盘信息的角度查看

[root@k8s220 ~]# fdisk -l

磁盘 /dev/xvda:32.2 GB, 32212254720 字节,62914560 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000bfce9

    设备 Boot      Start         End      Blocks   Id  System
/dev/xvda1   *        2048     2099199     1048576   83  Linux      ---主分区,可以直接使用
/dev/xvda2         2099200    62914559    30407680   8e  Linux LVM  ---扩展分区,不可直接使用, 需要再划分才可以使用, 共60,815,359个扇区。id 为8e代表是逻辑卷

磁盘 /dev/mapper/cl-root:27.9 GB, 27913093120 字节,54517760 个扇区   ---mapper路径下,为逻辑分区1,
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/cl-swap:3221 MB, 3221225472 字节,6291456 个扇区     ----mapper路径下,为逻辑分区2
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

解析: 

首先,逻辑扇区映射表中记录的信息刚好在磁盘设备中有对应,大小符合
然后,对于真正的物理磁盘, 只有1个主分区 和 1个扩展分区(2号), 没有逻辑分区(>5号)
           其中主分区是可以直接使用的(查看文件系统可以看出,该分区已经挂载到了"/" 目录下)
            但是扩展分区是不能使用的,其必须有后面的逻辑分区才行,而此时并没有 > xvda(>5),  即没有逻辑分区,所以这个扩展分区(指针)指向了哪里呢?
最后, 真正被扩展分区(指针)指向的是Device mapper机制管理的底层物理存储设备,即被Device mapper做逻辑卷映射了
           所以,在逻辑卷分区表中的两个分区,其存储空间的和 = 6291456 + 54517760 = 60,809,216个扇区,
           占用的是/dev/xvda2的 2048  ~ 60,811,263 号扇区
 
3) 查看物理卷信息,验证了上一步想法
# pvdisplay
  --- Physical volume ---
  PV Name               /dev/xvda2   ###这个物理卷来自xvda2
  VG Name               cl           ###物理卷组是c1
  PV Size               29.00 GiB / not usable 3.00 MiB     ###占用的磁盘的29G的空间
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              7423
  Free PE               0
  Allocated PE          7423
  PV UUID               dj2nJv-PCac-vgHl-Tdht-FpGV-B1Nh-yMZsc3

4) 回头看看逻辑卷,在设备列表中,是以什么形态呈现的

[root@k8s220 mapper]# ll /dev/mapper/
总用量 0
lrwxrwxrwx. 1 root root 7 11月 24 14:17 cl-root -> ../dm-0
lrwxrwxrwx. 1 root root 7 11月 24 14:45 cl-swap -> ../dm-1
crw-------. 1 root root 10, 236 11月 24 14:17 control


[root@k8s220 mapper]# ll /dev/ |grep dm
crw-------. 1 root root 10, 60 11月 24 14:17 cpu_dma_latency
brw-rw----. 1 root disk 253, 0 11月 24 14:17 dm-0
brw-rw----. 1 root disk 253, 1 11月 24 14:45 dm-1
crw-------. 1 root root 1, 12 11月 24 14:17 oldmem

 解析: 

虽然认为是"设备",但实际上虚拟出来的,待逻辑层面(用户侧)看是设备dm-0和dm-1, 但实际上其就是/dev/xvda2这块设备,

更确切的说是磁盘xvda的第二块分区。

 4)看看安装在分区上的文件系统,以及这些文件系统如何挂载的
注:文件系统的章节见:
[root@k8s220 /]# df -Th
文件系统            类型      容量  已用  可用 已用% 挂载点
/dev/mapper/cl-root xfs        26G   11G   16G   41% /
devtmpfs            devtmpfs  3.9G     0  3.9G    0% /dev
tmpfs               tmpfs     3.7G     0  3.7G    0% /dev/shm
tmpfs               tmpfs     3.7G  380M  3.3G   11% /run
tmpfs               tmpfs     3.7G     0  3.7G    0% /sys/fs/cgroup
/dev/xvda1          xfs      1014M  121M  894M   12% /boot
tmpfs               tmpfs     746M     0  746M    0% /run/user/0
overlay             overlay    26G   11G   16G   41% /var/lib/docker/overlay2/ba835bf0837a7c3e88a0b3898f1376a839525d1492493837a684a3569b231158/merged
shm                 tmpfs      64M     0   64M    0% /var/lib/docker/containers/de050fb946e9362930426fb98d5b2c11aa4daca18f9aa24ba7a483cb7852663a/shm

解析: 

第一块物理分区: /dev/xvda1,安装的是xfs类型的文件系统,被挂载到了/boot目录下

第二块物理分区/dev/xvda2,其中一块被映射成/dev/mapper/cl-root(假)设备, 安装的是xfs类型的文件系统,被挂载到了根目录下

 

一个例子

【需求】
一台虚拟机上,目前的磁盘不够,于是重新分配了新的磁盘,需要扩充到根目录中
此时磁盘信息在之前的基础上(见上面)增加如下
...

磁盘 /dev/xvde:75.2 GB, 75161927680 字节,146800640 个扇区       ----新增的磁盘
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
 
逻辑卷情况如下:
[root@tmp-82 ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/xvda2
  VG Name               cl    ----根目录使用的逻辑卷所属的卷组的名称
  PV Size               29.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              7423
  Free PE               0
  Allocated PE          7423
  PV UUID               dj2nJv-PCac-vgHl-Tdht-FpGV-B1Nh-yMZsc3

【基本思路】
首先,因为都是使用的逻辑卷方式(Device Mapper)挂载到的根目录,
然后,同样将新增的磁盘虚拟化,即映射成逻辑卷,
最后,将新卷扩充到根目录中

 

 【操作步骤】

1. 将物理磁盘直接添加到物理卷组中

[root@tmp-82 ~]# vgextend cl /dev/xvde
  Physical volume "/dev/xvde" successfully created.
  Volume group "cl" successfully extended
[root@tmp-82 ~]# 

结果:
[root@tmp-82 cl]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/xvda2
  VG Name               cl
  PV Size               29.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              7423
  Free PE               0
  Allocated PE          7423
  PV UUID               dj2nJv-PCac-vgHl-Tdht-FpGV-B1Nh-yMZsc3
   
  --- Physical volume ---
  PV Name               /dev/xvde
  VG Name               cl
  PV Size               70.00 GiB / not usable 4.00 MiB       ----注:总共70G, 但是其中有4M不能用
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              17919
  Free PE               17919
  Allocated PE          0
  PV UUID               Z6H0y5-9Ajl-5to6-Q7Bk-2rbN-sNZQ-3OUssC

 2. 物理卷池子中空间增大了,于是可以通知为逻辑卷添加空间

[root@tmp-82 cl]# lvextend -L +70g /dev/cl/root
  Insufficient free space: 17920 extents needed, but only 17919 available
解析:差一块,原因是有4M不能用

[root@tmp-82 cl]#  lvextend -L +65g /dev/cl/root
  Size of logical volume cl/root changed from 26.00 GiB (6655 extents) to 91.00 GiB (23295 extents).
  Logical volume cl/root successfully resized.
或
lvextend -L +65g /dev/mapper/cl-root

说明:之所以扩充的的如上的目录s,是因为有如下的对应关系

[root@tmp-82 cl]# ll /dev/mapper/cl-root
lrwxrwxrwx 1 root root 7 11月  9 10:21 /dev/mapper/cl-root -> ../dm-0

[root@tmp-82 cl]# ll /dev/cl/root
lrwxrwxrwx 1 root root 7 11月  9 10:21 /dev/cl/root -> ../dm-0

[root@tmp-82 cl]# ll |grep dm
lrwxrwxrwx 1 root root 7 11月  9 10:21 root -> ../dm-0
lrwxrwxrwx 1 root root 7 11月  9 10:21 swap -> ../dm-1

即:
/dev/mapper/cl-root =  ../dm-0 = /dev/cl/root

 3.  逻辑卷池子增大了,于是可以通知为文件系统增加空间了

# xfs_growfs /dev/mapper/cl-root
meta-data=/dev/mapper/cl-root    isize=512    agcount=4, agsize=1703680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=6814720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=3327, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 6814720 to 23854080

注:
resize2fs 命令 针对的是ext2、ext3、ext4文件系统
xfs_growfs 命令 针对的是xfs文件系统

4. 结果, 从26 + 65 = 91
[root@tmp-82 cl]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root xfs 91G 16G 76G 18% /

....

原文地址:https://www.cnblogs.com/shuiguizi/p/13088275.html