首页 > 代码库 > 逻辑卷管理器(LVM)
逻辑卷管理器(LVM)
1、逻辑卷管理器(LVM)
(1)逻辑卷管理器(LVM,logical volume manager)可以整合多个物理分区在一起,让这些分区看起来就像一个磁盘一样,而且,还可以在将来其他的物理分区或将其从这个LVM管理的磁盘中删除。这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,同时LVM还有快照功能。
(2)逻辑卷管理器的基本术语 物理卷(PV):简单说,物理卷就是磁盘或者是磁盘分区,由pvcreate命令创建。 物理扩展块(PE):LVM默认使用4MB的PE块,在LVM的卷组总最多只能含有65534个PE,因此默认的PE大小是256G。PE是整个LVM最小的存储块。 卷组(VG):将多个物理卷,使用vgcreate命令整合成一个大的磁盘,即为卷组,卷组的大小有物理卷的数量和大小决定。 逻辑卷(LG):逻辑卷是在卷组的基础上可以被格式化为文件系统的分区,大小有PE的块数决定。使用lvcreate命令创建。
2、创建物理卷(physical volume)
pvcreate:将物理分区新建成PV -f:强制创建物理卷,不需要用户确认; -u:指定设备的UUID; -y:所有的问题都回答“yes”; -Z:是否利用前4个扇区。 pvdisplay:显示当前系统上的PV状态 pvdisplay命令显示的物理卷信息包括:物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID pvscan:查询磁盘上所有具有PV的磁盘 -d:调试模式 -e:仅显示属于输出卷组的物理卷 -n:仅显示不属于任何卷组的物理卷 -s:短格式输出 -u:显示UUID pvremove:将PV删除,让该分区不具有PV属性 pvmove:用来将一块盘上的数据移到另一块盘,可以移动整块盘的数据,也可以移动指定 extent 范围的数据 eg:pvmove /dev/sdb /dev/sdc
3、创建卷组(volume group)
vgcreate:创建一个VG -l:卷组上允许创建的最大逻辑卷数; -p:卷组中允许添加的最大物理卷数; -s:卷组上的物理卷的PE大小(单位 M G T大小都可)。 vgscan:查找系统上是否有VG vgdisplay:显示目前系统的VG状态 -A:仅显示活动卷组的属性; -s:使用短格式输出的信息。 vgextend:增加VG的额外PV -t:仅测试。 vgreduce:减少(删除)VG的PV -a:如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷; --removemissing:删除卷组中丢失的物理卷,使卷组恢复正常状态。 vgchange:设置卷组是处于活动状态还是非活动状态 -a:设置卷组的活动状态 vgremove:删除一个VG(先做pvmove ,再做vgremove) -f:强制删除
4、创建逻辑卷(logical volume)
lvcreate:新建一个LV -L:指定逻辑卷的大小,后接容量,此容量需是PE的整数倍,单位为“kKmMgGtT” -l:指定逻辑卷的大小,后接PE个数 -n:后接LV的名称 -s:创建快照 lvscan:查询系统上的LV -b:显示逻辑卷的主设备和次设备号 lvdisplay:显示系统上的LV状态 lvextend:在LV里面增加容量 lvreduce:在LV里面减少容量 lvremove:删除一个LV lvresize:调整LV的大小 resize2fs:调整ext系列系统LV大小 xfs_growfs:调整xfs格式LV大小
5、示例 (虚拟机环境)
[root@localhost ~]# fdisk /dev/sdb (使用fdisk命令创建了四个分区) [root@localhost ~]# lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 200G 0 disk ├─sdb1 8:17 0 5G 0 part ├─sdb2 8:18 0 5G 0 part ├─sdb3 8:19 0 20G 0 part ├─sdb4 8:20 0 1K 0 part (扩展分区) └─sdb5 8:21 0 10G 0 part (逻辑分区) [root@localhost ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created [root@localhost ~]# pvcreate /dev/sdb2 Physical volume "/dev/sdb2" successfully created [root@localhost ~]# pvcreate /dev/sdb3 Physical volume "/dev/sdb3" successfully created [root@localhost ~]# pvcreate /dev/sdb5 Physical volume "/dev/sdb5" successfully created [root@localhost ~]# pvs (建立了4个PV,可以用pvdisplay命令查看更详细信息) PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 ---- 5.01g 5.01g /dev/sdb2 lvm2 ---- 5.01g 5.01g /dev/sdb3 lvm2 ---- 20.01g 20.01g /dev/sdb5 lvm2 ---- 10.00g 10.00g [root@localhost ~]# vgcreate vgtest /dev/sdb{1,2,3,5} (创建名为vgtest的卷组) Volume group "vgtest" successfully created [root@localhost ~]# vgdisplay (vgtest卷组的详细信息) --- Volume group --- VG Name vgtest System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 40.02 GiB PE Size 4.00 MiB (此例子用默认的PE大小) Total PE 10246 Alloc PE / Size 0 / 0 Free PE / Size 10246 / 40.02 GiB VG UUID Xe9pMF-tyCN-Bk5z-ZPub-TVHA-DCVm-hRVyqd [root@localhost ~]# lvcreate -n lvtest -L 15G vgtest Logical volume "lvtest" created. (在vgtest卷组创建了一个15G的逻辑卷lvtestS) [root@localhost ~]# lvdisplay --- Logical volume --- LV Path /dev/vgtest/lvtest LV Name lvtest VG Name vgtest LV UUID qZcbaO-EX0V-QUhw-oDig-Ldoc-5Amp-X8jyUB LV Write Access read/write LV Creation host, time localhost.localdomain, 2016-08-29 22:15:31 +0800 LV Status available # open 0 LV Size 15.00 GiB Current LE 3840 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 [root@localhost ~]# mkfs.ext4 /dev/vgtest/lvtest (将lvtest格式化为ext4系统) [root@localhost ~]# mount /dev/vgtest/lvtest /mnt/lvtest(挂载,若/mnt/lvtest目录需事先存在) [root@localhost ~]# df -h /mnt/lvtest (已经创建好一个15G的LV) Filesystem Size Used Avail Use% Mounted on /dev/mapper/vgtest-lvtest 15G 38M 14G 1% /mnt/lvtest 如果要每次启动系统时自动挂载,需将以下字符写到/etc/fstab文件中 /dev/vgtest/lvtest(建议用UUID) /mnt/lvtest ext4 defaults 0 0
至此一个完整的LVM已经创建好了,接下来补充一下逻辑卷的扩展和压缩
[root@localhost ~]# lvextend -L +5G /dev/vgtest/lvtest (增加5G空间,“+n”表示增加n空间;直接给定一个数字n,则表示增加到n空间,单位 M G T ) Size of logical volume vgtest/lvtest changed from 15.00 GiB (3840 extents) to 20.00 GiB (5120 extents). Logical volume lvtest successfully resized. (成功在lvtest中增加了5G) [root@localhost ~]# df -h /dev/vgtest/lvtest Filesystem Size Used Avail Use% Mounted on /dev/mapper/vgtest-lvtest 15G 38M 14G 1% /mnt/lvtest (但是没显示,为什么?因为在线增加容量存在同步问题) [root@localhost ~]# resize2fs /dev/vgtest/lvtest (使增加的5G容量生效) resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/vgtest/lvtest is mounted on /mnt/lvtest; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/vgtest/lvtest to 5242880 (4k) blocks. The filesystem on /dev/vgtest/lvtest is now 5242880 blocks long. [root@localhost ~]# df -h /mnt/lvtest/ (可以看到已经扩展为20G了) Filesystem Size Used Avail Use% Mounted on /dev/mapper/vgtest-lvtest 20G 42M 19G 1% /mnt/lvtest
注意:LVM的扩展可以不用卸载而在线进行,但是压缩却不能支持的。一般情况下文件系统都会存有数据,如果直接压缩空间的话,很容易造成数据的丢失、损坏。因此压缩空间前需要将已经挂载的系统卸载。现在我们继续接着上面的例子来进行压缩操作吧(压缩操作很危险,要注意做好备份)。
[root@localhost ~]# umount /mnt/lvtest (卸载) [root@localhost ~]# e2fsck -f /dev/vgtest/lvtest (强制检测lvtest,此步必须有) 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 /dev/vgtest/lvtest: 11/1310720 files (0.0% non-contiguous), 122065/5242880 blocks [root@localhost ~]# resize2fs /dev/vgtest/lvtest 10G (降低文件系统的10G容量) resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/vgtest/lvtest to 2621440 (4k) blocks. The filesystem on /dev/vgtest/lvtest is now 2621440 blocks long. [root@localhost ~]# lvreduce -L -10G /dev/vgtest/lvtest (压缩逻辑卷的10G空间) WARNING: Reducing active logical volume to 10.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vgtest/lvtest? [y/n]: y Size of logical volume vgtest/lvtest changed from 20.00 GiB (5120 extents) to 10.00 GiB (2560 extents). Logical volume lvtest successfully resized. [root@localhost ~]# mount /dev/vgtest/lvtest /mnt/lvtest (挂载压缩后的lvtest) [root@localhost ~]# lvscan (可以看到lvtest已经被压缩了10G空间了) ACTIVE ‘/dev/vgtest/lvtest‘ [10.00 GiB] inherit
至此,逻辑卷的压缩也已经完成,以上压缩步骤顺序千万不能乱,否则很容易造成文件损坏。既然说到这了,那么就顺便也来聊聊卷组(VG)压缩吧,压缩卷组前需要确认你要移出卷组的磁盘(或分区)是不包含数据的(避免数据丢失),可以用pvdisplay命令查看。
[root@localhost ~]# pvdisplay (查看那个分区是没有数据的,此例要移除/dev/sdb1,以每个人的实际情况确定删除的PV) --- Physical volume --- PV Name /dev/sdb1 VG Name vgtest PV Size 5.01 GiB / not usable 2.10 MiB Allocatable yes PE Size 4.00 MiB Total PE 1282 Free PE 1282 Allocated PE 0 PV UUID 9ccUO2-yK1I-zYPP-FQJi-yP2e-t1gQ-FZXLkL [root@localhost ~]# vgreduce vgtest /dev/sdb1 (将/dev/sdb1移出vgtest卷组) Removed "/dev/sdb1" from volume group "vgtest" [root@localhost ~]# vgs (查看VG大小,可以看到已经少了5G) VG #PV #LV #SN Attr VSize VFree vgtest 3 1 0 wz--n- 35.02g 25.02g [root@localhost ~]# pvs (可以看到/dev/sdb1已经移出了) PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 ---- 5.01g 5.01g /dev/sdb2 vgtest lvm2 a--u 5.01g 5.01g /dev/sdb3 vgtest lvm2 a--u 20.01g 10.01g /dev/sdb5 vgtest lvm2 a--u 10.00g 10.00g 现在我们再把/dev/sdb1添加回vgtest吧,看下面: [root@localhost ~]# vgextend vgtest /dev/sdb1 Volume group "vgtest" successfully extended [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree vgtest 4 1 0 wz--n- 40.02g 30.02g [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vgtest lvm2 a--u 5.01g 5.01g /dev/sdb2 vgtest lvm2 a--u 5.01g 5.01g /dev/sdb3 vgtest lvm2 a--u 20.01g 10.01g /dev/sdb5 vgtest lvm2 a--u 10.00g 10.00g 如果添加新的设备到VG中,需要先用pvcreate命令创建PV,再用vgextend命令将创建好的PV加入VG中。
6、快照功能
(1)快照相关介绍
1)快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝 2)对于需要备份或者复制的现有数据集临时拷贝以及其它操作来说,快照是最合适的选择。 3)快照只有在它们和原来的逻辑卷不同时才会消耗空间。 在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间。 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据。 建立快照的卷大小只需要原始逻辑卷的15% ~20% 就够了。也可以使用lvextend 放大快照。
由于快照区与原本的LV 共用很多PE 的区块,因此快照区与 被快照的LV 必须要要在同一个VG 上!系统恢复的时候的文 件数量不能高于快照区的实际容量。
7、快照示例
[root@localhost ~]# vgdisplay (确认可用PE的数量) --- Volume group --- VG Name vgtest System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 16 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 4 Act PV 4 VG Size 40.02 GiB PE Size 4.00 MiB Total PE 10246 Alloc PE / Size 2560 / 10.00 GiB Free PE / Size 7686 / 30.02 GiB (如果不够的话需要添加额外的PV哦) VG UUID Xe9pMF-tyCN-Bk5z-ZPub-TVHA-DCVm-hRVyqd [root@localhost ~]# lvcreate -l 524 -s -n testss /dev/vgtest/lvtest (创建一个PE数量为524个名字为testss的快照,详细属性可用lvdisplay查看。其中–s表示要创建快照,-n表示快照的名称,-L 表示快照的大小。) Logical volume "testss" created. [root@localhost ~]# mkdir /mnt/snapshot [root@localhost ~]# mount /dev/vgtest/testss /mnt/snapshot (挂载快照) [root@localhost ~]# df (可以看到快照和原文件属性一样) Filesystem 1K-blocks Used Available Use% Mounted o /dev/mapper/vgtest-lvtest 10190136 23028 9642884 1% /mnt/lvtest /dev/mapper/vgtest-testss 10190136 23028 9642884 1% /mnt/snapshot [root@localhost ~]# umount /mnt/snapshot/ (卸载快照) [root@localhost ~]# cp -r /boot /root /mnt/lvtest [root@localhost ~]# df /mnt/lvtest (可以看到原系统已经有所改变) Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vgtest-lvtest 10190136 197800 9468112 3% /mnt/lvtest [root@localhost ~]# rm -rf /mnt/lvtest/. (将/lvtest里的问都删,也可重新格式化成原格式) [root@localhost ~]# cp -a /mnt/snapshot/. /mnt/lvtest/ (用快照恢复原文件系统) [root@localhost ~]# df /mnt/lvtest/ (可以看到已经恢复了) Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vgtest-lvtest 10190136 23012 9642900 1% /mnt/lvtest
建议:最好将快照卷也备份一下。
本文出自 “新手学Linux” 博客,请务必保留此出处http://kop309.blog.51cto.com/9034739/1844912
逻辑卷管理器(LVM)