LVM

LVM全称逻辑卷管理(LogicVolume Manager,LVM),是Linux 系统对磁盘分区的一种管理机制,LVM是建立在硬盘和分区至上的一个逻辑层,可以将多个物理分区通过软件,整合在一起,让这些分区看起来就像是一个独立的大磁盘一样,来提高磁盘分区管理的灵活性,可灵活的对磁盘大小进行动态调整。LVM 仅能弹性地使用(或调整)磁盘空间,无法提供磁盘阵列的容错能力。如果 LVM 出现故障,所有存储于 LVM 上的文件可能就会永久消失。


LVM 术语

物理卷(PhysicalVolume,PV) 是LVM存储结构中处于最底层,物理卷可以是整个硬盘,也可是其中的某个分区,这里可以简单看作为LVM物理卷的分区,其分区系统识别码(System ID)必须是标识为“8e Linux LVM”.


卷组(Volume Group,VG)建立在物理卷之上,它由一个或多个物理卷组成卷组组成,可以动态添加卷组中,在卷组上可以创建一个或多个"LVM分区"(逻辑卷)一个LVM 系统中可以自由一个卷组,也可以包含多个卷组LVM的卷组类似于非LVM系统中的物理硬盘


逻辑卷(Logic Volume,LV)建立在卷组之上,它是从卷组中"切出"的一块空间逻辑卷船舰之后,其大小可以伸缩。这里可以分享下从某本书中看到一个事例,这样方便记忆与理解。事例:物理卷 好比面粉; 卷组好比面团; 逻辑卷好比馒头,馒头可大可小,可控制。


物理扩展单元(Physical Extent):物理卷可以进一步细分为物理扩展单元,每个物理扩展单元具有唯一的编号, 也是LVM能够寻址的最小单元。物理扩展单元的大小可以配置,默认值为4MB.


逻辑扩展单元(Logical Extent):逻辑卷可以划分寻址的逻辑扩展单元。在同一个卷组中,物理扩展单元与逻辑扩展单元的大小相同,且一一对应。



LVM 创建流程图


wKiom1LXYYaBkcCGAAEUJBDqqDU865.jpg


LVM 管理工具


PV

VG

LV

作用

pvcreate

vgcreate

lvcreate

创建物理卷、卷组、逻辑卷

pvdisplay

vgdisplay

lvdisplay

查看物理卷、卷组、逻辑卷大小

pvremove

vgremove

lvremove

移除物理卷、卷组、逻辑卷

Null

vgextend

lvextend

扩展卷组、逻辑卷大小

Null

vgredure

lvredure

减少卷组、逻辑卷大小

pvsan

vgscan

lvscan

物理卷、卷组、逻辑卷

创建和管理LVM

创建分区

使用分区工具fdisk创建LVM分区,方法和创建其他一般分区的方式是一样的,并将此分区System ID 更改为:"8eLinux"

[root@dirhost140 ~]#fdisk /dev/sdd
Command (m for help):p
Disk /dev/sdd: 500.1GB, 500107862016 bytes
255 heads, 63sectors/track, 60801 cylinders
Units = cylinders of16065 * 512 = 8225280 bytes
Sector size(logical/physical): 512 bytes / 512 bytes
I/O size(minimum/optimal): 512 bytes / 512 bytes
Disk identifier:0x2311983e
Device BootStartEndBlocksIdSystem
/dev/sdd11130610490413+83Linux
Command (m for help):d
Selected partition 1
Command (m for help):n
Command action
eextended
pprimary partition (1-4)
p
Partition number(1-4): 1
First cylinder(1-60801, default 1):
Using default value 1
Last cylinder,+cylinders or +size{K,M,G} (1-60801, default 60801): +20G
Command (m for help):t
Selected partition 1
Hex code (type L tolist codes): 8e
Changed system typeof partition 1 to 8e (Linux LVM)
Command (m for help):w
The partition tablehas been altered!
Calling ioctl() tore-read partition table.
Syncing disks.

创建物理卷

创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。这里这里以磁盘分区/dev/sdd1为例,将 /dev/sdd1 初始化成物理卷:

[root@dirhost140 ~]#pvcreate /dev/sdd1
Physical volume "/dev/sdd1"successfully created

创建卷组

[root@dirhost140 ~]#vgcreate vg04 /dev/sdd1
Volume group "vg04" successfullycreated

创建逻辑卷

[root@dirhost140 ~]#lvcreate-L +5G -n lvtest01 vg04
Logical volume "lvtest01" created

这里通过lvdisplay 命令去查看LV 的详细信息

