4、创建逻辑卷(LVM):

     命令lvcreate的常用方法: 

   lvcreate [options]  -n 逻辑卷名  卷组名 

   其中的常用可选项有: 

   "-i Stripes :采用交错(striped)方式创建LV,其中Stripes指卷组中PV的数量。 

   "-I Stripe_size :采用交错方式时采用的块大小(单位为KB),Stripe_size必须为2的指数:2N ,N=2,3...9。 

   "-l LEs :指定LV的逻辑块数。 

   "-L size :指定LV的大小,其后可以用K、M、G表示KB、MB、GB。 

   "-s :创建一已存在LV的snapshot卷。 

   "-n name :为LV指定名称。

   创建普通LV:   

    lvcreate -L 5G -n lv01 vg01  创建一个名为lv01的5G 虚拟分区在虚拟硬盘vg01上   /dev/vg01/lv01

    lvcreate -i 4 -I 8 -L 4G -n lv02  vg01  [-i 是VG中组成PV的分区个数,-I 块大小,-L LV的大小]

   创建快照LV:

    lvcreate -s -i 4 -I 16 -L 2G -n lv03_snapshot vg01

lvextend命令 用于在线扩展逻辑卷的空间大小,而不中断应用程序对逻辑卷的访问。使用lvextend命令动态在线扩展磁盘空间,整个空间扩展过程对于应用程序来说是完全透明的。

语法

lvextend(选项)(参数)

选项

-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;-l:指定逻辑卷的大小(LE数)。

参数

逻辑卷:指定要扩展空间的逻辑卷。

实例

使用lvextend命令为逻辑卷 /dev/vg1000/lvol0 增加100M空间。在命令行中输入下面的命令:

[root@localhost ~]# lvextend -L +100M /dev/vg1000/lvol0 #为了解决增加100M空间

输出信息如下:

Extending logical volume lvol0 to 300.00 MB Logical volume lvol0 successfully resized

lvextend -L +20G /dev/mapper/centos-root

在使用这个命令的时候会出错:

因此遇到的情况和解决的方案如下:

【LVM】Insufficient Free Extents for a Logical Volume

原创  2014年02月22日 00:24:48

  • 标签:
  • lvm

转载请注明出处:

创建逻辑卷的时候,出现:Insufficient free extents (5119) in volume group vg1: 5120 required。

看提示是表示volume group的可用空间不够了!

回顾下刚才创建逻辑卷的命令:

lvcreate 镜像 lvcreate -s_lvcreate 镜像

再看下卷组的空间是多少:

lvcreate 镜像 lvcreate -s_逻辑卷_02

可以看到卷组的可用空间是20G, 为什么创建卷的时候提示空间不够?

下面执行vgdisplay命令:

lvcreate 镜像 lvcreate -s_lvcreate 镜像_03

可以看到可用的PE数量是5119,而每个PE大小是4.00MiB,所以其实这个卷组实际的可用空间其实不是20G,而是19.99G。

所以创建卷的命令改成lvcreate -L 19.99g -n volume1 vg1就可以创建成功了。

这个命令类似于:lvextend -L 19.99g vg1(VG Name 这个地方是有争议的这个博客里写的是直接添加到vg里,按照下图也说的没错,但是我在另外一片博客里找到这里应该是 lvextend -L +20G /dev/mapper/centos-root 而这个并不是我电脑上vgdisplay vg的name,我电脑上vgdisplay vg的name此时是centos  解释是:指定扩展多大的空间到lv中去,后面的/dev/mapper/centos-root是指定扩展的文件位置,可在 df   -h中看见,这个命令一定正确,但是我觉得 lvextend -L 19.99g -n volume1 vg1 也不应该错 ),

于是我查阅相关资料得出了一下结论:

/dev/mapper/centos-root

