LVM (Logical Volume Manager) ,逻辑卷管理,这是Linux磁盘管理的一个工具,通过内核的dm模块实现,使用此方式管理的好处在于能动态的伸缩扩展分区逻辑边界,还能创建快照。  LVM可以将多个设备文件(磁盘、分区、RAID设备文件统称为PV-Physical Volume)组成一个卷组(VG-Volume Group),每一个设备文件都被分割为多个物理块(PE-Physical Extent,LVM最小存储单元默认4MB),在同一个VG中,每一个PE都对应一个相同大小的逻辑块(LE-Logical Extent),LE用于存储数据,多个LE组成一个特定大小的逻辑卷(LV-Logical Volume),类似于逻辑分区,也是需要格式化后使用,LV强于逻辑分区,它可以动态扩展伸缩容量大小、创建快照。 一、基本使用 使用逻辑卷的步骤:1)创建PV 2)创建VG 3)创建LV 4)格式化 1)创建PV 注意:若是使用分区,则需要更改分区ID为8e

[root@bogon ~]# pvcreate  /dev/sd{b,c}             //创建PV

[root@bogon ~]# pvs			//查看PV简要信息
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb      lvm2 ---  20.00g 20.00g
  /dev/sdc      lvm2 ---  20.00g 20.00g

[root@bogon ~]# pvdisplay  /dev/sdc     //查看PV详细信息
  "/dev/sdc" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               				#还未加入卷组,所以不显示卷组名称
  PV Size               20.00 GiB		#PV的大小为20G
  Allocatable           NO			#是否可划分PE分配组成LV
  PE Size               0   				#PE大小
  Total PE              0				#所有PE的数量
  Free PE               0				#剩余PE的数量
  Allocated PE          0				#分配PE的数量
  PV UUID               hSPzna-VAC8-xkcH-1DXK-7SaL-2RKV-eLhsNu
	```
2)创建VG

[root@bogon ~]# vgcreate -s 10M VG000 /dev/sd{b,c} #创建VG000,指定PE大小为10M,并加入设备文件。 Volume group "VG000" successfully created

[root@bogon ~]# vgs #查看VG简要信息 VG #PV #LV #SN Attr VSize VFree VG000 2 0 0 wz--n- 39.98g 39.98g

[root@bogon ~]# vgdisplay VG000 #查看VG详细信息 VG Name VG000 System ID
Format lvm2 Metadata Areas 2 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 2 Act PV 2 VG Size 39.98 GiB PE Size 10.00 MiB Total PE 4094 Alloc PE / Size 0 / 0
Free PE / Size 4094 / 39.98 GiB VG UUID m8XgBA-HMVy-aMud-0K4R-kPr2-XvGl-iNwEH5 ``` 3)创建LV

[root@bogon ~]# lvcreate VG000 -n lv1 -L 10G		#在VG000中创建名为lv1大小为10G的逻辑卷
  Logical volume "lv1" created.

[root@bogon ~]# lvs			#lv的简要信息
  LV   VG    Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  VG000 -wi-a----- 10.00g   

4)格式化并挂载 格式化无论选择那个设备文件都可以将LV格式化成EXT4。

[root@bogon ~]# mkfs.ext4  /dev/mapper/VG000-lv1 
[root@bogon ~]# mkfs.ext4  /dev/VG000/lv1 
[root@bogon ~]# mkfs.ext4 /dev/dm-0 

因为这些都是符号链接文件,最终都指向/dev/dm0 这个设备文件
[root@bogon ~]# ll /dev/VG000/lv1  /dev/mapper/VG000-lv1 
lrwxrwxrwx. 1 root root 7 Dec 21 06:55 /dev/mapper/VG000-lv1 -> ../dm-0
lrwxrwxrwx. 1 root root 7 Dec 21 06:55 /dev/VG000/lv1 -> ../dm-0

[root@bogon ~]# mkdir /data
[root@bogon ~]# mount /dev/mapper/VG000-lv1  /data/

二、扩展LV容量大小 1)首先需要将LV卸载 [root@bogon ~]# umount /data/ 2)扩展物理边界

[root@bogon ~]# lvextend /dev/VG000/lv1 -L +10G		#或者-L直接指定扩展后的大小,不使用+/-
  Size of logical volume VG000/lv1 changed from 10.00 GiB (1024 extents) to 	20.00 GiB (2048 extents).
  Logical volume VG000/lv1 successfully resized.

3)扩展逻辑边界

[root@bogon ~]# resize2fs   /dev/mapper/VG000-lv1  
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/VG000-lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mapper/VG000-lv1 is now 5242880 blocks long.

4)重新挂载

[root@bogon ~]# mount  /dev/mapper/VG000-lv1  /data/
[root@bogon ~]# df -HT
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/mapper/VG000-lv1 ext4       22G   47M   20G   1% /mnt

