centos虚拟机扩容---后续学习
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空间。在命令行中输入下面的命令:
[[email protected] ~]# 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的可用空间不够了!
回顾下刚才创建逻辑卷的命令:
再看下卷组的空间是多少:
可以看到卷组的可用空间是20G, 为什么创建卷的时候提示空间不够?
下面执行vgdisplay命令:
可以看到可用的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命令是 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上请看下图
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
|
[[email protected] ~]# 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
|
[[email protected] ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
|
5.把pv加入vg中,相当于扩充vg的大小
先使用vgs查看vg组
1
2
3
4
|
[[email protected] ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 19.51g 40.00m<br>
可以看到现在就一个vg组其中有两个lv卷,若不确定可以通过lvs查看是否是我们需要扩展的分区<br>[[email protected] ~]# 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
|
[[email protected] ~]# vgextend centos /dev/sdb
Volume group "centos" successfully extended
vgextend名字命令接的vg的名字,后面是磁盘的位置
|
6.我们成功把vg卷扩展了,在用vgs查看一下
1
2
3
4
5
6
7
|
[[email protected] ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 2 2 0 wz--n- 39.50g 20.04g
[[email protected] ~]# 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
|
[[email protected] ~]# 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
|
[[email protected] ~]# 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
|
[[email protected] ~]# 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>没有变化。
|
那么我们要使用[[email protected] ~]# xfs_growfs /dev/mapper/centos-root 命令使系统重新读取大小
1
2
3
4
5
6
7
8
9
10
11
|
[[email protected] ~]# 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
|
[[email protected] ~]# 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