LVM逻辑卷常用命令

1、LVM概述

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

2、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 创建流程:

3、LVM的管理命令

4、创建和管理LVM

4.1 创建LVM

4.1.1 创建分区

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

1
2
[root@dirhost140 ~]# fdisk /dev/sdd
Command (m for help):pDisk /dev/sdd: 500.1GB, 500107862016 bytes255 heads, 63sectors/track, 60801 cylindersUnits = cylinders of16065 * 512 = 8225280 bytesSector size(logical/physical): 512 bytes / 512 bytesI/O size(minimum/optimal): 512 bytes / 512 bytesDisk identifier:0x2311983eDevice BootStartEndBlocksIdSystem/dev/sdd11130610490413+83LinuxCommand (m for help):dSelected partition 1Command (m for help):nCommand actioneextendedpprimary partition (1-4)pPartition number(1-4): 1First cylinder(1-60801, default 1):Using default value 1Last cylinder,+cylinders or +size{K,M,G} (1-60801, default 60801): +20GCommand (m for help):tSelected partition 1Hex code (type L tolist codes): 8eChanged system typeof partition 1 to 8e (Linux LVM)Command (m for help):wThe partition tablehas been altered!Calling ioctl() tore-read partition table.Syncing disks.
4.1.2 创建物理卷

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

1
2
[root@dirhost140 ~]# pvcreate /dev/sdd1
Physical volume "/dev/sdd1"successfully created
4.1.3 创建卷组
1
2
[root@dirhost140 ~]# vgcreate vg04 /dev/sdd1
Volume group "vg04" successfullycreated
4.1.4 创建逻辑卷
1
2
[root@dirhost140 ~]# lvcreate -L +5G -n lvtest01 vg04
Logical volume "lvtest01" created

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

1
2
[root@dirhost140 ~]# lvdisplay /dev/vg04/lvtest01
--- Logical volume ---LV Name/dev/vg04/lvtest01VG Namevg04LV UUID6RJCH7-Qbbo-JTMl-Jpec-J6KS-rBgw-rP2uDNLV Write Acce***ead/writeLV Statusavailable# open0LV Size5.00 GiBCurrent LE1280Segments1AllocationinheritRead ahead sectorsauto- currently set to256Block device253:16
4.1.5 挂载并读取LVM
1
2
3
[root@dirhost140 ~]# mount /dev/vg04/lvtest01 /aaa/
[root@dirhost140 ~]# df -Th /dev/vg04/lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on/dev/mapper/vg04-lvtest01ext45.0G138M4.6G3% /aaa

4.2 调整逻辑卷大小

4.2.1 扩大LVM逻辑卷的大小

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

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

扩大逻辑卷1GB 大小

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

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

1
2
3
4
5
6
7
8
[root@DirHost140 ~]# df -Th/dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on/dev/mapper/vg04-lvtest01ext45.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 requiredold desc_blocks = 1,new_desc_blocks = 1Performing 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-lvtest01ext46.0G138M5.5G3% /aaa
4.2.2 减小LVM逻辑卷的大小

减小LVM 3GB的大小空间

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@dirhost140 /]# umount /aaa
[root@dirhost140 /]# resize2fs /dev/vg04/lvtest01
3Gresize2fs 1.41.12(17-May-2010)Filesystem at/dev/vg04/lvtest01 is mounted on /aaa; on-line resizing requiredOn-line shrinkingfrom 1572864 to 786432 not supported.

[root@dirhost140 /]# umount /aaa/
[root@dirhost140 /]# resize2fs /dev/vg04/lvtest01
3Gresize2fs 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 sizesPass 2: Checkingdirectory structurePass 3: Checkingdirectory connectivityPass 4: Checkingreference countsPass 5: Checkinggroup summary information/dev/vg04/lvtest01:11/393216 files (0.0% non-contiguous), 60014/1572864 blocks

[root@dirhost140 /]# resize2fs /dev/vg04/lvtest01
3Gresize2fs 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 GiBTHIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want toreduce lvtest01? [y/n]: yReducing logical volume lvtest01 to 3.00 GiBLogical 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-lvtest01ext43.0G136M2.7G5% /aaa

4.3 LVM高级应用

4.3.1 创建逻辑卷快照

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

建立并读取逻辑卷快照

