标签:linux lvm
LVM2常见用法详解
1.简介
LVM(Logical Volume Manager)是逻辑卷管理的意思,是linux环境下对磁盘分区进行管理的一种机制,lvm是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
2.特点
可以对磁盘进行动态管理,动态增加或较少逻辑卷大小,而不会丢失现有的数据。
3.基本的逻辑管理概念
PV(physical volume)- 物理卷
通常是一个分区,也可以是整个物理硬盘,也可以是raid设备。
VG(volume group)- 卷组
多个物理卷的集合,创建在物理卷之上,在卷组创建时候,可以动态添加物理卷到卷组中。一个逻辑卷系统工程中可以只有一个卷组,也可以有多个卷组。
LV(logical volume)- 逻辑卷
创建在卷组之上,逻辑卷也可以动态的扩展或缩小空间。卷组中未被分配的卷组空间可以用于创建新的逻辑卷。多个逻辑卷可以属于同一个卷组,也可以属于不同的卷组。
PE(physical extent)- 物理块
4.通过联系学习使用lvm
练习1:创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录;
练习2: 新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录;
练习3:扩展testlv至7G,要求archlinux用户的文件不能丢失;
练习4:收缩testlv至3G,要求archlinux用户的文件不能丢失;
练习5:对testlv创建快照,并尝试基于快照备份数据,验正快照的功能;
5.开始练习
练习1:
首先准备两个分区,并调整分区类型为linux lvm(8e)
我呢,准备了两个分区/dev/sda5(11G)和/dev/sda6(9G)
##创建PV
语法:pvcreate PhysicalVolume [PhysicalVolume...]
pv的创建很简单,使用命令pvcrete后面直接加你想创建的分区,硬盘或者raid设备,在这里是/dev/sda5和/dev/sda6
pvcreate /dev/sda5 /dev/sda6
##使用pvs和pvdisplay查看pv
~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg0 lvm2 a-- 59.99g 7.99g
/dev/sda5 lvm2 --- 11.01g 11.01g
/dev/sda6 lvm2 --- 9.01g 9.01g
(pvs和pvdisplay都可以显示pv信息,只是pvs显示简要信息,pvdisplay显示详细信息。不带参数会显示所有pv。/dev/sda2是虚拟机自动创建的,对比可以看到,此时,我们创建的pv还并不适于任何一个VG)
##创建Vg
vgcreate [-s|--physicalextentsize PhysicalExtent-Size[bBsSkKmMgGtTpPeE]]
vgcreate -s 8M testvg /dev/sda5
(-s指定PE大小,其实可以一步创建20G的vg 使用vgcreate -s 8M test vg /dev/sda5 /dev/sda6,之所以不这样做,是下面为了演示动态扩展VG大小)
然后看看效果
~]# vgs
VG #PV #LV #SN Attr VSize VFree
testvg 1 0 0 wz--n- 11.00g 11.00g
vg0 1 4 0 wz--n- 59.99g 7.99g
~]# pvdisplay /dev/sda5
--- Physical volume ---
PV Name /dev/sda5
VG Name testvg
PV Size 11.01 GiB / not usable 7.16 MiB
Allocatable yes
PE Size 8.00 MiB
Total PE 1408
Free PE 1408
Allocated PE 0
PV UUID rzEsIK-uHnM-cCTi-Cu82-HQXA-7VH9-Xktpd
(可以看到vg name为testvg,pe大小为8M,pv只有加入到卷组后,才有pe大小的,而且,一旦创建,不能更改)
##使用pvextend动态扩展VG
语法:pvextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
pvextend testvg /dev/sda6
~]# vgs
VG #PV #LV #SN Attr VSize VFree
testvg 2 0 0 wz--n- 20.00g 20.00g
vg0 1 4 0 wz--n- 59.99g 7.99g
(可以看到testvg的大小变成了20g)
##使用lvcreate创建逻辑卷
语法:lvcreate -L LogicalVolumeSize[bBsSkKmMgGtTpPeE]} -n|--name LogicalVolume{Name|Path} Volumgroup
lvcreate -L 5G -n testlv testvg
~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
testlv testvg -wi-a----- 5.00g
....
~]# ls -l /dev/testvg/
total 0
lrwxrwxrwx 1 root root 7 Dec 19 17:38 testlv -> ../dm-4
(同时,系统在/dev目录下创建了相应的设备文件和符号链接)
最后一步,创建逻辑卷后,在制作文件系统就可以挂在并且使用了
mke2fs -t ext4 /dev/testvg
~]# mke2fs -t ext4 /dev/testvg/testlv
现在就可以挂在并且使用了
mkdir /users
mount /dev/testvg/testlv /users
~]# mkdir /users
[root@localhost ~]# mount /dev/testvg/testlv /users
[root@localhost ~]# ls /users
lost+found
练习2:
mkdir /users/archlinux
useradd -d /users/archlinux archlinux
su - archlinux
cp -r /etc/pam.d .
练习3:
首先查看testvg是否有足够的剩余空间
~]# vgs testvg
VG #PV #LV #SN Attr VSize VFree
testvg 2 1 0 wz--n- 20.00g 15.00g
然后,扩展lv"物理边界",在扩展文件系统边界
~]# lvextend -L +2G /dev/testvg/testlv
Size of logical volume testvg/testlv changed from 5.00 GiB (640 extents) to 7.00 GiB (896 extents).
Logical volume testlv successfully resized
(还有另一种格式lvextend -L 7G /dev/testvg/testlv,+意为在原有的基础上增加空间,不带加号代表绝对空间,然后指定逻辑卷路径)
~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
testlv testvg -wi-ao---- 7.00g
df -h
/dev/mapper/testvg-testlv 4.8G 11M 4.6G 1% /users
虽然物理边界增大,但文件系统大小还是不变,下面扩展文件系统边界
resize2fs /dev/testvg/testlv
练习4:
##lvreduce — reduce the size of a logical volume
不像lvextend在扩展lv和resize2fs支持挂在时扩展
在使用lvreduce缩减物理边界前,必须先卸载文件系统,还得使用e2fsck -f some_filesystem 强行检查文件系统,resize2fs之后,才能使用lvreduce。
umount /dev/testvg/testlv
e2fsck -f /dev/testvg/testlv
resize2fs /dev/testvg/testlv 3G
lvreduce -L 3G /dev/testvg/testlv
(保持缩减大小一致)
然后检查是否有文件丢失
练习5:
注意:快照区与被快照区必须要在同一个vg里
lvcreate -L 200M -s -n snap_testlv /dev/testvg/testlv
cd /users
tar cjf /tmp/snap-for-testlv.bz2 *
rm -rf /users/*
ls -l
tar xjf /tmp/snap-for-testlv.bz2
补充两个知识点,就是vg的缩减和删除lvm
类似lv的缩减,在缩减vg之前,必须先使用pvmove先把你想撤掉的块设备的数据移动到其他还在工作中的pv上
pvmove /dev/sda6
vgreduce testvg /dev/sda6
然后在检查一下
要彻底删除lvm,只需按创建lv相反的操作即可
umount /users
lvremove /dev/testvg/testlv
vgremove testvg
pvremove /dev/sda5 /dev/ada6 ...
标签:linux lvm
原文地址:http://8522687.blog.51cto.com/8512687/1726431