1、何为LVMnode
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现。Linux用户安装Linux操做系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好以后就没法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件由于受上层文件系统的限制,也不能跨越多个分区来存放,因此也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法一般是使用符号连接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的状况下能够方便地调整各个分区大小。bash
LVM的大小能够在不卸载的时候随意扩展和收缩而不损坏里面存放的数据。
app
2、LVM的组成ide
①、Physical Volume, PV, 物理卷工具
物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区,咱们实际的 partition 须要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),而后再通过 pvcreate 的命令将他转成 LVM 最底层的实体卷轴 (PV) ,以后才可以将这些 PV 加以利用!布局
LVM 标签在第二个扇区,接下来是元数据区,以后是设备的可用空间。ui
一、物理卷标签包含:spa
物理卷 UUID操作系统
以字节为单位的块设备大小3d
以 NULL 结尾的数据区域位置列表
以 NULL 结尾的元数据区域位置列表
备注:默认状况下,pvcreate 命令会在第二个 512 字节扇区放置物理卷标签。这个标签可选择性地放在前四个扇区中的任意一个,由于扫描物理卷标签的 LVM 工具会检查前四个扇区。物理卷标签以字符串 LABELONE 开始。
二、元数据:卷组的配置详情被称为元数据,卷组的每一个物理卷元数据区域中均保存彻底相同的元数据副本。
可使用 pvcreate 命令的 --metadatacopies 0 选项建立没有任何元数据副本的物理卷。默认状况下,卷组中的每一个物理卷中都会在其元数据区域保留一个同样的元数据副本。
可以使用 pvcreate 命令的 --metadatasize 选项指定元数据区域的大小。对于包含数百个物理卷和逻辑卷的卷组来讲,默认大小可能过小。
备注:LVM 容许在每一个物理卷中保存 0、1 或者 2 个元数据副本。默认是保存一个副本。一旦设置了在物理卷中保存的元数据备份数目以后就没法再更改。第一个副本保存在设备的起始位置,紧挨着标签。若是有第二个副本,会将其放在设备的末尾。若是不当心写入了不一样于想要写入的磁盘,从而覆盖了磁盘的起始部分,那么可使用在设备末尾的元数据第二个副本恢复元数据。
②、Volume Group, VG, 卷组
卷组创建在物理卷上,一卷组中至少要包括一物理卷,卷组创建后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。所谓的 LVM 大磁盘就是将许多 PV 整合成这个 VG 的东西!因此 VG 就是 LVM 组合起来的大磁盘!每一个 VG 最多仅能包含 65534 个 PE。 若是使用 LVM 默认的参数,则一个 VG 最大可达 256GB 的容量
③、Physical Extend, PE, 物理扩展单元
物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在创建卷组时指定,一旦肯定不能更改,同一卷组全部物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改成vg中定义的pe大小。LVM 默认使用 4MB 的 PE 区块,而 LVM 的 VG 最多仅能含有 65534 个 PE ,所以默认的 LVM VG 会有 4M*65534/(1024M/G)=256G。 这个 PE 颇有趣喔!他是整个 LVM 最小的储存区块,也就是说,其实咱们的文件数据都是藉由写入 PE 来处理的。 简单的说,这个 PE 就有点像文件系统里面的 block 大小啦。 因此调整 PE 会影响到 VG 的最大容量!
④、Logical Volume, LV, 逻辑卷
逻辑卷创建在卷组基础上,卷组中未分配空间可用于创建新的逻辑卷,逻辑卷创建后能够动态扩展和缩小空间。最终的 VG 还会被切成 LV,这个 LV 就是最后能够被格式化挂载使用的!PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,所以 LV 的装置档名一般指定为『 /dev/vgname/lvname 』或『 /dev/mapper/vgname-lvname 』,此两个档名都是符号连接,真正的设备名为『 /dev/dm-#(1,2,3...) 』。
⑤、logical Extent,LE,逻辑扩展单元
逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
注意:虽然PE是PV的单元。但PV刚刚建立时并无建立PE,只有加入到VG后才会生产指定大小的PE,全部PE的大小是由VG决定的。LV的大小是由PE决定的,分配多少个PE则LV就为全部PE的总大小。当PE分配到LV时称为LE。
3、LVM的建立及管理
①、PV的建立和管理
[root@wlw ~]# pv [tab][tab] pvchange pvcreate pvmove pvresize pvscan pvck pvdisplay pvremove pv #使用pv加两个tab能够看到PV的相关命令
pvcreate /dev/DEVICE : 将 partition 建立成为 PV
[root@wlw ~]# pvcreate /dev/sda{6,7,8} Physical volume "/dev/sda6" successfully created Physical volume "/dev/sda7" successfully created Physical volume "/dev/sda8" successfully created
pvscan :搜寻目前系统中的全部PV
[root@wlw ~]# pvscan PV /dev/sda6 lvm2 [5.01 GiB] PV /dev/sda7 lvm2 [8.01 GiB] PV /dev/sda8 lvm2 [10.00 GiB] Total: 3 [23.02 GiB] / in use: 0 [0 ] / in no VG: 3 [23.02 GiB]
pvs : 显示PV的简要信息
[root@wlw ~]# pvs /dev/sda6 PV VG Fmt Attr PSize PFree /dev/sda6 lvm2 --- 5.01g 5.01g [root@wlw ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda6 lvm2 --- 5.01g 5.01g /dev/sda7 lvm2 --- 8.01g 8.01g /dev/sda8 lvm2 --- 10.00g 10.00g #不指定设备则列出全部的设备信息
pvdisplay : 显示PV的详细信息
[root@wlw ~]# pvdisplay /dev/sda6 "/dev/sda6" is a new physical volume of "5.01 GiB" --- NEW Physical volume --- PV Name /dev/sda6 VG Name PV Size 5.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID t522PZ-Rvvy-2kvQ-BiYh-lzdq-RmPJ-fRp74C #不指定设备则列出全部的设备信息
pvremove :将 PV 属性移除,让该 partition 不具备 PV 属性
[root@wlw ~]# pvremove /dev/sda6 Labels on physical volume "/dev/sda6" successfully wiped
pvmove :将VG中的PV移除,在缩减VG的时候使用。
②、VG的建立和管理
[root@wlw ~]# vg [tab][tab] vgcfgbackup vgcreate vgimport vgremove vgcfgrestore vgdb vgimportclone vgrename vgchange vgdisplay vgmerge vgs vgck vgexport vgmknodes vgscan vgconvert vgextend vgreduce vgsplit #使用vg加两个tab能够看到VG的相关命令
vgcreate [-s#[mMgGtT]] VolumeGroupName PhysicalDevicePath : 建立vg
[root@wlw ~]# vgcreate -s 8M myvg /dev/sda6 Physical volume "/dev/sda6" successfully created Volume group "myvg" successfully created #-s指定PE的大小,单位指定格式为:kKmMgGtTpPeE
vgscan :搜寻目前系统中的全部VG
vgs : 显示VG的简要信息
vgdisplay : 显示VG的详细信息
vgextend :向 VG 中添加额外的 PV
[root@wlw ~]# vgextend myvg /dev/sda7 Volume group "myvg" successfully extended
vgreduce :在 VG 内移除 PV
[root@wlw ~]# vgreduce myvg /dev/sda6 Removed "/dev/sda6" from volume group "myvg" #在移除PV时,切记要先执行pvmove /dev/sda6,让PV中的PE移动到其余PV中去,以避免数据丢失
vgremove :删除 VG
③、LV的建立和管理
[root@wlw ~]# lv [tab][tab] lvchange lvextend lvmdiskscan lvmsar lvresize lvconvert lvm lvmdump lvreduce lvs lvcreate lvmchange lvmetad lvremove lvscan lvdisplay lvmconf lvmsadc lvrename #使用lv加两个tab能够看到LV的相关命令
lvcreate {-L|-l} #[mMgGtT] -n NAME VolumeGroup : 建立LV
[root@wlw ~]# lvcreate -L 4G -n mylv myvg Logical volume "mylv" created. #-L:指定LV大小,-n:指定LV的名字,-l:指定给LV分配多少个PE,默认PE大小为4M,这个时候就能够吧LV格式化并挂载使用了
lvscan :搜寻目前系统中的全部LV
lvs : 显示LV的简要信息
lvdisplay : 显示LV的详细信息
lvremove :删除 LV
添加LV容量
lvextend {-L|-l} [+]#[mMgGtT]:扩展逻辑卷,向 LV 里面添加容量
[root@wlw ~]# lvextend -L +2G /dev/myvg/mylv Size of logical volume myvg/mylv changed from 4.00 GiB (512 extents) to 6.00 GiB (768 extents). Logical volume mylv successfully resized #这里给mylv添加了2G的大小,若是是指定-L 5G的话,则表明把mylv修改成5G。
注意:这里咱们修改完LV以后,发现磁盘容量并无变化,这是由于逻辑卷大小确实扩张了,可是文件系统的大小仍是以前的大小并无变化,此时咱们须要从新调整文件系统的大小与逻辑卷大小相同。而无需从新挂载。下面咱们针对ext系统文件系统进行演示,若是是其余文件系统须要使用其对应的工具。
[root@wlw ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.8G 4.6G 4.7G 50% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 976M 36M 890M 4% /boot /dev/sr0 3.7G 3.7G 0 100% /mnt /dev/mapper/myvg-mylv 3.9G 12M 3.7G 1% /mylvm [root@wlw ~]# resize2fs /dev/myvg/mylv resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv is mounted on /mylvm; on-line resizing required old desc_blocks = 2, new_desc_blocks = 3 Performing an on-line resize of /dev/myvg/mylv to 3145728 (2k) blocks. The filesystem on /dev/myvg/mylv is now 3145728 blocks long. #resize2fs后面若是没有指定大小则默认调整为整个设备的大小 [root@wlw ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.8G 4.6G 4.7G 50% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 976M 36M 890M 4% /boot /dev/sr0 3.7G 3.7G 0 100% /mnt /dev/mapper/myvg-mylv 5.9G 12M 5.6G 1% /mylvm #这里咱们能够看到,添加的2G已经添加到设备上了,无需从新挂载
缩减LV容量(缩减有风险,须要谨慎操做)
一、umount /dev/VG_NAME/LV_NAME:卸载设备
[root@wlw ~]# umount /dev/myvg/mylv
二、e2fsck -f /dev/VG_NAME/LV_NAME:强制检测文件系统
[root@wlw ~]# e2fsck -f /dev/myvg/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 MYLV: 13/393216 files (0.0% non-contiguous), 87981/3145728 blocks
三、resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]:缩减文件系统大小
[root@wlw ~]# resize2fs /dev/myvg/mylv 3G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/myvg/mylv to 1572864 (2k) blocks. The filesystem on /dev/myvg/mylv is now 1572864 blocks long. #缩减后文件系统的大小必须能容纳当前全部文件的大小,否则文件会损坏
四、lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
[root@wlw ~]# lvreduce -L 3G /dev/myvg/mylv WARNING: Reducing active logical volume to 3.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv? [y/n]: y Size of logical volume myvg/mylv changed from 6.00 GiB (768 extents) to 3.00 GiB (384 extents). Logical volume mylv successfully resized
④、快照:snapshot
快照卷的原理:
对原卷(逻辑卷)作快照就是某一刻当即建立对方的元数据的监视器,随时监视对方的元数据,而快照卷刚建立后是没有任何数据的,当咱们把快照卷挂载后是能够看到原卷的全部文件的,由于快照卷是原卷的另外一个访问路径而已,由于快照卷监视了全部的原卷的元数据,当原卷数据没有发生改变时,两个卷的数据是同样的,因为快照卷的监视器一直在监视原卷的全部文件,当监控原卷的某个文件要发生改变时,会先把原卷中即将修改的文件复制一份到快照卷中,当咱们须要恢复快照的时候,没有变化的数据是在原卷中存放的,变化的数据才在目标卷中恢复,因此只有修改过的文件才会复制到快照卷中,因此快照卷体积是很小的。快照卷和原卷必须在同一卷组中。
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name:快照卷的建立
[root@wlw ~]# lvcreate -s -L 512M -p r -n mylv-snapshot /dev/myvg/mylv Logical volume "mylv-snapshot" created. [root@wlw ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg owi-aos--- 3.00g mylv-snapshot myvg swi-a-s--- 512.00m mylv 0.00 #-s指定此卷为快照卷,-p以只读的格式建立,-n指定快照卷名字。
lvremove original_lv_name:快照卷的删除
[root@wlw /]# lvremove /dev/myvg/mylv-snapshot Do you really want to remove active logical volume mylv-snapshot? [y/n]: y Logical volume "mylv-snapshot" successfully removed
⑤、当肯定逻辑卷中数据已经备份,打算删除LVM拆除磁盘时
一、umount /dev/VG_NAME/LV_NAME:卸载设备
[root@wlw /]# umount /dev/myvg/mylv
二、lvremove lv_name:删除 LV
[root@wlw /]# lvremove /dev/myvg/mylv Do you really want to remove active logical volume mylv? [y/n]: y Logical volume "mylv" successfully removed
三、vgremove vg_name:删除 VG
[root@wlw /]# vgremove myvg Volume group "myvg" successfully removed
四、pvremove pv_name:删除 PE
[root@wlw /]# pvremove /dev/sda{6,7,8} Labels on physical volume "/dev/sda6" successfully wiped Labels on physical volume "/dev/sda7" successfully wiped Labels on physical volume "/dev/sda8" successfully wiped
五、拆除磁盘或用于其余用途