1
2
3
4
5
6
7
8
9
[root@DirHost140 ~]# df -Th/dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on/dev/mapper/vg04-lvtest01ext43.0G136M2.7G5% /aaa

[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-backup1ext43.0G136M2.7G5% /aaa

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

1
2
[root@DirHost140 ~]# lvdisplay /dev/mapper/vg04
-backup1--- Logical volume ---LV Path/dev/vg04/backup1LV Namebackup1VG Namevg04LV UUIDfJcyES-d1sG-IDio-dqmn-icTj-Ptrj-EiO31rLV Write Acce***ead/writeLV Creation host, time DirHost140.cn.ibm.com,2013-10-11 17:33:13 +0800LV snapshot statusactive destination for lvtest01LV Statusavailable# open1LV Size3.00 GiBCurrent LE768COW-table size300.00 MiBCOW-table LE75Allocated to snapshot0.01%Snapshot chunk size4.00 KiBSegments1AllocationinheritRead ahead sectorsauto- currently set to256Block device253:29

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

1
2
3
4
5
[root@DirHost140 ~]# dd if=/dev/mapper/vg04-backup1 of=/aaa/300M bs=30M count=10
10+0 records in10+0 records out314572800 bytes (315MB) copied, 3.07172 s, 102 MB/sMessage 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/backup1LV Namebackup1VG Namevg04LV UUIDfJcyES-d1sG-IDio-dqmn-icTj-Ptrj-EiO31rLV Write Acce***ead/writeLV Creation host, time DirHost140.cn.ibm.com,2013-10-11 17:33:13 +0800LV snapshot statusINACTIVE destination for lvtest01LV Statusavailable# open0LV Size3.00 GiBCurrent LE768COW-table size300.00 MiBCOW-table LE75Snapshot chunk size4.00 KiBSegments1AllocationinheritRead ahead sectorsauto- currently set to256Block device253:29

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

1
2
3
4
5
6
7
8
[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 errorChange 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 errorLV snapshot statusINACTIVE destination for lvtest01

[root@DirHost140 /]# mount /dev/vg04/backup1 /aaa
mount: you mustspecify the filesystem type
4.3.2 卸载逻辑卷快照

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

1
2
3
4
[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 errorDo you really want toremove active logical volume backup1? [y/n]: y
Logical volume "backup1"successfully removed
[root@DirHost140 /]#
4.3.3 移动物理卷

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

必须采取的步骤:

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

加入新的物理卷

1
2
[root@DirHost140 ~]# pvcreate /dev/sdd2Physicl
volume"/dev/sdd2"successfullycreated

扩展卷组大小

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

查看卷组

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

1
2
3
[root@DirHost140 ~]# pvscanPV /dev/sdd1VG vg04lvm2
[20.01 GiB / 17.01GiB free]PV /dev/sdd2VG vg04lvm2 [20.01 GiB / 20.01GiB free]
#新增物理卷,未使用
4.3.4 移动物理卷数据到新加入的物理卷

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

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

1
2
3
4
5
6
7
[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 /]# pvscanPV /dev/sdd1
VG 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
4.3.5 将旧的物理卷从物理卷中移除

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

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

1
2
3
4
5
6
7
[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 /]# pvscanPV /dev/sdd2
VG vg04lvm2 [20.01 GiB / 17.01GiB free]

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

1
2
3
4
[root@DirHost140 /]# mount /dev/vg04/lvtest01 /aaa/

[root@DirHost140 /]# df -Th /dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on/dev/mapper/vg04-lvtest01ext43.0G69M2.8G3% /aaa
4.3.6 迁移整个LVM磁盘系统至其他Linux系统

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

导出卷组

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

1
2
3
4
5
[root@DirHost140 ~]# umount /dev/vg04/lvtest01
[root@DirHost140 ~]# vgchange -a n vg040
logical volume(s) in volume group"vg04" now active
[root@DirHost140 ~]# vgexport vg04
Volume group "vg04" successfullyexported

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

在另外一台Linux导入卷组

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

1
2
3
4
5
6
7
[root@dirhost162 ~]# pvscanPV /dev/sdd2
VG 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

验证新导入卷组的数据

1
2
[root@dirhost162 ~]# mount /dev/vg04/lvtest01 /mnt
[root@dirhost162 ~]# cd /mnt/

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

-------------本文结束感谢您的阅读-------------