[root@dirhost140 ~]#lvdisplay /dev/vg04/lvtest01
--- Logical volume ---
LV Name/dev/vg04/lvtest01
VG Namevg04
LV UUID6RJCH7-Qbbo-JTMl-Jpec-J6KS-rBgw-rP2uDN
LV Write Acce***ead/write
LV Statusavailable
# open0
LV Size5.00 GiB
Current LE1280
Segments1
Allocationinherit
Read ahead sectorsauto
- currently set to256
Block device253:16

挂载并读取LVM

[root@dirhost140 ~]#mount /dev/vg04/lvtest01 /aaa/
[root@dirhost140 ~]#df -Th /dev/vg04/lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext45.0G138M4.6G3% /aaa

调整逻辑卷大小

扩大LVM逻辑卷的大小

调整逻辑卷大小需要先扩大LV,再放大文件系统, 在扩大LVM逻辑卷大小之前,先检查下其LV 的Block大小

[root@DirHost140 ~]#tune2fs -l /dev/vg04/lvtest01 |grep 'Block'
Block count:1310720#5G = Block count*4/1024/1024
Block size:4096
Blocks pergroup:32768
Blocks per group:8192

扩大逻辑卷1GB 大小

[root@DirHost140 ~]#lvextend -L +1G /dev/vg04/lvtest01
Extending logical volume lvtest01 to 6.00 GiB
Logical volume lvtest01 successfully resized

虽然已经将LV空间扩充了1GB大小,但文件系统仍然是5G,所以这里需要放大下文件系统.

[root@DirHost140 ~]#df -Th/dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext45.0G138M4.6G3% /aaa
[root@DirHost140 ~]#resize2fs /dev/vg04/lvtest01
resize2fs 1.41.12(17-May-2010)
Filesystem at/dev/vg04/lvtest01 is mounted on /aaa; on-line resizing required
old desc_blocks = 1,new_desc_blocks = 1
Performing an on-lineresize of /dev/vg04/lvtest01 to 1572864 (4k) blocks.
The filesystem on/dev/vg04/lvtest01 is now 1572864 blocks long.
[root@DirHost140 ~]#df -Th /dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext46.0G138M5.5G3% /aaa

减小LVM逻辑卷的大小

减小LVM 3GB的大小空间

由于LVM 不支持在线减小LVM,因此需要umountLV,离线进行减少LVM 3G大小空间先减小逻辑卷大小,再减小文件系统大小(前提备份,卸载操作),

[root@dirhost140 /]#umount /aaa
[root@dirhost140 /]#resize2fs /dev/vg04/lvtest01 3G
resize2fs 1.41.12(17-May-2010)
Filesystem at/dev/vg04/lvtest01 is mounted on /aaa; on-line resizing required
On-line shrinkingfrom 1572864 to 786432 not supported.
[root@dirhost140 /]#umount /aaa/
[root@dirhost140 /]#resize2fs /dev/vg04/lvtest01 3G
resize2fs 1.41.12(17-May-2010)
Please run 'e2fsck -f/dev/vg04/lvtest01' first.
[root@dirhost140 /]#e2fsck -f /dev/vg04/lvtest01
e2fsck 1.41.12(17-May-2010)
Pass 1: Checkinginodes, blocks, and sizes
Pass 2: Checkingdirectory structure
Pass 3: Checkingdirectory connectivity
Pass 4: Checkingreference counts
Pass 5: Checkinggroup summary information
/dev/vg04/lvtest01:11/393216 files (0.0% non-contiguous), 60014/1572864 blocks

[root@dirhost140 /]#resize2fs /dev/vg04/lvtest01 3G
resize2fs 1.41.12(17-May-2010)
Resizing thefilesystem on /dev/vg04/lvtest01 to 786432 (4k) blocks.
The filesystem on/dev/vg04/lvtest01 is now 786432 blocks long.
[root@dirhost140 /]#lvreduce -L 3G /dev/vg04/lvtest01
WARNING: Reducing active logical volume to3.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want toreduce lvtest01? [y/n]: y
Reducing logical volume lvtest01 to 3.00 GiB
Logical volume lvtest01 successfully resized

[root@dirhost140 /]#mount /dev/vg04/lvtest01 /aaa
[root@dirhost140 /]#df -Th /dev/vg04/lvtest01 
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext43.0G136M2.7G5% /aaa

LVM高级应用

创建逻辑卷快照

LVM提供了快照功能可以用此技巧,灵活的使用磁盘空间以及备份文件系统,这里用之前创建过的lvtest01 作快照

建立并读取逻辑卷快照

[root@DirHost140 ~]#df -Th/dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext43.0G136M2.7G5% /aaa
[root@DirHost140 ~]#
[root@DirHost140 ~]# lvcreate-L 300M -s -n backup1 /dev/vg04/lvtest01
Logical volume "backup1" created
[root@DirHost140 ~]#umount /aaa/
[root@DirHost140 ~]#mount /dev/vg04/backup1 /aaa/
[root@DirHost140 ~]#df -Th /dev/mapper/vg04-backup1
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-backup1
ext43.0G136M2.7G5% /aaa

