LVM 逻辑卷管理器(实现一个可以弹性调整容量的文件系统,而不是着眼于效能与安全。)
PV(Physical Volume): 物理卷
我们实际的分区(partitiono)或磁盘(disk)需要调整系统标识符(systemID)为8e(LVM的标识符),然后再经过pvcreate的指令将它转成LVM最底层的物理卷(PV)
相关名词 | |
---|---|
VG(Volume Group) | 卷组--就是LVM组合起来的大磁盘,最多包含65534个PE |
LV(Logic Volume) | 逻辑卷,其名称通常为/dev/vgname/lvname,数据写入LV有两种模式:线性(一个partition写完再写另一个),交错(就像raid0) |
PE(Physical Extent) | 物理范围块(预设为4MB,是LV的最小储存区块) |
LV(逻辑卷) | 在32位系统上最多仅能含有65534个PE(物理范围块),因此预设的LVM的LV会有256G |
各命令使用与创建流程
流程如下:
1.分区或磁盘 -->(fdisk修改前者的SystemID为8e) -->(pvcreate命令)-->2.PV物理卷
各阶段的相关命令:
PV阶段:pv名称就是分区名或磁盘名如 /dev/sdb2
fdisk /path/to/partition:修改分区或磁盘的SystemID为8e
pvscan: 搜寻目前系统里面任何具有PV的磁盘
pvcreate /path/to/partition: 将实体分区或磁盘创建成为PV
pvdisplay [/path/to/partition]: 显示目前系统上面的PV状态
pvmove: 将指定pv里的已经被分配的PE移到其它的pv里
例如:pvmove /dev/sdc1 /dev/scb1
pvremove : 将PV属性(擦除元数据)移除,让该partition不具有PV属性.
VG阶段:
vgcreate: 就是主要建立VG的指令
用法格式: vgcreate [-s Num[bBsSkKmMgGtTpPeE]] VG名 PV名
-s, --physicalextentsize : 后面接PE的大小(size),单位可以是m,g,t(大小写均可)不写的话默认为4M
例: vgcreate -s 16M uangianlap_VG /dev/sdb{1,2,3}
vgscan: 搜寻系统上面是否有VG存在?
vgdisplay VG名: 显示目前系统上面的VG状态
vgextend VG名 增加的PV名: 在VG内增加额外的PV
例如:vgextend vbirdvg /dev/sdc1 这里VG在创建的时候指定PE的大小了,所以这里不用再指定。
vgreduce VG名 pv名: 在VG内移除PV
vgchange: 设定VG是否启动(active)
vgremove VG名: 删除一个VG
vgrename
LV阶段:
lvcreate: 建立LV
用法格式:lvcreate [-L NUM[mgt]] [-n LV名] VG名
-L|--size: 逻辑卷的大小(必须为PE(创建VG时指定)的倍数) LogicalVolumeSize[b|B|s|S|k|K|m|M|g|G|t|T|p|P|e|E]
-l: 后面可以接PE的个数,
-n,--name: 接逻辑卷名
-T|--thin: 创建一个Thin Pool
lvscan: 查询系统上面的LV
lvdisplay: 显示系统上面的LV状态
lvextend : 扩展LV里面容量(扩展的其实是物理边界大小,需要运行resize2fs命令,如resize2fs -p /dev/myvg/testlv 进行逻辑大小的调整)
用法格式: lvextend -L [+]size LogicalVolumePath [PhysicalVolumePath](没有+号则指定最终大小为size)
-L, --size=[bBsSkKmMgGtTpPeE]:
resize2fs(针对ext系文件系统): 例如,resize2fs /PATH/TO/PV 3G 其调整的是逻辑边界大小
lvreduce LV名: 在LV里面减少容量
用法格式: lvreduce [-]LogicalVolumeSize[bBsSkKmMg-GtTpPeE]}
lvremove LV名... : 删除一个LV
lvresize: 对LV进行容量大小的调整.
扩展LV:不需要卸载文件系统
1.lvextend -L 5G /dev/myvg/testlv (需要确定VG里有相应的未分配容量可用)
2.resize2fs -p /dev/myvg/testlv
缩减LV:
1.取消LV挂载 umount /mnt/lv0
2.e2fsck -f /dev/vg0/lv0 (在 缩减之前应该先强行检查文件,以确保文件系统处于移植性状态)
3.resize2fs /dev/vg0/lv0 10G(并确保缩减到的大小能可存储原有的数据.)
4.lvreduce -L 10G /dev/vg0/lv0
5.mount -a
快照卷
1.其生命周期为整个数据时长:在这段时长内,数据的增长量不能走出快照卷大小
2.快照卷应该是只读的
- 跟原卷在同一卷组内
创建格式: lvcreate -L # -n SLV_NAME -s -p r /PATH/TO/LV
移除快照卷: lvremove /dev/myvg/testlv-snap
lvresize
例如:lvresize -L +500M /dev/vbirdvg/vbirdlv (前提是LV所在的VG里至少有500M的空闲容量(vgdisplay VG名 查看))
xfs_info /srv/lvm:
xfs_growfs /srv/lvm: 将lvm变更后的容量同步更新到挂载点(这里因为vbirdlv写入的文件系统是xfs所以才用此命令)
resize2fs:
用法:resize2fs [-f] [device] [size]
例如:resize2fs /dev/vbirdvg/vbirdlv
逻辑卷实例操作:
1.划分4个分区,如/dev/sdb{1..4},每个分区为1G,设置system ID为8e
2.pvcreate /dev/sdb{1..4} 分别创建4个PV,其名称与partition一样。
3.pvscan 或 pvdisplay检查一下是否执行成功
4.vgcreate -s 16M vbirdvg /dev/sdb{1..4} 创建VG ,另外意到这里vg名可以任意指定
-s 自定义每个PE的大小为16M
5.vgscan 或 vgdisplay 检查
6.lvcreate -l 200 -n vbirdlv vbirdvg 创建LV, -l参数指定PE个数, 最后一个参数是VG名
7. ls -l /dev/vbirdvg/vbirdlv; lvdisplay 检查LV是否创建成功,注意LV的名称。
8. mkfs -t ext4 /dev/vbirdvg/vbirdlv 给创建的LV创建文件系统(格式化)
9. mkdir /mnt/lvm 创建挂载目录
10. mount /dev/vbirdvg/vbirdlv /mnt/lvm 挂载LV设备文件
11.如何扩展LV的容量--> vgextend vbirdvg /dev/sdc1 -->在VG里添加一个PV
12.lvresize -l +100 /dev/vbirdvg/vbirdlv -->注意这里的+号不能少,不然的话将是设定lv的PE总数为100个的意思。
而且这里对lv大小作调整的同时并不需要解除其挂载关系。
13.到了这一步我们的LV里应该已经有了300个PE即4.68G的大小,但是执行df -Th /mnt/lvm时却只看到还是上一次200个
的200个PE,但是lvdisplay时却是增加了的。所以这里还是要使用resize2fs(只对ext系的文件系统有效)处理一下。
14.执行命令: resize2fs /dev/vbirdvg/vbirdlv
15.第11步是扩展LV容量,那么要缩小该如何设置呢? 先解挂载umont /mnt/lvm
2.e2fsck -f /dev/vg0/lv0
3.resize2fs /dev/vg0/lv0 10G
4.lvreduce -L 10G /dev/vg0/lv0
5.mount -a
例如:lvresize -L +500M /dev/vbirdvg/vbirdlv
(前提是LV所在的VG里至少有500M的空闲容量(vgdisplay VG名 查看))
注:如果pv还有空闲也可以删除一个pv,具体步骤如下:
1.pvscan 看看没有被分配给lv的容量有没有至少任意一个pv那么大
2.如果1成立的话,则可以用pvmove命令将指定一个或多个pv中
3.在VG中删除pv中分配pe为0的pv
4.执行pvremove移除前两步指定的pv