二、/dev/mapper目录的解释

   为了方便叙述,假设一台服务器有三块硬盘分别为a,b,c,每块硬盘的容量为1T。在安装Linux的时候,先根据系统及自身的需要建立基本的分区,假设对硬盘a进行了分区,分出去了0.1T的空间挂载在/boot目录下,其他硬盘未进行分区。系统利用Device mapper机制建立了一个卷组(volume group,VG),你可以把VG当做一个资源池来看待,最后在VG上面再创建逻辑卷(logical volume,LV)。若要将硬盘a的剩余空间、硬盘b和硬盘c都加入到VG中,则硬盘a的剩余空间首先会被系统建立为一个物理卷(physical volume,PV),并且这个物理卷的大小就是0.9T,之后硬盘a的剩余的空间、硬盘b和硬盘c以PV的身份加入到VG这个资源池中,然后你需要多大的空间,就可以从VG中划出多大的空间(当然最大不能超过VG的容量)。比如此时池中的空间就是2.9T,此时你就可以建立一个1T以上的空间出来,而不像以前最大的容量空间只能为1T。

   /dev/mapper/Volume-lv_root的意思是说你有一个VG (volume group卷组)叫作Volume, 这个Volume里面有一个LV叫作lv_root。其实这个/dev/mapper/Volume-lv_root文件是一个连接文件,是连接到/dev/dm-0的,你可以用命令ll /dev/mapper/Volume-lv_root进行查看。

   其实在系统里/dev/Volume/lv_root 和 /dev/mapper/Volume-lv_root以及/dev/dm-0都是一个东西,都可当作一个分区来对待。

   若要了解硬盘的具体情况,可通过fdisk或者pvdisplay命令进行查看。

   若你想要重装系统到/dev/sda下,且安装时有些东西不想被格式化想转移到/dev/sdb下,但此时/dev/sda和/dev/sdb被放到VG中了,那该如何解决该问题呢?这种情况下,由于此时根本没办法确定数据在哪一个硬盘上,因为这两个硬盘就如同加到池里,被Device mapper管理,所以解决方案就是再建个逻辑卷出来,把数据移到新的卷里,这样你就可以重装系统时只删掉之前分区里的东西,而新的卷里的东西不动,就不会丢失了。

所以对于 /dev/mapper/centos-root 的解释:相当于有一个vg(vg name = centos,用vgdisplay查看确实如此)

然后这个vg下有lv(逻辑卷):root (lv name, 用lvdisplay也能看到 )

lvextend -L +20G /dev/mapper/centos-root

参照下方:

lvextend(选项)(参数)

选项

-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;-l:指定逻辑卷的大小(LE数)。

参数

逻辑卷:指定要扩展空间的逻辑卷。

将lv扩展到vg下的root逻辑卷

所以lv扩展完成

但是lvcreate和lvextend命令不同,

    命令lvcreate的常用方法: 

   lvcreate [options]  -n 逻辑卷名  卷组名 

注意区分 lvcreate相当于在相应的vg下创建-n后面的逻辑卷名

而lvextend后的参数说明相当于在指定vg:centos下扩展lv : root,所以 /dev/mapper/centos-root 更像一个链接文件,链接着centos(vg)卷组下的逻辑卷.

至于为什么要把lv扩展到vg上请看下图

centos7中使用vg方式扩充root分区

源博客网址:

 pv、vg、lv的意思

物理卷(Physical Volume,PV):就是指硬盘分区,也可以是整个硬盘或已创建的软RAID,是LVM的基本存储设备。

卷组(Volume Group,VG):是由一个或多个物理卷所组成的存储池,在卷组上能创建一个或多个逻辑卷。

逻辑卷(Logical Volume,LV):类似于非LVM系统中的硬盘分区,它建立在卷组之上,是一个标准的块设备,在逻辑卷之上可以建立文件系统。

1.首先查看我们的根分区大小是多少

1


2


3


4


5


6


7


8


9


10

[root@localhost ~] # df -hT


文件系统                类型      容量  已用  可用 已用% 挂载点


/dev/mapper/centos-root xfs        18G  1.1G   17G    6% /


devtmpfs                devtmpfs  479M     0  479M    0% /dev


tmpfs                   tmpfs     489M     0  489M    0% /dev/shm


tmpfs                   tmpfs     489M  6.7M  483M    2% /run


tmpfs                   tmpfs     489M     0  489M    0% /sys/fs/cgroup


/dev/sda1               xfs       497M  125M  373M   25% /boot


tmpfs                   tmpfs      98M     0   98M    0% /run/user/0<br>


可以看到我们的根分区大小为17G

 2.添加一块物理的磁盘。在虚拟机中添加

 3.查看磁盘编号

1

ls  /dev/sd*<br>/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb<br>可以看到sdb就是我们刚才添加的磁盘

 4.创建pv

1


2

[root@localhost ~] # pvcreate /dev/sdb


  Physical volume  "/dev/sdb"  successfully created

 5.把pv加入vg中,相当于扩充vg的大小

    先使用vgs查看vg组