虽然从上面看到新创建的快照backup1 已挂载到/aaa 目录, 且显示总共用的大小为3G,可用空间为2.7G。由于之前创建快照时只给了300M大小,因此次lv快照backup1最多只能存储300M 空间,当超过300M空间时,系统将会报错;

[root@DirHost140 ~]#lvdisplay /dev/mapper/vg04-backup1
--- Logical volume ---
LV Path/dev/vg04/backup1
LV Namebackup1
VG Namevg04
LV UUIDfJcyES-d1sG-IDio-dqmn-icTj-Ptrj-EiO31r
LV Write Acce***ead/write
LV Creation host, time DirHost140.cn.ibm.com,2013-10-11 17:33:13 +0800
LV snapshot statusactive destination for lvtest01
LV Statusavailable
# open1
LV Size3.00 GiB
Current LE768
COW-table size300.00 MiB
COW-table LE75
Allocated to snapshot0.01%
Snapshot chunk size4.00 KiB
Segments1
Allocationinherit
Read ahead sectorsauto
- currently set to256
Block device253:29

当在此逻辑卷快照backup1存储超过300M左右大小的文件,系统会提示I/O错误(这里会出现短暂的延时),当我们再查看逻辑卷快照时,它的状态将变为inactive状态,从而导致逻辑卷快照将被损毁,即不可用。同时自动umount /aaa 挂载,具体细节请见下列清单

[root@DirHost140 ~]#dd if=/dev/mapper/vg04-backup1 of=/aaa/300Mfile bs=30M count=10
10+0 records in
10+0 records out
314572800 bytes (315MB) copied, 3.07172 s, 102 MB/s
Message fromsyslogd@DirHost140 at Oct 11 17:39:53 ...
kernel:journal commit I/O error
[root@DirHost140 /]#lvdisplay /dev/mapper/vg04-backup1
/dev/vg04/backup1: read failed after 0 of4096 at 3221159936: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 3221217280: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 0: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 4096: Input/output error
--- Logical volume ---
LV Path/dev/vg04/backup1
LV Namebackup1
VG Namevg04
LV UUIDfJcyES-d1sG-IDio-dqmn-icTj-Ptrj-EiO31r
LV Write Acce***ead/write
LV Creation host, time DirHost140.cn.ibm.com,2013-10-11 17:33:13 +0800
LV snapshot statusINACTIVE destination for lvtest01
LV Statusavailable
# open0
LV Size3.00 GiB
Current LE768
COW-table size300.00 MiB
COW-table LE75
Snapshot chunk size4.00 KiB
Segments1
Allocationinherit
Read ahead sectorsauto
- currently set to256
Block device253:29

即使逻辑卷快照能扩大其空间大小并激活它,但里面的数据已破坏,已经失去备份文件的机制,相当于一个无效的快照文件,因此需要移除它。

[root@DirHost140 /]#lvchange -ay /dev/vg04/backup1
/dev/vg04/backup1: read failed after 0 of 4096at 3221159936: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 3221217280: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 0: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 4096: Input/output error
Change of snapshotbackup1 will also change its origin lvtest01. Proceed? [y/n]: y
[root@DirHost140 /]#lvdisplay /dev/vg04/backup1|grep 'snapshot status'
/dev/vg04/backup1: read failed after 0 of4096 at 3221159936: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 3221217280: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 0: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 4096: Input/output error
LV snapshot statusINACTIVE destination for lvtest01
[root@DirHost140 /]#mount /dev/vg04/backup1 /aaa
mount: you mustspecify the filesystem type
[root@DirHost140 /]#

卸载逻辑卷快照

快照也占用了卷组的空间,因此适当的卸载未多大作用的快照 是非常有必要的.

[root@DirHost140 /]#lvremove /dev/vg04/backup1
/dev/vg04/backup1: read failed after 0 of4096 at 3221159936: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 3221217280: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 0: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 4096: Input/output error
Do you really want toremove active logical volume backup1? [y/n]: y
Logical volume "backup1"successfully removed
[root@DirHost140 /]#

移动物理卷

用来实体磁盘的分区快要出故障了,或者你打算用较快SDD硬盘来换较慢的硬盘.这里LVM采用pvremove 指令可以将某个物理卷的数据移动另一个物理卷上.

必须采取的步骤:

(1)加入新的物理卷到卷组中.

加入新的物理卷

[root@DirHost140 ~]# pvcreate /dev/sdd2
Physicl volume"/dev/sdd2"successfullycreated

扩展卷组大小

[root@DirHost140 ~]# vgextendvg04 /dev/sdd2
Volume group"vg04" successfully extended

查看卷组

通过pvscan可以发现新增的物理卷成功加入到卷组中了.

