Centos6.4 下配置LVM(逻辑卷管理)
LVM是一种磁盘空间扩展的方案,使用场景并不是很多,如果要做某个分区的动态扩容,排除raid之外,可以考虑用lvm来做一下。kvm虚拟化可能会用到,以防止上面运行的虚拟机磁盘的动态扩容。
一、LVM简介
1.1 介绍
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
1.2 lvm相关术语
PV(physical
volume):也就是物理磁盘,物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。它只是在物理分区中划出了一个特殊的区域,用于记载与LVM相关的管理参数。
VG(volume
group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical
volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。可以是卷组所有可用空间,本身有两种边界,一个是物理边界,一个是逻辑边界;也可以说每个逻辑卷就是个文件系统,或者是个独立的分区。对卷创建了快照实际上是对逻辑卷创建快照,快照卷也就是跟它的逻辑卷在同一个卷组当中。
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
1.3 命令介绍
物理卷命令:
pvcreate(创建pv)
pvs(查看pv信息)
pvdisplay(查看pv详细信息)
pvmove(将PV数据转移至其他PV)
pvremove(删除pv)
pvscan(扫描pv)
pvcreate:创建pv物理卷
pvs:查看pv物理卷
pvdisplay:查看pv详细信息
pvmove:将pv物理卷上的数据移动到其他pv
卷组命令
vgcreate(创建vg)
vgremove(删除vg)
vgextend(扩展vg)
vgreduce(缩减vg )
vgs(查看vg信息)
vgdisplay(查看vg详细信息)
vgscan(扫描vg)
逻辑卷命令
lvcreate(创建lv)
lvremove(删除lv)
lvextend(扩展lv)
lvreduce(缩减lv)
lvs(查看lv信息)
lvdisplay(查看lv详细信息)
lvscan(扫描lv)
1.4逻辑卷扩展与缩减要求:
扩展要求
(1).扩展之前先检查文件系统
(2).逻辑卷边界是紧靠物理卷边界上创建的
(3).先扩展物理卷边界,在扩展逻辑卷边界
缩减逻辑卷要求
(1).不能在线缩减,需先卸载
(2).确保缩减后的空间大小依然能存储原有的数据
(3).在缩减之前应该强行检查文件,以确保文件系统能正常使用
快照卷
(1).生命周期为整个数据时长,在这段时间内,数据的增长量不能超出快照卷大小
(2).快照卷应该是只读的,不允许修改,以确保数据在那一刻的状态
(3).跟原卷在同一卷组内
博文来自:www.51niux.com
二、创建pv,vg,lv操作实例
# yum install lvm2 #安装lvm软件
# rpm -qa|grep lvm #现在系统已经支持lvm
lvm2-2.02.143-7.el6_8.1.x86_64
lvm2-libs-2.02.143-7.el6_8.1.x86_64
# pvdisplay #查看系统是否存在PV
#从上图可以看出,有6个10G的物理盘,我们就拿这6块10G的物理盘做下测试。
第一步:创建PV
# pvcreate /dev/sd{b,c,d,e,f,g} #先把六块硬盘格式化成PV
#然后可以用pvdisplay (显示详细信息)、pvs或者pvscan来查看:如下面:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 ---- 10.00g 10.00g
/dev/sdc lvm2 ---- 10.00g 10.00g
/dev/sdd lvm2 ---- 10.00g 10.00g
/dev/sde lvm2 ---- 10.00g 10.00g
/dev/sdf lvm2 ---- 10.00g 10.00g
/dev/sdg lvm2 ---- 10.00g 10.00g
第二步: 创建VG(卷组)
# vgdisplay #查看一下卷组,没有任何信息输出说明没有卷组
# vgcreate kvmvg01 /dev/sd{b,c} #创建一个名字叫做kvmvg01的卷组,并将sdb和sdc添加到此VG卷组中
Volume group "kvmvg01" successfully created
# vgextend kvmvg01 /dev/sdd /dev/sde #将sdd和sde添加到名字叫做kvmvg01的卷组中
Volume group "kvmvg01" successfully extended
# vgcreate kvmvg02 /dev/sdf /dev/sdg #再创建一个名字叫kvmvg02的卷组,并将sdf和sdg添加到此VG卷组中
Volume group "kvmvg02" successfully created
# vgscan #扫描一下vg卷组,可以看到我们又两个卷组kvmvg01和kvmvg02
Reading all physical volumes. This may take a while...
Found volume group "kvmvg02" using metadata type lvm2
Found volume group "kvmvg01" using metadata type lvm2
# vgs #简略的显示vg卷组的信息,可以用vgdisplay来查看详细的信息。
VG #PV #LV #SN Attr VSize VFree
kvmvg01 4 0 0 wz--n- 39.98g 39.98g #从字面就可以看出4代表了有四块PV,LV现在没有,VG大小为40G,空闲也为40G
kvmvg02 2 0 0 wz--n- 19.99g 19.99g
# pvscan #用pvscan扫描一下pv组也可以看出哪块硬盘属于哪个vg组
PV /dev/sdf VG kvmvg02 lvm2 [10.00 GiB / 10.00 GiB free]
PV /dev/sdg VG kvmvg02 lvm2 [10.00 GiB / 10.00 GiB free]
PV /dev/sdb VG kvmvg01 lvm2 [10.00 GiB / 10.00 GiB free]
PV /dev/sdc VG kvmvg01 lvm2 [10.00 GiB / 10.00 GiB free]
PV /dev/sdd VG kvmvg01 lvm2 [10.00 GiB / 10.00 GiB free]
PV /dev/sde VG kvmvg01 lvm2 [10.00 GiB / 10.00 GiB free]
Total: 6 [59.98 GiB] / in use: 6 [59.98 GiB] / in no VG: 0 [0 ]
第三步:创建LV(逻辑卷)
# lvs #查看一下系统是否有LV逻辑卷组,为空则为没有
# lvcreate -L 9G -n lvm01 kvmvg01 /dev/sdb #这是格式,创建一个9G的空间-n后面指定LV卷组,后面跟VG组名称,最后面的磁盘是可选的,加上表示把sdb的9G空间分配给lvm01卷组。
Logical volume "lvm01" created.
# lvcreate -L 18G -n lvm02 kvmvg01 /dev/sdb /dev/sd{c,d} #这个就是指定两块硬盘给lvm02
Logical volume "lvm02" created.
# lvextend -L +8G /dev/mapper/kvmvg01-lvm01 /dev/sde #将/dev/sde的8G给lvm01扩充。/dev/mapper/kvmvg01-lvm01要这种格式,如果不加+是扩容到多少的意思,如-L 20G就是扩容到20G
Size of logical volume kvmvg01/lvm01 changed from 9.00 GiB (2304 extents) to 17.00 GiB (4352 extents).
Logical volume lvm01 successfully resized.
通过各种命令进行一下查看:
# vgs
VG #PV #LV #SN Attr VSize VFree
kvmvg01 4 2 0 wz--n- 39.98g 4.98g #可以看到kvmvg01里面显示了两个lv,正好使我们创建的那两个,VFree也变为了不到5G
kvmvg02 2 0 0 wz--n- 19.99g 19.99g
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb kvmvg01 lvm2 a--u 10.00g 1020.00m #/dev/sdb因为分配了9G所以剩余不到1G
/dev/sdc kvmvg01 lvm2 a--u 10.00g 0 #这里/dev/sdc没有空间了,所以可以看出如果是多个Pv,默认先优先使用第一个pv的空间
/dev/sdd kvmvg01 lvm2 a--u 10.00g 1.99g #/dev/sdd剩余的空间比较多,18-10=8大概使用了8G,剩余了不到2G
/dev/sde kvmvg01 lvm2 a--u 10.00g 2.00g #/dev/sde的8G给了lvm01,所以剩余2G
/dev/sdf kvmvg02 lvm2 a--u 10.00g 10.00g
/dev/sdg kvmvg02 lvm2 a--u 10.00g 10.00g
# lvscan
ACTIVE '/dev/kvmvg01/lvm01' [17.00 GiB] inherit #可以看出每个LVM的状态和卷组大小
ACTIVE '/dev/kvmvg01/lvm02' [18.00 GiB] inherit
# lsblk -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 4.1G 0 rom
sda 8:0 0 8G 0 disk
sda1 8:1 0 200M 0 part /boot
sda2 8:2 0 1G 0 part [SWAP]
sda3 8:3 0 6.8G 0 part /
sdb 8:16 0 10G 0 disk #磁盘下面如果有lvm,说明这块磁盘属于哪个lvm卷组
kvmvg01-lvm01 (dm-0) 253:0 0 17G 0 lvm #这里也可以看到lvm卷组和lv卷组大小
sdc 8:32 0 10G 0 disk
kvmvg01-lvm02 (dm-1) 253:1 0 18G 0 lvm
sdd 8:48 0 10G 0 disk
kvmvg01-lvm02 (dm-1) 253:1 0 18G 0 lvm
sde 8:64 0 10G 0 disk
kvmvg01-lvm01 (dm-0) 253:0 0 17G 0 lvm
sdf 8:80 0 10G 0 disk
sdg 8:96 0 10G 0 disk
下面是不带磁盘添加的操作,这时候就发挥出vg卷组的作用了,把其他磁盘剩余的空间拿出来交给新的lvm卷组使用。但是虚拟机或者数据比较重要点的话,可不能这么干,因为你的数据存放在多个物理磁盘上,哪块硬盘出现问题了,你的虚拟机或者数据就有可能收到影响了。
下面我们用于kvmvg01剩余的4.9G空间创建一个新的lvm卷组,以不指定物理磁盘pv的形式:
# lvcreate -L 4000M -n lvm03 kvmvg01 #这里的单位可以是M,G或者T,这就是4000M的意思
# lvextend -L +1000M -n /dev/mapper/kvmvg01-lvm03 #再扩容1000M
第四步:格式化lvm卷组并挂载使用
# mkfs.ext4 -T largefile /dev/kvmvg01/lvm01 #默认不加参数格式化会很慢,几百G还可以容忍,但是当上T的格式化要加 -T largefile ,快速格式化
# mkfs.ext4 -T largefile /dev/kvmvg01/lvm02
# mkfs.ext4 -T largefile /dev/kvmvg01/lvm03
# mkdir /kvm/data{01..03} -p #在/kvm目录下面创建三个目录,data01,data02,data03
# mount /dev/kvmvg01/lvm01 /kvm/data01 #将三个lvm卷组进行挂载
# mount /dev/kvmvg01/lvm02 /kvm/data02
# mount /dev/kvmvg01/lvm03 /kvm/data03
最后就是添加开机自启动了,可以再/etc/fstab添加,也可以添加在/etc/rc.local
以/etc/fstab举例:
# cat /etc/fstab|grep lvm #下面就是格式书写格式
/dev/mapper/kvmvg01-lvm01 /kvm/data01 ext4 defaults 0 0
/dev/mapper/kvmvg01-lvm02 /kvm/data02 ext4 defaults 0 0
/dev/mapper/kvmvg01-lvm03 /kvm/data03 ext4 defaults 0 0
# mount -a #如果没有做前面的mount操作,这里可以手工挂载一下检查一下
博文来自:www.51niux.com
第五步:在线调整lvm的大小
现在如果我们的/kvm/data01已经用满了,或者我们这个lvm上面的虚拟机要扩充磁盘怎么办呢,这就发挥出在线扩容的作用了。
# lvextend -L +1G -n /dev/mapper/kvmvg01-lvm01 /dev/sdd #我们先给lvm01再加一个G的空间,现在/kvm/data01就应该是18G了。
Size of logical volume kvmvg01/lvm01 changed from 17.00 GiB (4352 extents) to 18.00 GiB (4608 extents).
Logical volume lvm01 successfully resized.
# fsck -f /dev/kvmvg01/lvm01 #我们检查一下系统,提示是挂载状态,不过没关系
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/mapper/kvmvg01-lvm01 is mounted.
e2fsck: 无法继续, 中止.
# resize2fs /dev/kvmvg01/lvm01 #重新设置一下lvm01的分区大小
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/kvmvg01/lvm01 is mounted on /kvm/data01; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 2
Performing an on-line resize of /dev/kvmvg01/lvm01 to 4718592 (4k) blocks.
The filesystem on /dev/kvmvg01/lvm01 is now 4718592 blocks long.
# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda3 6.7G 1.9G 4.6G 30% /
tmpfs 495M 0 495M 0% /dev/shm
/dev/sda1 194M 28M 156M 16% /boot
/dev/mapper/kvmvg01-lvm01
18G 172M 17G 1% /kvm/data01 #再次查看空间已经增加到18G
/dev/mapper/kvmvg01-lvm02
18G 172M 17G 1% /kvm/data0
注:
由于centos7 默认采用xfs文件系统,所以之前文件系统重新定义大小命令resize2fs 已经不能使用,而是用xfs_growfs替代。
既然有lvm的扩容就应该有lvm的缩减,下面是lvm的缩减:
缩小LV需要事先知道LV中的数据容量大小,缩小容量值不应超过剩余空间容量,而且要知道减少LV容量后的新大小。可以通过lvscan来查看LV容量,通过vgdisplay来查看剩余容量。
我们先看一下缩小lvm之前的情况
# umount /kvm/data01 #解除挂载也就称之为离线缩减,上面不解除挂载,就叫做在线扩容。
# fsck -f /dev/kvmvg01/lvm01
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/mapper/kvmvg01-lvm01: 11/18432 files (0.0% non-contiguous), 45489/4718592 blocks
# resize2fs /dev/kvmvg01/lvm01 17G #重新调整lvm01的分区大小到17G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/kvmvg01/lvm01 to 4456448 (4k) blocks.
The filesystem on /dev/kvmvg01/lvm01 is now 4456448 blocks long.
# lvreduce -L -1G /dev/kvmvg01/lvm01 /dev/sdd #缩减1G,把从/dev/sdd拿过来的那1G再还回去,也可以不加/dev/sdd
Ignoring PVs on command line when reducing.
WARNING: Reducing active logical volume to 17.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce kvmvg01/lvm01? [y/n]: y
Size of logical volume kvmvg01/lvm01 changed from 18.00 GiB (4608 extents) to 17.00 GiB (4352 extents).
Logical volume lvm01 successfully resized.
# mount /dev/kvmvg01/lvm01 /kvm/data01 #重新挂载
再次查看一下:
三、删除pv,vg,lv操作实例
第一步:删除LV逻辑卷操作
# lvremove /dev/kvmvg01/lvm03 #lvremove是删除lv命令,后面直接要删除的lvm卷组
Do you really want to remove active logical volume lvm03? [y/n]: y
Logical volume "lvm03" successfully removed
举个例子,如果我们lvm01卷组所在的一块硬盘出现了问题,要更换lv卷组里面的硬盘,这就涉及到将此块硬盘从vg里面去掉并将其中坏的硬盘去除掉pv属性的操作。操作步骤如下:
# umount /kvm/data01
# lvremove /dev/kvmvg01/lvm01 #要删除掉lv卷组,不然vg移除硬盘提示,是再用的状态。
Do you really want to remove active logical volume lvm01? [y/n]: y
Logical volume "lvm01" successfully removed
# vgreduce kvmvg01 /dev/sdb /dev/sde #如果两块硬盘都坏了,就全部去掉,如果只是某一块硬盘坏了,只去掉一块硬盘便可以
Removed "/dev/sdb" from volume group "kvmvg01"
Removed "/dev/sde" from volume group "kvmvg01"
# pvremove /dev/sdb /dev/sde #将两块硬盘的pv属性去掉
Labels on physical volume "/dev/sdb" successfully wiped
Labels on physical volume "/dev/sde" successfully wiped
再次用pvscan,vgscan之类的查看命令进行检查。
第二步:删除vg逻辑卷操作
# vgremove kvmvg02 #vgremove 后面跟卷组的名称
Do you really want to remove volume group "kvmvg02" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume lvm01? [y/n]: y
Logical volume "lvm01" successfully removed
Volume group "kvmvg02" successfully removed
# vgchange -a y kvmvg01 #激活卷组操作,kvmvg01为卷组名称。
# vgchange -a n kvmvg01 #停止卷组操作
#pvmove /dev/sdb /dev/sdc #将pv sdb上的数据移动到pv sdc盘上面去
# pvs -o+pv_used #查看pv的使用情况
PV VG Fmt Attr PSize PFree Used
/dev/sdc kvmvg01 lvm2 a--u 10.00g 0 10.00g
/dev/sdd kvmvg01 lvm2 a--u 10.00g 1.99g 8.00g
博文来自:www.51niux.com
四、LVM创建快照
快照(snapshot)是LVM所提供的一个非常有用的特性。它的原理是复制 Origin 原始卷的元数据(metadata)来创建一个逻辑卷,并没有复制物理卷上的任何数据, 因此它的创建过程是实时瞬间完成的。快照是特殊类型的逻辑卷,它含有创建时刻所指定的原始逻辑卷的完整数据,您可以操作快照而无需担心数据的变更令备份失效。
LVM 快照利用一种称为“写时复制(COW - Copy-On-Write)”的技术来跟踪和维持其数据的一致性。它的原理比较简单,就是跟踪原始卷上块的改变, 在这些数据被改变之前将其复制到快照自己的预留空间里(顾名思义称为写时复制)。 当对快照进行读取的时候,被修改的数据从快照的预留空间中读取,未修改的数据则重定向到原始卷上去读取,因此在快照的文件系统与设备之间多了一层COW设备。
利用快照您可以冻结一个正在使用中的逻辑卷,然后制作一份冻结时刻的备份,由于这个备份是具有一致性的,因此非常的适合于用来备份实时系统。例如,您的运行中的数据库可能即使在备份时刻也是不允许暂停服务的,那么就可以考虑使用LVM的快照模式,然后再针对此快照来进行文件系统级别或者块设备级别的数据备份。
# lsmod | grep dm|grep dm_snapshot #查看内核是否加载了dm_snapshot 模块,如果没有,加载此模块:modprobe dm-snapshot
dm_snapshot 31105 3
dm_mod 82839 20 dm_snapshot,dm_mirror,dm_log
# lvcreate -L 2G -s -p r -n lvm01bak /dev/kvmvg01/lvm01 #-s 是快照卷,-p r:限制快照卷为只读访问,理论上,您所建立的快照卷的大小应该是原始卷的1.1倍大小,我这里就比实际使用大小空间大就可以了,而且创建快照的时候是应该查看vg剩余空间之类的,因为要跟原卷在同一卷组内。
Logical volume "lvm01bak" created.
# mount /dev/kvmvg01/lvm01bak /mnt #挂载快照卷
mount: block device /dev/mapper/kvmvg01-lvm01bak is write-protected, mounting read-only
# umount /mnt/ #拷贝完数据就可以解除挂载了
# lvremove /dev/kvmvg01/lvm01bak #快照卷无需做格式化等步骤,可以直接对快照卷进行挂载,卸载等操作,而且操作完成之后,就应该立即删除快照,以减轻系统的I/O负担。 快照不会自动更新,长久保留是没有意义的。
Do you really want to remove active logical volume lvm01bak? [y/n]: y
Logical volume "lvm01bak" successfully removed
五、补充
# lvdisplay --maps /dev/kvmvg01/lvm02 #--maps 后面跟lvm卷组,除了可以看此卷组的详细信息以外,还能看此卷组下面使用了哪几块pv硬盘
--- Logical volume ---
LV Path /dev/kvmvg01/lvm02
LV Name lvm02
VG Name kvmvg01
LV UUID RJGXKo-7c4O-scCe-FQ6j-36JV-ZC0U-3FyAhq
LV Write Access read/write
LV Creation host, time server.ganglia.com, 2016-12-25 07:40:17 +0800
LV Status available
# open 1
LV Size 18.00 GiB
Current LE 4608
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
--- Segments ---
Logical extents 0 to 2558:
Type linear
Physical volume /dev/sdc
Physical extents 0 to 2558
Logical extents 2559 to 4607:
Type linear
Physical volume /dev/sdd
Physical extents 0 to 2048
# vgdisplay
--- Volume group ---
VG Name kvmvg01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 24
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1 #当前有一个LV
Max PV 0
Cur PV 2 #当前有两个PV
Act PV 2 #两个PV都是存货状态
VG Size 19.99 GiB #vg的大小
PE Size 4.00 MiB #默认PE就是4M,LVM 最小的储存区块,相当于系统的block块大小
Total PE 5118 #VG里面存放着各个PV中的PE,所以PE的数量就是VG大小除以PE的大小,这里是5118个PE数量。
Alloc PE / Size 4608 / 18.00 GiB
Free PE / Size 510 / 1.99 GiB
VG UUID RjNs94-lkQZ-cdIm-GnAT-3vxG-127w-bxZour
为什么我们在磁盘坏了要进行解除挂载,并删除lvm,删除坏掉硬盘的pv属性操作呢。因为如果不按正确的步骤操作的话,可能会出现类似于:
# vgscan #类似于这样的错误,就是你的pv盘符不见了,里面只留下了旧磁盘的pv的uuid,lvm不能识别,这样你会发现的lvm不能进行增删改操作了。
Reading all physical volumes. This may take a while..
Couldn't find device with uuid 'rlkPnE-3GHj-V1Uc-m2Hh-27tL-uLMD-Lo6vIJ'.
Found volume group "kvmvg01" using metadata type lvm02
# vgreduce --removemissing kvmvg01 --force #强制移除某个卷组上面所有丢失信息的PV,这样lvm就可以继续操作了。
很久以前,我的一台kvm的宿主机的硬盘要从no-raid模式改为raid模式,当时我用idrac卡的web界面做的转换成raid的操作,结果盘符就发生了变化,导致了lvm里面好多pv信息找不到了,我就执行了这个操作,让lvm恢复了,时间有点久了,具体报错找不到了。所以在线做raid还是用MegaCli靠谱。
还有两个命令我是没用过:
vgcfgbackup:报错卷组的lvm配置,命令为:vgcfgbackup 卷组名称
vgcfgrestore :备份lvm的卷组配置,命令为:vgcfgrestore -f 卷组配置文件 卷组名称 ,不加-f 卷组配置文件的话会找默认路径,还是加-f好
# vgcfgbackup kvmvg01 #备份kvmvg01卷组配置
Volume group "kvmvg01" successfully backed up. #默认是保存在/etc/lvm/backup/kvmvg01
# vgcfgbackup -f /etc/kvmvg01 kvmvg01 #-f 可以指定配置备份的位置 后面再跟卷组名称
Volume group "kvmvg01" successfully backed up.
# ls -l /etc/kvmvg01 #查看也是生成的
-rw-------. 1 root root 1721 12月 26 16:39 /etc/kvmvg01
# vgcfgrestore -f /etc/lvm/backup/kvmvg01 kvmvg01 #回复卷组配置,-f指定备份的卷组配置文件 后面跟卷组名称
Restored volume group kvmvg01