8.Linux的LVM使用详解
命令概览:所使用的命令(#代表是数字)
pvcreate /dev/sd[xx]
vgcreate -s # vgname /dev/sd[]
-s 指定PE的大小 默认大小为4M
vgextend vgname /dev/sd[xx]
lvcreate -n lvname -L # /dev/vgname
扩容
lvs
lvextend -L # /dev/vgname/lvname
resize2fs /dev/vgname/lvname
lvs
缩减
umount /dev/vgname/lvname
e2fsck /dev/vgname/lvname
resize2fs /dev/vgname/lvname #
lvreduce -L # /dev/vgname/lvname
mount
快照
lvcreate -L # -s -n snapshot /dev/vgname/lvname
卸载逻辑卷
umount /dev/vgname/lvname
lvremove /dev/vgname/lvname
vgremove /dev/vgname
pvremove /dev/sd[xx]
LVM的使用
LVM(Logical Volume Manager)叫做逻辑卷管理器,有两个版本,早期是LVM1(现在很少使用了),LVM2。
PV (Physical Volume)物理卷,在分区时需要调整系统 ID为8e(LVM的标识符),使用pvcreate来创建物理卷。
VG (Volume Group)卷组,是将一个或多个PV组合成一个VG,可以通过vgcreate来实现。
LV (Logical Volume)逻辑卷,将VG划分成一个或多个LV,可以通过lvcreate来实现。
LVM2使用dm模块来实现将一个或多个底层块设备组织成一个逻辑设备的工具。它能够将一个或多个底层块设备从某种意义上来映射成一个逻辑设备,通过在其上面附加一个逻辑层使得上层看起来像一个设备一样,而且在其之上,还可以再划分逻辑分区。将底层的块设备(VG)进一步分隔成了一个一个可以存储数据空间的块(PE),这种块也称为PE(Physical Extend),再将VG上多个PE组合成一个或多个
LV。也就是说LV的大小是由PE的个数决定的,LVM默认使用4M的PE块,而LVM的VG最多仅能含有65534个PE,因此默认的LVM VG会有4M*65534(1024M/G)=256G,它是整个LVM最小的存储块,也就是说,文件
数据都是由写入PE来处理的。以下就是LVM的简单架构:
在数据写入LV时,LVM有两种实现方式:
a.线性模式(liner) 就是把其中一块硬盘都使用完后,才使用另外一块硬盘
b.交错模式(triped) 把要存储的数据分块,第一块写入到LV中的第一个硬盘,第二块写入到LV
中的第二块硬盘如此这样,依次存储,可以提升读写性能,但是注意此时只要出现一个硬盘损坏,那么数据都会丢失,如果要提升读写性能还是使用RAID更佳。
LVM还可以实现动态调整容量,当空间不足时,可在线添加容量;当容量过大,也可以缩减容量。而且还提供了快照功能,能方便的实现备份。下面就来详细讲解他们的实现过程。
3.LVM的使用
实际上LVM使用的设备是放置到/dev/mapper/目录下的
PV,VG,LV他们各自都有一组命令
输入pv按两次tab键就可以看到以pv开头的命令
[root@linux_basic scripts]#pv
pvchange pvck pvcreate pvdisplay pvmove pvremove pvresize pvs pvscan
其他vg,lv也是一样
[root@linux_basic scripts]#vg
vgcfgbackup vgck vgdisplay vgimport vgmknodes vgrename vgsplit
vgcfgrestore vgconvert vgexport vgimportclone vgreduce vgs
vgchange vgcreate vgextend vgmerge vgremove vgscan
[root@linux_basic scripts]#lv
lvchange lvdisplay lvmchange lvmdump lvmsar lvrename lvscan
lvconvert lvextend lvmconf lvmetad lvreduce lvresize
lvcreate lvm lvmdiskscan lvmsadc lvremove lvs
这里我们就说明使用pvcreate,vgcreata的格式
创建物理卷
pvcreate ― initialize a disk or partition for use by LVM 初始化磁盘或分区使用LVM
pvcreate /dev/sd[a-z]|/dev/sd[a-z][1-9] ... 可跟多个磁盘或分区,注意此处使用的磁盘分区应该调整其系统标识符为8e,通过fdisk命令
创建卷组
vgcreate ― create a volume group 创建一个卷组
vgcreate [-s PESIZE(pe的大小)] VolumeGroupName(卷组的名字) PhysicalDevicePath [PhysicalDevicePath...](指定刚创建的物理卷)
-s, --physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE]
Sets the physical extent size on physical volumes of this volume group.
创建逻辑卷
lvcreate - create a logical volume in an existing volume group
lvcreate -n lvname -L # /dev/vgname
-n, --name LogicalVolume{Name|Path}
Sets the name for the new logical volume. 设置这个逻辑卷名
-L, --size LogicalVolumeSize[bBsSkKmMgGtTpPeE] 指定逻辑卷的大小,单位可以是K,M,G,T等
Gives the size to allocate for the new logical volume. A size suffix of B for bytes, S for sectors as 512 bytes, K for kilobytes, M for megabytes, G for gigabytes, T for terabytes, Pfor petabytes or E for exabytes is optional.
Default unit is megabytes. 默认单位
扩展逻辑卷,需要先扩展物理卷再扩展逻辑卷,可在线扩容
如何扩展逻辑卷:
a、先确定扩展的目标大小;并确保对应的卷组中有足够的空闲空间可用;
b、扩展物理边界 仅能在当前卷组中进行扩展
lvextend -L # /dev/vgname/lvname
c、扩展逻辑边界
resize2fs /dev/vgname/lvname
[root@linux_basic test]#df -hP /mnt/test
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_lvm-test 4.9G 6.6M 4.7G 1% /mnt/test 扩展成功
[root@linux_basic test]#du -sh /mnt/test
2.6M /mnt/test 扩展后内容为改变
缩减逻辑卷,需要先缩减逻辑卷在缩减物理卷
缩减很危险!!!!
缩减需要离线
a、先确定缩减后的目标大小;并确保对应的目标逻辑卷大小中有足够的空间可容纳原有所有数据;
b、先卸载文件系统,并要执行强制检测
e2fsck -f
c、缩减逻辑边界
resize2fs DEVICE #
[root@linux_basic ~]#resize2fs -help
resize2fs 1.41.12 (17-May-2010)
Usage: resize2fs [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]
d、缩减物理边界
lvreduce -L # /dev/vg_xx/xxx
创建快照卷:
lvcreate
-L #指定快照卷大小
-n 指定快照卷名字
-s 指定快照卷
-p r 只读
注意:快照卷是对某逻辑卷进行的,因此必须跟目标逻辑卷在同一个卷组中;无须指明卷组;
它只备份又被改动的数据,文件系统内没有被更改的数据依旧保持在原本的区块内,但是LVM快照
功能会知道那些数据放置在哪里,因此“快照”当时的文件系统就得以“备份”下来,且快照所占用的
容量又非常小。
由于快照区与原本的LV共享很多PE区块,因此快照区与被快照的LV必须要在同一个VG上面。
LV snapshot status active destination for test
LV Status available
# open 1
LV Size 2.00 GiB
Current LE 64
COW-table size 512.00 MiB
COW-table LE 16
Allocated to snapshot 0.07%
快照区已经被使用了0.07%,因为原数据改变了
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:5
利用快照区恢复原系统
复原的系统数据量不能够高于快照区所能负载的实际容量。由于原始数据会被
移到快照区,如果快照区不够大,若原始数据被改动的实际数据量比快照区大,
那么快照区当然容纳不了,这时候快照功能会失效。