原来10G的LV已经扩展到了22G,这是有误差的,并且误差取决与PE的大小。 三、扩展VG 查看发现VG大小为40G ,/dev/sdb 、/dev/sdc都已加入VG000

[root@bogon ~]# vgs
  VG    #PV #LV #SN Attr   VSize  VFree 
  VG000   2   1   0 wz--n- 39.98g 19.98g
[root@bogon ~]# pvs
  PV         VG    Fmt  Attr PSize  PFree 
  /dev/sdb   VG000 lvm2 a--  19.99g     0 
  /dev/sdc   VG000 lvm2 a--  19.99g 19.98g

下面将/dev/sdd加入VG000实现扩展VG
[root@bogon ~]# vgextend VG000 /dev/sdd
  Physical volume "/dev/sdd" successfully created.
  Volume group "VG000" successfully extended
[root@bogon ~]# vgs
  VG    #PV #LV #SN Attr   VSize  VFree 
  VG000   3   1   0 wz--n- 59.97g 39.97g

已成功扩展VG大小为60G 四、缩减LV 查看lv的大小为20G,下面将演示如何将其缩减为10G

[root@bogon ~]# lvs
  LV   VG    Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  VG000 -wi-ao---- 20.00g  

1)首先第一步还是卸载lv,因为联机进行操作是很危险的 [root@bogon ~]# umount /data/ 2)与扩展LV不同的是,第二步是先缩减逻辑边界,再所见物理边界,但是在缩减之前需要检查该LV的剩余空间,也就是没有存放数据的LE位置,使用fsck或者e2fsck检查

 [root@bogon ~]# e2fsck -f /dev/mapper/VG000-lv1 
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/VG000-lv1: 12/1310720 files (0.0% non-contiguous), 126312/5242880 blocks

3)缩减逻辑边界

[root@bogon ~]# resize2fs   /dev/mapper/VG000-lv1  10G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/VG000-lv1 to 2621440 (4k) blocks.
The filesystem on /dev/mapper/VG000-lv1 is now 2621440 blocks long

4)缩减物理边界

[root@bogon ~]# lvreduce  /dev/VG000/lv1 -L 10G
  WARNING: Reducing active logical volume to 10.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce VG000/lv1? [y/n]: y
  Size of logical volume VG000/lv1 changed from 20.00 GiB (2048 extents) to 10.00 GiB (1024 extents).
  Logical volume VG000/lv1 successfully resized.

5)重新挂载设备

[root@bogon ~]# mount  /dev/mapper/VG000-lv1 /data/
[root@bogon ~]# df -HT
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/mapper/VG000-lv1 ext4       11G   38M  9.9G   1% /data

已缩减为10G,还是有误差的

五、缩减VG,移除物理卷 将VG000卷组中/dev/sdd的数据移动到/dev/sdc,并且移除/dev/sdd设备

[root@bogon ~]# vgs
  VG    #PV #LV #SN Attr   VSize  VFree 
  VG000   3   1   0 wz--n- 59.97g 49.97g
[root@bogon ~]# pvs
  PV         VG    Fmt  Attr PSize  PFree 
  /dev/sdb   VG000 lvm2 a--  19.99g  9.99g
  /dev/sdc   VG000 lvm2 a--  19.99g 19.99g
  /dev/sdd   VG000 lvm2 a--  19.99g 19.99g

1)要卸载分区,首先要将数据移出来,否则会损坏数据 [root@bogon ~]# pvmove /dev/sdd /dev/sdc 2)确保设备没有数据后,开始所见物理边界

[root@bogon ~]# vgreduce  VG000  /dev/sdd 
  Removed "/dev/sdd" from volume group "VG000"

六、创建快照  快照可以用于备份操作系统或数据,在备份操作系统时,操作系统必须是安装在LVM上的(swap与boot不能在lvm上),其原理实际是Cow(写时复制),创建快照时,会创建一个监视器并将原卷的元数据copy到镜像卷,当原卷内容改变时先将其copy到镜像卷,之后再修改数据,这样就能实现高效备份的作用  注意快照的创建非常快,并且快照卷创建之后另添加的文件就无法实现备份功能了。

[root@bogon ~]# lvcreate  -L  10G  -s  -n  lv1_snap  /dev/mapper/VG000-lv1
  Using default stripesize 64.00 KiB.
  Logical volume "lv1_snap" created.

[root@bogon ~]# mount /dev/mapper/VG000-lv1_snap /mnt/

[root@bogon ~]# ll -i  /mnt/1.txt  /data/1.txt 
13 -rw-r--r--. 1 root root 10380103680 Dec 23 06:50 /data/1.txt
13 -rw-r--r--. 1 root root 10380103680 Dec 23 06:50 /mnt/1.txt