[root@DirHost140 ~]#pvscan
PV /dev/sdd1VG vg04lvm2 [20.01 GiB / 17.01GiB free]
PV /dev/sdd2VG vg04lvm2 [20.01 GiB / 20.01GiB free] #新增物理卷,未使用

移动物理卷数据到新加入的物理卷

新增的物理卷加入到卷组后就可以移动旧物理卷的数据了,这会用到指令pvmove 指令

进行数据的移动. 同时移动物理卷数据是一个高风险的行为. 请在执行这个步骤前,务必备份好所有数据.

[root@DirHost140 ~]#pvmove /dev/sdd1 /dev/sdd2
/dev/sdd1: Moved: 0.5%
/dev/sdd1: Moved: 26.2%
/dev/sdd1: Moved: 50.4%
/dev/sdd1: Moved: 75.1%
/dev/sdd1: Moved: 99.0%
/dev/sdd1: Moved: 100.0%
[root@DirHost140 /]#pvscan
PV /dev/sdd1VG vg04lvm2 [20.01 GiB / 20.01GiB free]
PV /dev/sdd2VG vg04lvm2 [20.01 GiB / 17.01 GiB free]
[root@DirHost140 ~]#umount /aaa
[root@DirHost140 ~]#mount /dev/vg04/lvtest01 /aaa
[root@DirHost140 ~]#cd /aaa/; ls

将旧的物理卷从物理卷中移除

通过以上事例的话就可以卸载原来(旧)物理卷,需要使用指令,pvremove 进行卸载工作.

在卸载物理卷前,我们必须先卸载卷组,才可以进行. 按顺序实施.

[root@DirHost140 /]#umount/aaa
[root@DirHost140 /]#vgreduce vg04 /dev/sdd1
Removed "/dev/sdd1" from volumegroup "vg04"
[root@DirHost140 /]#pvremove /dev/sdd1
Labelson physical volume "/dev/sdd1" successfully wiped
[root@DirHost140 /]#pvscan
PV /dev/sdd2VG vg04lvm2 [20.01 GiB / 17.01GiB free]

sdd1已经从卷组中卸载掉了,数据已经迁移到sdd2上了,并投入使用了。其数据不会丢失,在此查询并挂载刚才之前的lvtest01,可发现数据依然存在.

[root@DirHost140 /]#mount /dev/vg04/lvtest01 /aaa/ ; ls
LAFix_getNativeUpd.shLAFix_SDD_param.txttest.sh
[root@DirHost140 /]#df -Th /dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext43.0G69M2.8G3% /aaa

迁移整个LVM磁盘系统至其他Linux系统

迁移LVM到另外一台计算机中,通常采取三个步骤即可。第一步,在原先的计算机中导出卷组;第二步,将LVM的磁盘安装到目的计算机上,第三步,在目的计算机中输入卷组.


导出卷组

用到vgexport 指令,导出前卸载该卷组中的所有逻辑卷,并使用vgchange 将卷组修改为非有效(Inactive)配置.

[root@DirHost140 ~]#umount /dev/vg04/lvtest01
[root@DirHost140 ~]#vgchange -a n vg04
0 logical volume(s) in volume group"vg04" now active
[root@DirHost140 ~]#vgexport vg04^C
[root@DirHost140 ~]#vgexport vg04
Volume group "vg04" successfullyexported

导出卷组后,就可以把该群组的所有物理卷的磁盘安装到目的计算机上了,即可实施导入卷组。

在另外一台Linux导入卷组

在开始导入卷组前,确认先扫描下所有物理卷,让RedHatLinux可以驱动这些物理卷.可以使用vgimport指令来导入卷组,导入后 修改有效的(Active)配置,才可以挂载使用其文件系统.

[root@dirhost162 ~]#pvscan
PV /dev/sdd2VG vg04lvm2 [20.01 GiB / 17.01GiB free]
PV /dev/sdb1VG vg01lvm2 [1.17 TiB / 750.00GiB free]
PV /dev/sdb2VG vg01lvm2 [500.01 GiB /500.01 GiB free]
[root@dirhost162 ~]#vgimport vg04
Volume group "vg04" successfullyimported
[root@dirhost162 ~]#vgchange -a y vg04#激活卷组
1 logical volume(s) in volume group"vg04" now active

验证新导入卷组的数据

[root@dirhost162 ~]#mount /dev/vg04/lvtest01 /mnt
[root@dirhost162 ~]#cd /mnt/;ls
LAFix_getNativeUpd.shLAFix_SDD_param.txttest.sh

根据上面的实例可以看到,LVM具有很好的可伸缩性,使用起来非常方便,可以方便地对卷组、逻辑卷的大小进行调整,它也可结合群集系统一起使用,也可以更好的发挥特性,同时通过本篇的文章可以掌握LVM使用技巧。