首页 > 代码库 > LVM
LVM
LVM
LVM(Logical Volume Manger),是一种磁盘分区管理机制,可以灵活的调整分区的大小。它是将多个硬盘组成卷组的形式实现的。说白了就是通过软件来实现对分区灵活管理。
LVM是将多块硬盘组成PV,再由PV组成VG,VG再组成lv,然后在lv上创建文件系统。
物理存储介:指的就是硬盘等,最基本的存储单元。
PV(physical volume) 物理卷:这个卷的作用就是将多块硬盘创建为能被VG卷组直接调用的格式。
VG (volume group) 卷组:卷组就是由多个由磁盘组成的pv构成,并且在内部创建PE,然后多个PE提供给LV,这样可以灵活的实现扩容和缩减
LV (logical volume )逻辑卷:调用由卷组提供的PE,将其组成一个整体,以便供系统格式化调用。
PE (physical extent),能被LVM调用的最小单元,具有唯一的编号,默认大小4MB。如文件系统中block。
LE (logical extent),能被系统调用的最小单元,和PE大小一样
PV,VG,LV 三者关系如图
一、确定本机是否安装了LVM软件。没有安装,请自行yum安装。
[root@localhost bin]# rpm -qa|grep "lvm" mesa-private-llvm-3.6.2-1.el6.x86_64 lvm2-2.02.143-7.el6.x86_64 lvm2-libs-2.02.143-7.el6.x86_64
二、创建使用工具
上面已经说了,是通过软件来实现对分区的灵活管理。所以创建到使用都是通过一些列命令来来实现的。而这些命令又是按照PV,VG,LV三者的关系区分。三者的命令功能基本相同,方便记忆。不得不说开发人员的心思缜密和用心良苦。
1、lv系列
pvcrate 创建physical volume
e.g. pvcreate /dev/sdb{1,2,3}
pvs,pvdispaly 查看pv简略或者详细信息
pvremove 移除physical volume
pvmove 移动数据 (当需要缩减卷组时,首先应该执行这条命令保证数据被移到卷组的其他physical volume )
e.g. pvmove /dev/sdb3(将要被移除的physical volume)
2、vg系列
vgcreate 创建volume group
-s:pe大小,默认4M
e.g.vgcreate 卷组名(必须指定名称) /dev/sdb{1,2,3}
vgs,vgdispaly 查看vg简略或者详细信息
vgextend(扩充)
e.g.vgextend 卷组名 /dev/sdb4 #将pvcreate /dev/sdb4后的添加至vg卷组中
vgremove(删除)
e.g.vgremove 卷组名 #移除vg整个卷组
vgreduce(移除,缩容)
e.g.vgextend 卷组名 /dev/sdb4 #移除vg卷组的中/dev/sdb4
3、lv系列
lvcreate 创建volume group
-n:指定名称
-L: 指定大小 -l:%vg|pvs|FREE,打算分配这个vg中的百分比 e.g. lvcreate -n 逻辑卷名 -L 5G 卷组名(上面指定的vg名)
lvs,lvdispaly 查看lv简略或者详细信息
lvextend(扩充)
-l:%vg|pvs|FREE,打算分配这个vg中的百分比
-L: 指定大小
vgremove(删除)
e.g.lvremove 卷组名 #移除lv整个逻辑卷组
vgreduce(移除,缩容)
用法选项同扩容一样。
三、分区修改步骤及注意事项
逻辑卷扩展的步骤: 1.先确保扩展的大小;并确保所属的卷组有足够的剩余空间
2、扩展物理边界
最好先卸载,然后用e2fsck 检测一下。
lvextend -L [+]size /path/to/lv_device
3、扩展逻辑边界
resize2fs /path/to/lv_devive
缩减逻辑卷的步骤:
1、卸载卷,并执行强制检查
e2fsck -f /path/to/lv_devive
2、缩减逻辑边界
resize2fs /path/to/lv_device SIZE
3、缩减物理边界:
lvreduce -L [-]size /path/to/lv_device
4、挂载卷
扩展卷组: 1.准备要添加的物理卷
2 扩展卷组:
添加物理卷至卷组中
vgextend vg_name /path/to/device
缩减卷组:
1.确定要移除的物理卷的总空间大小,要小于VG当前的可用空间大小 2.将要移除的物理卷上的所有pe移动至其他PV
pvmove /path/to/pv_device
3.缩减vg
vgreduce vg_name /path/to/pv/device
快照: 也是逻辑卷的一种,提供过去某一时间的元卷的通道
lvcreate -s -L Size -n name 卷组名 -p r,rw /path/to/lv_devsive -p:访问权限
四、使用范例及注意事项
下面以图片中的练习题示例。
1、创建两个大小为20G的分区,创建方法不懂,自行查看关于创建分区的知识。
NOTE:创建分区是,每个分区的编号一定是8e,创建分区结果如上图。
2、将两物理分区创建为PV
[root@localhost bin]# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created
结果显示,physical volume 由/dev/sdb{1,2}成功创建 ,确保正确,我们在用pvs和pvdisplay查看一下。
[root@localhost bin]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 testvg lvm2 a--u 20.01g 20.01g /dev/sdb2 testvg lvm2 a--u 20.01g 20.01g
上面显示格式是PV卷名、VG卷名、卷组格式、卷组属性、PV的大小、PV空闲大小
[root@localhost bin]# pvdisplay --- Physical volume --- PV Name /dev/sdb1 #PV名称 VG Name testvg #VG名称 PV Size 20.01 GiB / not usable 1.12 MiB #PV大小 Allocatable yes #是否可以使用 PE Size 4.00 MiB #默认PE的大小,我们再VG的创建的时候可以修改,最小即为默认大小 Total PE 5122 #PE的总个数 Free PE 5122 #空闲PE的个数 Allocated PE 0 #已经被使用的PE个数 PV UUID 8N4eft-2rvg-jbhd-QHgb-e1iM-Oc1O-74NBM2 #PV的UUID --- Physical volume --- PV Name /dev/sdb2 VG Name testvg PV Size 20.01 GiB / not usable 1.15 MiB Allocatable yes PE Size 4.00 MiB Total PE 5122 Free PE 5122 Allocated PE 0 PV UUID 9pTEAr-aPBT-PwDg-BK8D-up0n-Hbn2-P27yVE
3、创建VG,并指定PE的大小
[root@localhost bin]# vgcreate testvg -s 16M /dev/sdb{1,2} #创建命令 Volume group "testvg" successfully created #显示创建已经成功 [root@localhost bin]# vgs #查看VG的简略信息 VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- 40.00g 40.00g #格式为:VG名称、使用PV的个数、LV的个数、SN、属性、VG的大小、空间VG的大小 [root@localhost bin]# vgdisplay #详细信息关于本机上面的所有VG --- Volume group --- VG Name testvg #VG名 System ID Format lvm2 #VG格式 Metadata Areas 2 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 2 Act PV 2 VG Size 40.00 GiB #VG大小 PE Size 16.00 MiB #PE大小 Total PE 2560 #PE的总个数 Alloc PE / Size 0 / 0 #被使用的PE个数/大小 Free PE / Size 2560 / 40.00 GiB #空闲PE的个数/大小 VG UUID cAK6Jk-b44O-kTEt-eyFH-0h6n-l1er-rBCCE9 #VG的uuid
结果显示testvg这个vg卷组成功创建,接下来我们就不在需要用物理分区路径了。这里就将两个磁盘组成一个包含2560个16M的PE的VG卷组。接下来我们所使用就是这些PE了,根据需要分配一定的PE,就能实现灵活分区。
4、创建LV
[root@localhost bin]# lvcreate -n "testlv" -L 5G testvg #创建命令 Logical volume "testlv" created. #提示创建成功 [root@localhost bin]# lvs #简略信息 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-a----- 5.00g #格式如上 [root@localhost bin]# lvdisplay #详细信息 --- Logical volume --- LV Path /dev/testvg/testlv #创建成功系统分配的路径 LV Name testlv #LV名 VG Name testvg #VG名 LV UUID R6NUAZ-yOGi-s3Bz-c0Nm-43gQ-r5y7-8ubPQj #LV的UUID LV Write Access read/write #可以读写 LV Creation host, time localhost.localdomain, 2016-08-10 13:49:44 +0800 #创建时间,主机 LV Status available #当前状态 # open 0 LV Size 5.00 GiB #LV的大小 Current LE 320 #当前LE的个数 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4
5、(自行增加的要求,目的熟悉掌握文件系统格式化命令)格式化为ext4文件系统,块大小为4096,预留块大小1%,文件系统名“testext4”,并开机挂载至/usr目录
[root@localhost bin]# mke2fs -t ext4 -L "testext4" -m 1 -b 4096 /dev/mapper/testvg-testlv #创建文件系统相关命令, mke2fs 1.41.12 (17-May-2010) Filesystem label=testext4......以下省略 dumpe2fs -h /dev/mapper/testvg-testlv ##查看文件系统相关信息 dumpe2fs 1.41.12 (17-May-2010) Filesystem volume name: testext4 Last mounted on: <not available> Filesystem UUID: 9e0da4a9-03e3-4392-8188-816b165dddf7 ......以下省略 [root@localhost bin]# echo "/dev/mapper/testvg-testlv /users ext4 defaults 0 0" >>/etc/fstab ##通过echo命令追加至/etc/fstab文件,注意每个参数后面的空格 [root@localhost bin]# mount -a 自动挂载存在于/etc/fstab上面的文件系统 [root@localhost bin]# mount | grep "users" ##检查是否挂载成功 /dev/mapper/testvg-testlv on /users type ext4 (rw) [root@localhost bin]# cd /users #切换到新挂载的目录下 [root@localhost users]# ls lost+found ###出现CentOS 6 出现这个文件即代表挂载成功。
6、新新建用户archlinux,并且家目录为/users/archlinux,而后切换用户,并将/etc/pam.d拷贝至家目录下。
[root@localhost users]# useradd -d /users/archlinux archlinux #创建家目录为指定家目录的用户 [root@localhost users]# su - archlinux #切换用户 [archlinux@localhost ~]$ ls [archlinux@localhost ~]$ pwd #显示当前路径 /users/archlinux [archlinux@localhost ~]$ cp -r /etc/pam.d /users/archlinux/ #拷贝文件 [archlinux@localhost ~]$ ls #查看文件是否成功 pam.d
7、扩展testlv为7G,要求archliunx的文件不能丢失。 [archlinux@localhost ~]$ su - root #切换为root用户 [root@localhost users]# lvextend -L 7G /dev/mapper/testvg-testlv #扩张为7G Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents). Logical volume testlv successfully resized.#显示已经成功。 为了安全起见,我们最好再用vgs和vgdisplay
[root@localhost users]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 7.00g #成功了 [root@localhost users]# lvdisplay --- Logical volume --- LV Path /dev/testvg/testlv LV Name testlv VG Name testvg LV UUID R6NUAZ-yOGi-s3Bz-c0Nm-43gQ-r5y7-8ubPQj LV Write Access read/write LV Creation host, time localhost.localdomain, 2016-08-10 13:49:44 +0800 LV Status available # open 1 LV Size 7.00 GiB #成功了。 Current LE 448 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4
在切换至archliunx用户,到自己的家目录下面查看。。这里就不展示结果,因为扩张损坏数据的可能性几乎为0,我也在本机查看了,未损失。若你的不行损失,请检查步骤和自己的RP。
8、收缩至3G,要求数据不损失。
在收缩时一定需要先取消挂载,并且 e2fsck -f 强制检查,收缩完毕后再一次强行检查。注意查看检测结果
[root@localhost ~]# e2fsck -f /dev/mapper/testvg-testlv 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 testext4: 76/327680 files (0.0% non-contiguous), 55962/1310720 blocks
下面开始缩减文件系统大小,此操作慎重。(缩减)
[root@localhost ~]# resize2fs /dev/mapper/testvg-testlv 3G #缩减文件系统 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/testvg-testlv to 786432 (4k) blocks. The filesystem on /dev/mapper/testvg-testlv is now 786432 blocks long.
继续缩减lv的大小,先执行上面的操作,不然会造成不可恢复的错误,不相信你可试试。
[root@localhost ~]# lvreduce -L 3G /dev/mapper/testvg-testlv WARNING: Reducing active logical volume to 3.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce testvg/testlv? [y/n]: y Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents). Logical volume testlv successfully resized.
自行查看用lvs和lvdisply查看修改后的LV大小
再次强制检查此分区
e2fsck -f /dev/mapper/testvg-testlv 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/mapper/testvg-testlv: 75/196608 files (0.0% non-contiguous), 47863/786432 blocks
检查无错误,若出现错误请仔细对照每一步的操作。然后进行挂载和查看数据是否还在。
[root@localhost pam.d]# ls abrt-cli-root eject other runuser-l su-l atd fingerprint-auth passwd setup system-auth authconfig fingerprint-auth-ac password-auth smartcard-auth system-auth-ac authconfig-gtk gdm password-auth-ac smartcard-auth-ac system-config-authentication authconfig-tui gdm-autologin polkit-1 smtp system-config-date chfn gdm-fingerprint poweroff smtp.postfix system-config-kdump chsh gdm-password ppp sshd system-config-keyboard config-util gnome-screensaver reboot ssh-keycat system-config-network crond halt remote su system-config-network-cmd cups login run_init sudo system-config-users cvs newrole
一切正常。
9、创建快照,并备份,和验证快照的功能。因为前面VG还有空间没有完,因此这里直接就用VG剩余的大小。
[root@localhost ~]# lvcreate -s -L 3G -n testlv.backup -p r /dev/testvg/testlv #创建一个大小和原文件相同备份分区 Logical volume "testlv.backup" created. ##提示成功 [root@localhost ~]# mke2fs -t ext4 /dev/mapper/testvg-testlv.backup 挂载分区 mke2fs 1.41.12 (17-May-2010) /dev/mapper/testvg-testlv.backup: Operation not permitted while setting up superblock [root@localhost ~]# mount /dev/mapper/testvg-testlv.backup /mnt mount: block device /dev/mapper/testvg-testlv.backup is write-protected, mounting read-only [root@localhost ~]# cd /mnt [root@localhost mnt]# ls archlinux lost+found #查看文件存在
本文出自 “11539909” 博客,请务必保留此出处http://11549909.blog.51cto.com/11539909/1843876
LVM