LVM2
一.LVM2简单介绍
LVM2:LVM是逻辑卷管理(Logical Volume Manager)的缩写,它最大的作用就是动态的扩展或缩减文件系统的使用空间,以此来提高磁盘分区管理的灵活性。将多块物理磁盘组织成一个逻辑设备,这个逻辑设备在用户看来就是一个大的存储设备。但更像是扩展分区,要想使用的话,得在上面建立逻辑分区。虽然它能实现简单快速的扩展和缩减,但并不能实现文件系统。 封装底层的物理存储设备,并向上提供一个统一的界面或接口。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。逻辑卷才是真正意义上可以动态扩展或缩减的设备。而这设备本身有两种边界,物理边界和逻辑边界(文件系统边界)。所以,一个逻辑卷就相当于一个文件系统,当做一个分区来使用。
二.LVM基本概念
PV(Physical Volume,物理卷):LVM由3层构成,最底层的是PV。创建PV时,可以是分区,磁盘或是RAID,只要是块设备就行。逻辑卷完全可以创建在硬件RAID上(在软RAID上体现不出来优势)。
VG(Volume Group,卷组):卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,PV组合起来的大小就是VG的大小。在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。将一个PV放进VG后,就意味着将PV提供的存储空间划分为一个个的存储单元,叫做PE(物理盘区,逻辑存储单位),类似于RAID中的chunk。在创建卷组时,可以指定PE大小。因此,可以说VG是由一大堆PE组成的。而在逻辑卷上,叫做LE(逻辑盘区)。一个逻辑卷里的PE很可能来自不同物理卷里的PE,因此逻辑卷里存储的数据很可能是来自于不同的磁盘上的。所以,当某个磁盘损坏时,很可能会影响到某个逻辑卷。
LV(Logical Volume,逻辑卷):逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组,一个卷组中也可以只有一个逻辑卷。
三.创建LVM2
准备好磁盘
2.安装LVM管理工具
# rpm -qa | grep "lvm"
# yum install lvm*
3.创建分区并调整分区类型为8e
# fdisk /dev/sdb
[root@localhost ~]# fdisk /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) e Partition number (1-4): 3 First cylinder (1309-7832, default 1309): Using default value 1309 Last cylinder, +cylinders or +size{K,M,G} (1309-7832, default 7832): Using default value 7832 Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1309-7832, default 1309): Using default value 1309 Last cylinder, +cylinders or +size{K,M,G} (1309-7832, default 7832): +5G Command (m for help):
创建了2个5G大小的分区,然后再调整分区类型为8e
Command (m for help): t Partition number (1-6): 5 Hex code (type L to list codes): 8e Changed system type of partition 5 to 8e (Linux LVM) Command (m for help): t Partition number (1-6): 6 Hex code (type L to list codes): 8e Changed system type of partition 6 to 8e (Linux LVM) Command (m for help): p Disk /dev/sdb: 64.4 GB, 64424509440 bytes 255 heads, 63 sectors/track, 7832 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xbf6e8224 Device Boot Start End Blocks Id System /dev/sdb1 1 654 5253223+ fd Linux raid autodetect /dev/sdb2 655 1308 5253255 fd Linux raid autodetect /dev/sdb3 1309 7832 52404030 5 Extended /dev/sdb5 1309 1962 5253223+ 8e Linux LVM /dev/sdb6 1963 2616 5253223+ 8e Linux LVM Command (m for help):
4.创建PV
# pvcreate /dev/sd{5,6}
# pvdisplay | pvs | pvscan
[root@localhost ~]# pvcreate /dev/sdb{5,6} Physical volume "/dev/sdb5" successfully created Physical volume "/dev/sdb6" successfully created [root@localhost ~]#
5.创建VG
# vgcreate -s 32 myvg2 /dev/sdb{5,6}
[root@localhost ~]# vgcreate -s 32 /dev/myvg2 /dev/sdb{5,6} Volume group "myvg2" successfully created [root@localhost ~]#
6.创建LV
# lvcreate -L 5G -n testlv myvg2
[root@localhost ~]# lvcreate -L 5G -n testlv myvg2 Logical volume "testlv" created [root@localhost ~]#
7.格式化LV并挂载
# mke2fs -t ext4 /dev/myvg2/testlv
# moutn /dev/myvg2/testlv /mnt
# df -lh
[root@localhost ~]# mke2fs -t ext4 /dev/myvg2/testlv mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1342177280 40 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 31 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mount /dev/myvg2/testlv /mnt [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg0-root 20G 290M 19G 2% / tmpfs 935M 0 935M 0% /dev/shm /dev/sda1 190M 33M 148M 19% /boot /dev/mapper/vg0-usr 9.8G 2.1G 7.2G 23% /usr /dev/mapper/vg0-var 20G 204M 19G 2% /var /dev/md0 9.8G 23M 9.3G 1% /backup /dev/mapper/myvg2-testlv 4.8G 10M 4.6G 1% /mnt [root@localhost ~]#
这样一个逻辑卷就可以被挂载使用了。
四.VG扩容
1.新创建一个PV
# pvcreate /dev/sdb7
[root@localhost ~]# pvcreate /dev/sdb7 Device /dev/sdb7 not found (or ignored by filtering). [root@localhost ~]# partx -a /dev/sdb BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 BLKPG: Device or resource busy error adding partition 3 BLKPG: Device or resource busy error adding partition 5 BLKPG: Device or resource busy error adding partition 6 [root@localhost ~]# partx -a /dev/sdb # 让内核识别下新建的分区 BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 BLKPG: Device or resource busy error adding partition 3 BLKPG: Device or resource busy error adding partition 5 BLKPG: Device or resource busy error adding partition 6 BLKPG: Device or resource busy error adding partition 7 [root@localhost ~]# clear [root@localhost ~]# pvcreate /dev/sdb7 Physical volume "/dev/sdb7" successfully created [root@localhost ~]#
2.扩容VG
# vgs
# vgextend myvg2 /dev/sdc
# vgs
[root@localhost ~]# vgextend myvg2 /dev/sdb7 Volume group "myvg2" successfully extended [root@localhost ~]#
如果PV中有RAID设备时,对VG进行扩容时,可以通过扩展RAID设备的容量来间接对VG进行扩容。注意:RAID设备/dev/md#大小变化后,需要调整PV大小,操作如下:
# pvresize /dev/md#
以下的VG缩减,LV扩展,移除和删除一个LVM和上面内容大同小异,只需执行相关命令即可。
五.VG缩减
1.卸载文件系统
# umount /mnt
# pvs
2.移除PV
# vgreduce myvg2 /dev/sdb5
# pvs
# vgs
六.LV扩展
1.先扩展物理边界
# lvs
# lvextend -L +5G /dev/myvg2/testlv
# lvs
2.扩展逻辑边界
# resize2fs -p /dev/myvg2/testlv
七.LV缩减
1.先卸载文件系统
# umount /mnt
2.对文件系统进行检测
# fsck -t ext4 /dev/myvg2/testlv
3.先缩减逻辑边界
# resize2fs /dev/myvg2/testlv 3G # 这里将testlv缩减到3G
4.后缩减物理边界
# lvreduce -L 3G /dev/myvg2/testlv
# mount /dev/myvg2/testlv /mnt
八.删除一个LVM
1.卸载文件系统
# umount /mnt
2.移除LV
# lvs
# lvremove /dev/myvg22/testlv
# lvs
3.移除VG
# vgs
# vgremove myvg2
# vgs
4.移除PV
# pvs
# pvremove /dev/sd{5,6,7}
# pvs
九.LVM2常用命令总结
pv常用命令:
pvs:简要pv信息显示
pvdisplay:显示pv的详细信息
pvcreate /dev/DEVICE: 创建pv
pvremove:移除一个PV并抹掉其上的数据。
pvmove:将某个PV上的数据移动到其它PV上。
pvscan: 扫描当前系统上的PV设备
vg常用命令:
vgs:显示vg简要信息
vgdisplay:列出vg详细信息
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
该选项指定PE大小(物理盘区大小),默认为4MB,红帽官方默认是32MB。 将PV加入到VG中后,PV自动会有PE大小。
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
该选项对vg进行扩容
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] 缩减vg(缩减VG的过程,就是拿掉一个或多个PV)。先做pvmove
vgremove:当VG上创建有LV时,不能随便移除VG。
lv常用命令:
lvs:显示逻辑卷简要信息
lvdisplay:显示逻辑卷详细信息
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
-l # 该选项还可以指定创建的LV的PE数量
lvremove /dev/VG_NAME/LV_NAME
移除一个逻辑卷
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME 该命令扩展物理边界
resize2fs /dev/VG_NAME/LV_NAME 该命令扩展逻辑边界
-p:能扩展到多大就扩展多大。
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME 该命令缩减物理边界
快照功能:snapshot
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name
-p 该选项指明快照卷权限(一般为 r ,表示只读)
-s 指明创建的是快照卷
注意:扩展一个逻辑卷风险比较小,不会影响到原有的文件,并且逻辑卷不用卸载就能进行扩展。
一般在扩展或缩减逻辑卷前,都应该先检查下文件系统。
而缩减逻辑卷风险比较大:
(1):不能在线缩减,得先卸载。
(2):确保缩减后的空间大小依然能存储原有的所有数据。
(3):在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态。
快照卷特点:
(1):生命周期为整个数据时长:在这段时长内,数据的增长量不能超出快照卷大小。 超出的话,快照卷自动损坏。
(2):快照卷和原卷必须在一个卷组内。
(3):快照卷一般不允许修改。
(4):所有原卷里的改变不会影响到快照卷里的改变。