1


2


3


4


[root@localhost ~] # vgs


  VG      #PV #LV #SN Attr   VSize  VFree


  centos   1   2   0 wz--n- 19.51g 40.00m<br>


可以看到现在就一个vg组其中有两个lv卷,若不确定可以通过lvs查看是否是我们需要扩展的分区<br>[root@localhost ~] # lvs<br>  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert<br>  root centos -wi-ao---- 17.47g                                                    <br>  swap centos -wi-ao----  2.00g                                                    <br>可以看到这就是我们需要扩展的根分区,我这里还有个swap分区

 扩展vg,使用vgextend命令


1


2


3

[root@localhost ~] # vgextend centos /dev/sdb


  Volume group  "centos"  successfully extended


vgextend名字命令接的vg的名字,后面是磁盘的位置

 6.我们成功把vg卷扩展了,在用vgs查看一下

1


2


3


4


5


6


7

[root@localhost ~] # vgs


  VG      #PV #LV #SN Attr   VSize  VFree


  centos   2   2   0 wz--n- 39.50g 20.04g


[root@localhost ~] # lvs


  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert


  root centos -wi-ao---- 17.47g                                                   


  swap centos -wi-ao----  2.00g  <br><br>虽然我们把vg扩展了,但是lv还没有扩展

7.扩展lv,使用lvextend命令


1


2


3


[root@localhost ~] # lvextend -L +20G /dev/mapper/centos-root


  Size of logical volume centos/root changed from 17.47 GiB (4472 extents) to 37.47 GiB (9592 extents).


  Logical volume root successfully resized.<br>-L 指定扩展多大的空间到lv中去,后面的/dev/mapper/centos-root是指定扩展的文件位置,可在 df  -h中看见

 查看lv大小


1


2


3


4

[root@localhost ~] # lvs


  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert


  root centos -wi-ao---- 37.47g                                                   


  swap centos -wi-ao----  2.00g  

 查看df  -h中变化没有

1


2


3


4


5


6


7


8


9

[root@localhost ~] # df -h


文件系统                 容量  已用  可用 已用% 挂载点


/dev/mapper/centos-root   18G  1.1G   17G    6% /


devtmpfs                 479M     0  479M    0% /dev


tmpfs                    489M     0  489M    0% /dev/shm


tmpfs                    489M  6.7M  483M    2% /run


tmpfs                    489M     0  489M    0% /sys/fs/cgroup


/dev/sda1                497M  125M  373M   25% /boot


tmpfs                     98M     0   98M    0% /run/user/0<br><br>没有变化。

 那么我们要使用[root@localhost ~]# xfs_growfs /dev/mapper/centos-root 命令使系统重新读取大小

1


2


3


4


5


6


7


8


9


10


11

[root@localhost ~] # xfs_growfs /dev/mapper/centos-root


meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=1144832 blks


         =                       sectsz=512   attr=2, projid32bit=1


         =                       crc=0        finobt=0


data     =                       bsize=4096   blocks=4579328, imaxpct=25


         =                       sunit=0      swidth=0 blks


naming   =version 2              bsize=4096   ascii-ci=0 ftype=0


log      =internal               bsize=4096   blocks=2560, version=2


         =                       sectsz=512   sunit=0 blks, lazy-count=1


realtime =none                   extsz=4096   blocks=0, rtextents=0


data blocks changed from 4579328 to 9822208

 再使用df  -h查看

1


2


3


4


5


6


7


8


9

[root@localhost ~] # df -h


文件系统                 容量  已用  可用 已用% 挂载点


/dev/mapper/centos-root   38G  1.1G   37G    3% /


devtmpfs                 479M     0  479M    0% /dev


tmpfs                    489M     0  489M    0% /dev/shm


tmpfs                    489M  6.7M  483M    2% /run


tmpfs                    489M     0  489M    0% /sys/fs/cgroup


/dev/sda1                497M  125M  373M   25% /boot


tmpfs                     98M     0   98M    0% /run/user/0

 到这里我们就成功扩展了。

 

 

 

备注:我们可以自行生产vg组以及在新的vg中生成lv

vgcreate       创建新的vg组

lvcreate        在新的vg中创建新的lv,但是要指定对vg名字

vgreduce      把pv从vg中移除,若vg中只有一个pv则直接使用vgremove