LVM( Logical Volume Manager)是什么?
- 是一种磁盘分区管理方式。
为什么使用LVM?
- 基本分区方式虽然能够有效地提高硬盘设备的读写速度和数据的安全性,但是在硬盘分好区之后,再去修改硬盘分区大小就不太容易了,当我们想要随着实际需求的变化调整硬盘分区大小时就可以使用LVM。
比如当你有一个很大的柜子(柜子就是硬盘),你需要把它们分成你所需要的某个空间来去分别装你的东西,例如衣服,裤子,书本等等。那当你使用MBR分区时,分好的空间就不能变化了,使用完毕之后就需要换一个空间去放更多的东西;那你使用LVM分区时,当你的分好的空间使用完毕后,你可以选择给它拓展添加,相当于一个分好空间的小柜子,你可以给他把这个小柜子拓展大,去往里面放更多的东西。
LVM技术架构
- PP:物理分区(Physical Partition)----如硬盘的分区,或 RAID 分区。
- PV:物理卷(Physical volume)----是 物理分区 的 LVM 抽象,它维护了 物理分区 的结构信息,是组成卷组的基本逻辑单元,一般一个 物理卷 对应一个 物理分区。
- PE:物理块(Physical Extent) ----默认为4MB的基本块,每个 物理卷 都会以 物理块 为基本单元划分。
- VG:卷组(Volume Group) ----它可由一个或数个 物理卷 组成,相当于 LVM 的存储池。
- LV:逻辑卷(Logical Volume) ----建立在 卷组 之上,文件系统之下,由若干个 逻辑快 组成。
- LE:逻辑块(Logical Extent) ----组成 逻辑卷 的基本单元,一个 逻辑块 对应一个 物理块。
总的来说,LVM具有很好的可伸缩性,可以动态调整所需要使用的磁盘空间。
LVM管理(相关操作)
- 准备继续操作的硬盘
[root@tong ~]# ll /dev/sd* //显示磁盘文件
brw-rw----. 1 root disk 8, 0 Dec 22 20:51 /dev/sda
brw-rw----. 1 root disk 8, 1 Dec 22 20:51 /dev/sda1
brw-rw----. 1 root disk 8, 2 Dec 22 20:51 /dev/sda2
brw-rw----. 1 root disk 8, 16 Dec 22 20:51 /dev/sdb
brw-rw----. 1 root disk 8, 32 Dec 22 20:51 /dev/sdc
brw-rw----. 1 root disk 8, 48 Dec 22 20:51 /dev/sdd
- 将物理磁盘转换成物理卷,让物理卷设备支持LVM(pvcreate)
[root@tong ~]# pvcreate /dev/sdb //将物理磁盘,转换成物理卷-PV
Physical volume "/dev/sdb" successfully created.
[root@tong ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
- 将硬盘加入到卷组中(vgcreate)
[root@tong ~]# vgcreate vg1 /dev/sdb //创建卷组-VG
Volume group "vg1" successfully created
- 切割出一个大小为200M的逻辑卷设备(lvcreate)
[root@tong ~]# lvcreate -L 200M -n lv2 vg1 //-L长度大小 -n 卷的名字
Logical volume "lv2" created.
- 将生成的逻辑卷格式化并挂载(mkfs.文件系统类型;mount)
[root@tong ~]# mkfs.ext4 /dev/vg1/lv2 //创建文件系统
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33816576
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
[root@tong ~]# mkdir /mnt/lv2 //创建目录
[root@tong ~]# mount /dev/vg1/lv2 /mnt/lv2/ //挂载到相应的目录下(手动挂载);自动挂载的话也是编辑/etc/fstab文件
[root@tong ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 17G 2.5G 15G 15% /
devtmpfs devtmpfs 476M 0 476M 0% /dev
tmpfs tmpfs 488M 0 488M 0% /dev/shm
tmpfs tmpfs 488M 7.7M 480M 2% /run
tmpfs tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 142M 873M 14% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/vg1-lv2 ext4 190M 1.6M 175M 1% /mnt/lv2 //挂载成功
- 当相应的逻辑卷空间使用完毕后进行相应的扩容(lvextend)
[root@tong ~]# cp -rf /etc/ /mnt/lv2/etc1
[root@tong ~]# cp -rf /etc/ /mnt/lv2/etc2
[root@tong ~]# cp -rf /etc/ /mnt/lv2/etc3
[root@tong ~]# cp -rf /etc/ /mnt/lv2/etc4
[root@tong ~]# cp -rf /etc/ /mnt/lv2/etc5
[root@tong ~]# cp -rf /etc/ /mnt/lv2/etc6
[root@tong ~]# cp -rf /etc/ /mnt/lv2/etc7
cp: error writing ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/nx/hll’: No space left on device //复制出现错误,需要扩容
cp: failed to extend ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/nx/hll’: No space left on device
cp: error writing ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/obex/hll’: No space left on device
cp: failed to extend ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/obex/hll’: No space left on device
cp: error writing ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/obex/lang_ext’: No space left on device
cp: failed to extend ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/obex/lang_ext’: No space left on device
cp: cannot create directory ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/oddjob’: No space left on device
cp: cannot create directory ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/openct’: No space left on device
cp: cannot create directory ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/openshift’: No space left on device
cp: cannot create directory ‘/mnt/lv2/etc7/selinux/targeted/active/modules/100/openshift-origin’: No space left on device
[root@tong ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 17G 2.5G 15G 15% /
devtmpfs devtmpfs 476M 0 476M 0% /dev
tmpfs tmpfs 488M 0 488M 0% /dev/shm
tmpfs tmpfs 488M 7.7M 480M 2% /run
tmpfs tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 142M 873M 14% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/vg1-lv2 ext4 190M 186M 0 100% /mnt/lv2 //利用率达到100%
[root@tong ~]# 写不了以前就是换个磁盘,现在可以直接扩容^C
[root@tong ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg1 1 1 0 wz--n- <5.00g 4.80g
[root@tong ~]# 卷组有不有空间^C
[root@tong ~]# lvextend -L +200M /dev/vg1/lv2 //给/dev/vg1/lv2扩容200M,XFS文件系统不支持扩容
Size of logical volume vg1/lv2 changed from 200.00 MiB (50 extents) to 400.00 MiB (100 extents).
Logical volume vg1/lv2 successfully resized
[root@tong ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 17G 2.5G 15G 15% /
devtmpfs devtmpfs 476M 0 476M 0% /dev
tmpfs tmpfs 488M 0 488M 0% /dev/shm
tmpfs tmpfs 488M 7.7M 480M 2% /run
tmpfs tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 142M 873M 14% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/vg1-lv2 ext4 190M 186M 0 100% /mnt/lv2
[root@tong ~]# resize2fs /dev/vg1/lv2 //重置大小到文件系统
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg1/lv2 is mounted on /mnt/lv2; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 4
The filesystem on /dev/vg1/lv2 is now 409600 blocks long.
[root@tong ~]# 重置大小到文件系统 给文件目录下^C
[root@tong ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 17G 2.5G 15G 15% /
devtmpfs devtmpfs 476M 0 476M 0% /dev
tmpfs tmpfs 488M 0 488M 0% /dev/shm
tmpfs tmpfs 488M 7.7M 480M 2% /run
tmpfs tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 142M 873M 14% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/vg1-lv2 ext4 384M 187M 175M 52% /mnt/lv2 //扩容成功
LVM快速备份(快照)
1.实现
[root@tong ~]# lvcreate -L 350M -s -n lv2-snap /dev/vg1/lv2 //-s 备份
Rounding up size to full physical extent 352.00 MiB
Logical volume "lv2-snap" created.
[root@tong ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv2 vg1 owi-aos--- 400.00m
lv2-snap vg1 swi-a-s--- 352.00m lv2 0.01
2.备份恢复(测试)
[root@tong ~]# mkdir /mnt/lv2-snap
[root@tong ~]# ll /mnt/lv2-snap/
total 0
[root@tong ~]# mount /dev/vg1/lv2-snap /mnt/lv2-snap/ -o ro //将备份的文件挂载到一个目录下 -o 只读
[root@tong ~]# ll /mnt/lv2-snap/ //挂载的目录下有文件,恢复成功,可以对里面的文件操作
total 66
drwxr-xr-x. 93 root root 6144 Dec 22 21:12 etc1
drwxr-xr-x. 93 root root 6144 Dec 22 21:12 etc2
drwxr-xr-x. 93 root root 6144 Dec 22 21:12 etc3
drwxr-xr-x. 93 root root 6144 Dec 22 21:13 etc4
drwxr-xr-x. 93 root root 6144 Dec 22 21:13 etc5
drwxr-xr-x. 93 root root 6144 Dec 22 21:13 etc6
drwxr-xr-x. 67 root root 5120 Dec 22 21:13 etc7
drwx------. 2 root root 12288 Dec 22 21:00 lost+found
[root@tong ~]# df -hT //查看
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 17G 2.5G 15G 15% /
devtmpfs devtmpfs 476M 0 476M 0% /dev
tmpfs tmpfs 488M 0 488M 0% /dev/shm
tmpfs tmpfs 488M 7.7M 480M 2% /run
tmpfs tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 142M 873M 14% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/vg1-lv2 ext4 384M 187M 175M 52% /mnt/lv2
/dev/mapper/vg1-lv2--snap ext4 384M 187M 175M 52% /mnt/lv2-snap
[root@tong ~]# lvscan
ACTIVE '/dev/centos/swap' [2.00 GiB] inherit
ACTIVE '/dev/centos/root' [<17.00 GiB] inherit
ACTIVE Original '/dev/vg1/lv2' [400.00 MiB] inherit
ACTIVE Snapshot '/dev/vg1/lv2-snap' [352.00 MiB] inherit
[root@tong ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv2 vg1 owi-aos--- 400.00m
lv2-snap vg1 swi-aos--- 352.00m lv2 0.01
命令小结
功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
scan(扫描) | pvscan | vgscan | lvscan |
create(建立) | pvcreate | vgcreate | lvcreate |
display(显示) | pvdisplay | vgdisplay | lvcreate |
remove(删除) | pvremove | vgremove | lvremove |
extend(扩展) | vgextend | lvextend | |
reduce(减少) | vgreduce | lvreduce |