LVM是什么?为什么要使用LVM?
![LVM原理、创建、扩容、缩减、快照详解]()
此图转自维基百科 实战:创建、扩容、缩减、快照 系统环境 当前系统分区信息,当前系统有2块新硬盘,分别为20G
[root@server2 ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x0002777c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 208813+ 83 linux
/dev/sda2 27 1985 15735667+ 83 Linux
/dev/sda3 1986 2247 2104515 82 Linux swap / Solaris
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0xdee177d5
Device Boot Start End Blocks Id System
Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x00000000 LVM相关命令解释 vg管理工具:
vgs #查看vg简要信息
vgdisplay #查看vg详细信息
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #创建vg
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #扩展vg容量
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #缩减vg容量
vgremove VolumeGroupName #删除vg
lv管理工具:
lvs #查看lv简要信息
lvdisplay #查看lv详细信息
lvcreate -L #[mMgGtT] -n NAME VolumeGroup #创建lv
lvremove /dev/VG_NAME/LV_NAME #删除lv
扩展逻辑卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME #扩展逻辑卷
resize2fs /dev/VG_NAME/LV_NAME #重新定义文件系统大小
缩减逻辑卷:
umount /dev/VG_NAME/LV_NAME #卸载lv
e2fsck -f /dev/VG_NAME/LV_NAME #检查lv
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT] #重新定义lv大小
lvreduce -L [-] [mMgGtT] /dev/VG_NAME/LV_NAME #缩减lv LVM创建 [root@server2 ~]# pvcreate /dev/sdb #将sdb硬盘添加到PV池中
Physical volume "/dev/sdb" successfully created
[root@server2 ~]# pvcreate /dev/sdc #将sdc硬盘添加到PV池中
Physical volume "/dev/sdc" successfully created
[root@server2 ~]# pvs #查看PV池
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm2 --- 20.00g 20.00g
[root@server2 ~]# vgcreate myvg /dev/sdb #创建名称为myvg的卷组,由/dev/sdb提供PE
Volume group "myvg" successfully created #提示vg创建成功
[root@server2 ~]# vgs #查看vg简要信息
VG #PV #LV #SN Attr VSize VFree
myvg 1 1 0 wz--n- 20.00g 10.00g
[root@server2 ~]# lvcreate -L 10G -n mylv myvg #在myvg下创建容量为10G、名称为mylv的lv
Logical volume "mylv" created.
[root@server2 ~]# lvs #查看lv简要信息
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 10.00g
[root@server2 ~]# mkfs.ext4 /dev/mapper/myvg-mylv #格式化lv为ext4文件系统
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
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 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, 1605632
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ #将mylv挂载到/mnt下
[root@server2 ~]# df -lh #查看mylv分区使用情况
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 3.4G 11G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 36M 148M 20% /boot
/dev/mapper/myvg-mylv
9.8G 23M 9.2G 1% /mnt LVM扩展
Volume group "myvg" successfully extended
[root@server2 ~]# vgs #查看vg当前信息,myvg大小为40G
VG #PV #LV #SN Attr VSize VFree
myvg 2 1 0 wz--n- 39.99g 29.99g
[root@server2 ~]# umount /mnt/ #卸载mylv
[root@server2 ~]# lvextend -L 30G /dev/myvg/mylv #扩展lv到30G
Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 30.00 GiB (7680 extents).
Logical volume mylv successfully resized
[root@server2 ~]# lvs #查看当前lv信息,mylv为30G
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 30.00g
[root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ #挂载mylv到/mnt目录
[root@server2 ~]# df ##注意:这里显示mylv大小只有10G,这是因为我们没有进行重新定义
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 15357672 3527844 11043048 25% /
tmpfs 502384 0 502384 0% /dev/shm
/dev/sda1 198123 36589 151094 20% /boot
/dev/mapper/myvg-mylv
10190136 23028 9642820 1% /mnt
[root@server2 ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 3.4G 11G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 36M 148M 20% /boot
/dev/mapper/myvg-mylv
9.8G 23M 9.2G 1% /mnt
[root@server2 ~]# resize2fs /dev/mapper/myvg-mylv #使用resize2fs可以重新定义分区的大小
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/myvg-mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/mapper/myvg-mylv to 7864320 (4k) blocks.
The filesystem on /dev/mapper/myvg-mylv is now 7864320 blocks long.
[root@server2 ~]# df -lh #现在mylv大小终于恢复正常了
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 3.4G 11G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 36M 148M 20% /boot
/dev/mapper/myvg-mylv
30G 28M 28G 1% /mnt LVM缩减
[root@server2 ~]# resize2fs /dev/mapper/myvg-mylv 8G
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/mapper/myvg-mylv' first. #提示需先使用e2fsck命令检查文件系统
[root@server2 ~]# e2fsck -f /dev/mapper/myvg-mylv #检查mylv文件系统
e2fsck 1.41.12 (17-May-2010)
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
LVM( L ogical V olume M anager):逻辑卷管理, 在日常使用或生产环境中, 我们可能会因为在规划存储时未考虑到未来数据增长的速度超乎我们的预计而措手不及,因为增加一块硬盘再将源数据移到新硬盘上很麻烦并且提高了成本还浪费硬盘空间。
在1998年有人在开发了一个基于卷的管理方式, 在HP-UX中使用,这就是LVM,LVM可以无损扩容、缩减空间来达到应对硬盘空间不足的情况。
LVM相关原理LVM通过内核中的dm(device mapper)模块实现使用纯软件的方式将一个或多个底层硬件设备组织成一个或多个逻辑设备。
相关术语:
PV:Physical Volume#一般是物理分区 /dev/sd##…
VG:Volume Group#由多个PE组成,创建卷组时可指定PE大小
PE:Physical Extent#默认大小为4M,LVM中的最小单元
LV:Logical Volume#由多个PE组成
LE:Logical Extent#在LV中的PE称作LE
LVM通过PV组成PV池,基于PV创建VG,VG由若干个PE组成,在VG中由多个PE组成LV,在LV中PE叫做LE。
原理图:

此图转自维基百科 实战:创建、扩容、缩减、快照 系统环境 当前系统分区信息,当前系统有2块新硬盘,分别为20G
[root@server2 ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x0002777c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 208813+ 83 linux
/dev/sda2 27 1985 15735667+ 83 Linux
/dev/sda3 1986 2247 2104515 82 Linux swap / Solaris
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0xdee177d5
Device Boot Start End Blocks Id System
Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x00000000 LVM相关命令解释 vg管理工具:
vgs #查看vg简要信息
vgdisplay #查看vg详细信息
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #创建vg
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #扩展vg容量
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] #缩减vg容量
vgremove VolumeGroupName #删除vg
lv管理工具:
lvs #查看lv简要信息
lvdisplay #查看lv详细信息
lvcreate -L #[mMgGtT] -n NAME VolumeGroup #创建lv
lvremove /dev/VG_NAME/LV_NAME #删除lv
扩展逻辑卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME #扩展逻辑卷
resize2fs /dev/VG_NAME/LV_NAME #重新定义文件系统大小
缩减逻辑卷:
umount /dev/VG_NAME/LV_NAME #卸载lv
e2fsck -f /dev/VG_NAME/LV_NAME #检查lv
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT] #重新定义lv大小
lvreduce -L [-] [mMgGtT] /dev/VG_NAME/LV_NAME #缩减lv LVM创建 [root@server2 ~]# pvcreate /dev/sdb #将sdb硬盘添加到PV池中
Physical volume "/dev/sdb" successfully created
[root@server2 ~]# pvcreate /dev/sdc #将sdc硬盘添加到PV池中
Physical volume "/dev/sdc" successfully created
[root@server2 ~]# pvs #查看PV池
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm2 --- 20.00g 20.00g
[root@server2 ~]# vgcreate myvg /dev/sdb #创建名称为myvg的卷组,由/dev/sdb提供PE
Volume group "myvg" successfully created #提示vg创建成功
[root@server2 ~]# vgs #查看vg简要信息
VG #PV #LV #SN Attr VSize VFree
myvg 1 1 0 wz--n- 20.00g 10.00g
[root@server2 ~]# lvcreate -L 10G -n mylv myvg #在myvg下创建容量为10G、名称为mylv的lv
Logical volume "mylv" created.
[root@server2 ~]# lvs #查看lv简要信息
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 10.00g
[root@server2 ~]# mkfs.ext4 /dev/mapper/myvg-mylv #格式化lv为ext4文件系统
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
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 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, 1605632
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ #将mylv挂载到/mnt下
[root@server2 ~]# df -lh #查看mylv分区使用情况
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 3.4G 11G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 36M 148M 20% /boot
/dev/mapper/myvg-mylv
9.8G 23M 9.2G 1% /mnt LVM扩展
我们现在想将mylv扩展到30G该如何操作?
应该先将myvg扩展到30G以上,在将mylv扩展到30G
操作过程
[root@server2 ~]# vgextend myvg /dev/sdc #扩展myvg,将sdc的空间也提供给myvgVolume group "myvg" successfully extended
[root@server2 ~]# vgs #查看vg当前信息,myvg大小为40G
VG #PV #LV #SN Attr VSize VFree
myvg 2 1 0 wz--n- 39.99g 29.99g
[root@server2 ~]# umount /mnt/ #卸载mylv
[root@server2 ~]# lvextend -L 30G /dev/myvg/mylv #扩展lv到30G
Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 30.00 GiB (7680 extents).
Logical volume mylv successfully resized
[root@server2 ~]# lvs #查看当前lv信息,mylv为30G
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 30.00g
[root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/ #挂载mylv到/mnt目录
[root@server2 ~]# df ##注意:这里显示mylv大小只有10G,这是因为我们没有进行重新定义
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 15357672 3527844 11043048 25% /
tmpfs 502384 0 502384 0% /dev/shm
/dev/sda1 198123 36589 151094 20% /boot
/dev/mapper/myvg-mylv
10190136 23028 9642820 1% /mnt
[root@server2 ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 3.4G 11G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 36M 148M 20% /boot
/dev/mapper/myvg-mylv
9.8G 23M 9.2G 1% /mnt
[root@server2 ~]# resize2fs /dev/mapper/myvg-mylv #使用resize2fs可以重新定义分区的大小
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/myvg-mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/mapper/myvg-mylv to 7864320 (4k) blocks.
The filesystem on /dev/mapper/myvg-mylv is now 7864320 blocks long.
[root@server2 ~]# df -lh #现在mylv大小终于恢复正常了
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 3.4G 11G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 36M 148M 20% /boot
/dev/mapper/myvg-mylv
30G 28M 28G 1% /mnt LVM缩减
缩减mylv到10G
操作过程
[root@server2 ~]# umount /mnt/ #先卸载挂载目录[root@server2 ~]# resize2fs /dev/mapper/myvg-mylv 8G
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/mapper/myvg-mylv' first. #提示需先使用e2fsck命令检查文件系统
[root@server2 ~]# e2fsck -f /dev/mapper/myvg-mylv #检查mylv文件系统
e2fsck 1.41.12 (17-May-2010)
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