LVM
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,LVM的重点在于可以弹性调整文件系统的容量!LVM可以整合多个物理分区在一起,让这些分区看起来就想是一个磁盘一样,而且,还可以在将来其他的物理分区或将其从这个LVM管理的磁盘当中删除。
LVM的特性
•允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小
•允许在多个物理设备间重新组织文件系统
•将设备指定为物理卷
•用一个或者多个物理卷来创建一个卷组
•物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
•在物理卷上创建的逻辑卷是由物理区域(PE)组成
•可以在逻辑卷上创建文件系统
LVM的组成结构
dm:device mapper :强一个或多个底层块设备组织成一个逻辑的模块
注意:内核必须支持此模块,否则无法使用lvm功能
Physical Volume,PV,物理卷
PV卷时LVM机制的基本存储设备,通常对应一个普通分区或整个硬盘,创建物理卷时,会在分区的头部创建一个保留区块,用于记录LVM属性,并把存储空间分割成默认大小为4MB的基本单元PE,从而构成物理卷。
pv管理工具:
pvs [PhysicalVolume [PhysicalVolume…]] 简要pv信息显示
pvdisplay [PhysicalVolumePath…] 详细显示pv信息
pvcreate [PhysicalVolume…] 创建pv卷
pvscan DevicePath 扫描所有磁盘上的物理卷
pvremove [PhysicalVolume] [PhysicalVolume…] 移除pv卷
例如: pvremove /dev/DEVICE[N] pvremove /dev/sdb1..
Volume,Group,VG,卷用户组
所谓的LVM大磁盘就是将许多PV整合成这个VG,所以VG就是LVM组合起来的大磁盘。
vg管理工具:
vgs [VolumeGroupName [VolumeGroupName…]]:简要的vg信息显示
vgdisplay [VolumeGroupName…]:显示vg的详细信息
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…] :创建vg组
-s 指定PE大小
vgreduce vgreduce VolumeGroupName [PhysicalVolumePath…] 从卷组中删除物理卷
vgextend VolumeGroupName PhysicalDevicePath [Physi-calDevicePath…] 向卷组中添加物理卷
vgremove [VolumeGroup‐Name…]删除卷组
vgremove VGNAME
Logic Volume ,LV,逻辑卷
最终的VG还会被且成LV,这个LV就是最后可以被格式化使用的类似分区。
逻辑块(Logical Extent,LE)
逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
lv管理工具:
lvs [VolumeGroupName] 简要lv信息
lvdisplay [VolumeGroupName|LogicalVolume{Name|Path} …] 查看逻辑卷详细信息
lvcreate -L #[mMgGtT] -n NAME VolumeGroup 创建逻辑卷
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME :扩展逻辑卷
lvremove Logicname :删除逻辑卷
例如:lvremove LVNAME lvremove testlv
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME : [-]:减少多少,和减至多少
resize2fs /dev/myvg/mylv
缩减逻辑卷:
umount /dev/VG_NAME/LV_NAME 必须先缩减
e2fsck -f /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
示例
[root@Cloud ~]#lsblk #查看磁盘分区 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 60G 0 part │ ├─vg0-root (dm-0) 253:0 0 20G 0 lvm / │ ├─vg0-swap (dm-1) 253:1 0 2G 0 lvm [SWAP] │ ├─vg0-usr (dm-2) 253:2 0 10G 0 lvm /usr │ └─vg0-var (dm-3) 253:3 0 20G 0 lvm /var └─sda3 8:3 0 1G 0 part sdb 8:16 0 15G 0 disk sdc 8:32 0 20G 0 disk sr0 11:0 1 3.7G 0 rom
[root@Cloud ~]#fdisk /dev/sdb #给/dev/sdb分区 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1958, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-1958, default 1958): +2G Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e#必须改成8e格式(LVM的标识符) Changed system type of partition 1 to 8e (Linux LVM)
[root@Cloud ~]#fdisk -l |grep '/dev/[sh]d[a-z]' #创建的LVM卷分区 Disk /dev/sda: 214.7 GB, 214748364800 bytes /dev/sda1 * 1 26 204800 83 Linux /dev/sda2 26 7859 62914560 8e Linux LVM /dev/sda3 7859 7990 1059291 83 Linux Disk /dev/sdb: 16.1 GB, 16106127360 bytes /dev/sdb1 1 262 2104483+ 8e Linux LVM /dev/sdb2 263 524 2104515 8e Linux LVM /dev/sdb3 525 786 2104515 8e Linux LVM Disk /dev/sdc: 21.5 GB, 21474836480 bytes /dev/sdc1 1 262 2104483+ 8e Linux LVM /dev/sdc2 263 524 2104515 8e Linux LVM /dev/sdc3 525 786 2104515 8e Linux LVM
[root@Cloud ~]#pvcreate /dev/sdb{1,2,3} /dev/sdc{1,2,3} #创建pv卷 Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created Physical volume "/dev/sdc1" successfully created Physical volume "/dev/sdc2" successfully created Physical volume "/dev/sdc3" successfully created [root@Cloud ~]#pvs #简要显示 PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a--u 59.99g 7.99g /dev/sdb1 lvm2 ---- 2.01g 2.01g /dev/sdb2 lvm2 ---- 2.01g 2.01g /dev/sdb3 lvm2 ---- 2.01g 2.01g /dev/sdc1 lvm2 ---- 2.01g 2.01g /dev/sdc2 lvm2 ---- 2.01g 2.01g /dev/sdc3 lvm2 ---- 2.01g 2.01g [root@Cloud ~]#pvscan #扫描pv卷 PV /dev/sda2 VG vg0 lvm2 [59.99 GiB / 7.99 GiB free] PV /dev/sdb1 lvm2 [2.01 GiB] PV /dev/sdb2 lvm2 [2.01 GiB] PV /dev/sdb3 lvm2 [2.01 GiB] PV /dev/sdc1 lvm2 [2.01 GiB] PV /dev/sdc2 lvm2 [2.01 GiB] PV /dev/sdc3 lvm2 [2.01 GiB] Total: 7 [72.03 GiB] / in use: 1 [59.99 GiB] / in no VG: 6 [12.04 GiB] [root@Cloud ~]#pvdisplay /dev/sdb1 #显示pv详细信息 ,,也可以选择多个pv卷 "/dev/sdb1" is a new physical volume of "2.01 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 #卷名 VG Name PV Size 2.01 GiB #pv卷大小 Allocatable NO PE Size 0 #尚未分配PE大小 Total PE 0 Free PE 0 Allocated PE 0 PV UUID Oa62B4-4jmr-CZ34-Xx9t-aXeE-2Xwr-2uaQ0o 由于PE是在创建VG时才给予的参数,因此在这里看的pv里面的PE都会时0
[root@Cloud ~]#vgcreate -s 16M VGone /dev/sdb{1,2,3} #创建VG组为VGone PE为16M Volume group "VGone" successfully created [root@Cloud ~]#vgs #简要显示 VG #PV #LV #SN Attr VSize VFree VGone 3 0 0 wz--n- 6.00g 6.00g vg0 1 4 0 wz--n- 59.99g 7.99g [root@Cloud ~]#vgscan #扫描查看 Reading all physical volumes. This may take a while... Found volume group "VGone" using metadata type lvm2 Found volume group "vg0" using metadata type lvm2 [root@Cloud ~]#vgdisplay VGone #详细显示vg组VGone信息 --- Volume group --- VG Name VGone #VG名 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 6.00 GiB #VG整体大小 PE Size 16.00 MiB #PE大小 Total PE 384 Alloc PE / Size 0 / 0 Free PE / Size 384 / 6.00 GiB VG UUID Iv022h-Gayu-nOBU-HTZg-dXjm-MPCW-2ytSLe
[root@Cloud ~]#vgreduce VGone /dev/sdb1 #删除VGone中的/dev/sdb1 Removed "/dev/sdb1" from volume group "VGone" [root@Cloud ~]#vgdisplay VGone #显示VGone信息 --- Volume group --- VG Name VGone System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 4.00 GiB #少了2G了 PE Size 16.00 MiB Total PE 256 Alloc PE / Size 0 / 0 Free PE / Size 256 / 4.00 GiB VG UUID ZJzg4M-W3OM-MDFc-ldww-Xgku-13Jj-GPse8n 注:缩减时注意,如果组中有数据,空间必须要比VG中的文件要大,不然容易导出数据丢失或不完整!!!
[root@Cloud ~]#vgextend VGone /dev/sdb1 #拓展VGone大小 Volume group "VGone" successfully extended [root@Cloud ~]#vgdisplay VGone |grep ' VG Size' VG Size 6.00 GiB #显示增加为6G
[root@Cloud ~]#lvcreate -L 4G -n log1 /dev/VGone 创建/dev/VGone下为log1的逻辑卷 Logical volume "log1" created. [root@Cloud ~]#lvs #简要显示lv卷 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert log1 VGone -wi-a----- 4.00g root vg0 -wi-ao---- 20.00g swap vg0 -wi-ao---- 2.00g usr vg0 -wi-ao---- 10.00g var vg0 -wi-ao---- 20.00g [root@Cloud ~]#lvscan #扫描lv卷 ACTIVE '/dev/VGone/log1' [4.00 GiB] inherit ACTIVE '/dev/vg0/root' [20.00 GiB] inherit ACTIVE '/dev/vg0/swap' [2.00 GiB] inherit ACTIVE '/dev/vg0/usr' [10.00 GiB] inherit ACTIVE '/dev/vg0/var' [20.00 GiB] inherit [root@Cloud ~]#lvdisplay /dev/VGone/log1 #详细显示lv卷 --- Logical volume --- LV Path /dev/VGone/log1 LV Name log1 VG Name VGone LV UUID ACCmAR-Iu9k-IWk4-CGPS-rk7V-BwU7-otfOD0 LV Write Access read/write LV Creation host, time Cloud.GO, 2016-09-08 22:40:28 +0800 LV Status available # open 0 LV Size 4.00 GiB #lv总大小 Current LE 256 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4
[root@Cloud ~]#lvextend -L +1G /dev/VGone/log1 #加1G的lv卷 Size of logical volume VGone/log1 changed from 4.00 GiB (256 extents) to 5.00 GiB (320 extents). Logical volume log1 successfully resized. [root@Cloud ~]#lvdisplay /dev/VGone/log1 |grep 'LV Size' LV Size 5.00 GiB #增加了1G [root@Cloud ~]#resize2fs /dev/VGone/log1 #重设lv大小 resize2fs 1.41.12 (17-May-2010) resize2fs: Bad magic number in super-block while trying to open /dev/VGone/log1 Couldn't find valid filesystem superblock.
注意:如果lv卷已经挂载,那么必须先卸载再检查才能缩减。有数据必须指定为比存储的数据空间大!
缩减逻辑卷:
umount /dev/VG_NAME/LV_NAME 必须先缩减
e2fsck -f /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME : [-]:减少多少,和减至多少
[root@Cloud ~]#lvreduce -L 2G /dev/VGone/log1 #压缩lv卷至2G WARNING: Reducing active logical volume to 2.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce VGone/log1? [y/n]: y #交互式 Size of logical volume VGone/log1 changed from 5.00 GiB (320 extents) to 2.00 GiB (128 extents). Logical volume log1 successfully resized. [root@Cloud ~]#lvdisplay /dev/VGone/log1 |grep 'LV Size' #显示大小 LV Size 2.00 GiB
快照:snapshot
就是将当时的系统信息记录下来,就好像照相机记录一般。将来若有任何数据改动了,则原始数据会被移到快照去,没有被改动的区域则由快照区与文件系统共享。
lvcreate -L # [mMgGtT] -p -r -s -n snapshot_lv_name original_lv_name 创建快照
-s 指定是快照卷
-n 指定卷名字
-p r 指定只读
lvcreate -s -L 512M -n mylv-snap -p r /dev/myvg/mylv
创建快照
mount /dev/myvg/mylv-snap /mnt
挂载快照
umount /mnt
卸载快照
[root@Cloud /snap]#mount /dev/VGone/log1 /media/ #挂载LV卷 [root@Cloud /media]#cp /etc/fstab /etc/issue ./ #复制文件到lv卷中 [root@Cloud /media]#ls fstab issue lost+found [root@Cloud /]#lvcreate -s -L 512M -n my-lv-snap -p r /dev/VGone/log1 #创建快照 Logical volume "my-lv-snap" created. [root@Cloud /]#mount /dev/VGone/my-lv-snap /mnt/ #挂载快照 mount: block device /dev/mapper/VGone-my--lv--snap is write-protected, mounting read-only [root@Cloud /]#ll /mnt/ #查看快照的内容 total 24 -rw-r--r-- 1 root root 921 Sep 8 23:21 fstab -rw-r--r-- 1 root root 103 Sep 8 23:21 issue drwx------ 2 root root 16384 Sep 8 23:12 lost+found [root@Cloud /]#umount /mnt #卸载 [root@Cloud /]#lvremove /dev/VGone/ #卸载快照 /dev/VGone/log1 /dev/VGone/my-lv-snap [root@Cloud /]#lvremove /dev/VGone/my-lv-snap Do you really want to remove active logical volume my-lv-snap? [y/n]: yes Logical volume "my-lv-snap" successfully removed
原创文章,作者:ladsdm,如若转载,请注明出处:http://www.178linux.com/44671