本节大纲:node
20.1.什么是逻辑卷
linux
20.2.逻辑卷的结构
ios
20.3.逻辑卷的管理
vim
20.4.迁移逻辑卷到新的系统
centos
20.5.删除逻辑卷
服务器
20.6.逻辑卷快照
app
20.1.什么是逻辑卷dom
1)为何要使用逻辑卷ide
逻辑卷:工具
优势:在于灵活管理
一、动态扩容
二、在线扩容
三、离线裁剪
四、数据条带化
五、数据镜像
2)什么是逻辑卷
逻辑卷管理(LVM)(Logical VolumeManager)它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上进行组合,作为一个大的硬盘空间来使用,当硬盘的剩余空间不够的时候,能够将其它的硬盘加入到分区当中,这样能够实现磁盘空间的动态管理。
3)lvm基本术语
物理卷(physical volume,pv):
物理卷就是指硬盘分区,也能够是整个硬盘或已建立的RAID ,是LVM的基本存储设备,与普通物理存储介质的区别是该设备包含有LVM相关的管理参数。
卷组(volume group,vg):
卷组是创建在物理卷之上,它是由一个或者多个物理卷组成的存储池。即将不少个物理卷融合在一块儿来提供容量。在卷组上能建立一个或多个“LVM分区”(逻辑卷)
逻辑卷(logical volume,lv):逻辑卷是创建在卷组之上,相似于非LVM系统中的硬盘分区,它是从卷组中“切”出来一块空间来让用户使用,是一个标准的块设备,在逻辑卷之上能够创建文件系统。
物理区域(physical extent,PE):物理卷以大小相等的物理块为存储的基本单位,每个物理卷被划分红称为PE的最小单位。默认是4M,寻址的最小单元。
逻辑区域(logical extent,LE):逻辑卷以大小相等的逻辑块为存储的基本单位,在同一个卷组中,LE的大小和PE是相等的,而且一一对应。
总结:
真实的物理设备——>逻辑上作成物理卷(pv)——>卷组(vg)——>逻辑卷(lv)
20.2.逻辑卷的结构
假若有物理磁盘三个,一个200g,一个100g,一个80g,怎么作分出一个300g独立文件系统的分区,这就要逻辑卷来解决了
物理磁盘到逻辑的映射
#采用文件夹的形式模式LVM
[root@localhost test]# tree
.
├── VG0
│ ├── LV0
│ ├── LV1
│ └── LV2
└── VG1
├── LV0
└── LV1
20.3.逻辑卷的管理
1)经过lvm分区方式安装centos
选择安装类型,选择最后一个复选框,即建立自定义布局。
对应英文界面
首先划分/boot分区,/boot分区建议使用物理分区
将剩余空间划分为一个物理卷(PV)
建立一个卷组(VG)。默认卷组名为VolGroup00,修改卷组名为vg51cto_lv。
在VG上面建立逻辑卷(LV)。逻辑卷默认为LogVol00,LogVol01……末两位由00开始依次递增。
LVM分区完成。
[root@localhost ~]# df -h #查看磁盘空间
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg51cto_lv-LogVol01
9.5G 915M 8.2G 10% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 27M 154M 15% /boot
/dev/mapper/vg51cto_lv-LogVol04
2.9G 4.5M 2.7G 1% /data
/dev/mapper/vg51cto_lv-LogVol02
4.0G 8.3M 3.8G 1% /home
/dev/mapper/vg51cto_lv-LogVol03
969M 1.4M 917M 1% /usr/local
20.3.逻辑卷的管理
经过实例来讲明
dmoe1:建立一个普通的逻辑卷,大小是1G,挂载使用。
1)拿一块硬盘
2)将硬盘分区(根据实际状况)
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 2G 0 part
├─sdb2 8:18 0 2G 0 part
├─sdb3 8:19 0 6G 0 part
└─sdb4 8:20 0 10G 0 part
3)将设备作成物理卷
# pvcreate /dev/sdb1
查看:
pvs 简单查看
pvdisplay 详细查看
4)建立卷组,将物理卷加入到卷组
# vgcreate vg01 /dev/sdb1
Volume group "vg01" successfully created
-l: 卷组上容许建立的最大逻辑卷数
-s:卷组上的物理卷的PE大小
-p:卷组中容许添加的最大物理卷数
查看:
vgscan #查看卷组名
vgs
vgdisplay
5)建立逻辑卷,大小1G
# lvcreate -n lv01 -L 1G vg01
-L:指定最终大小
-l:指定pe的个数或者卷组剩余空间的百分比
# lvcreate -n lv02 -l 50 vg01
# lvcreate -n lv03 -l 50%free vg01
查看:
lvs
lvdisplay
6)将逻辑卷格式化
建立好的逻辑卷会映射到如下两个地方:
# ll /dev/mapper/vg01-lv01
lrwxrwxrwx. 1 root root 7 Apr 8 10:42 /dev/mapper/vg01-lv01 -> ../dm-2
# ll /dev/vg01/lv01
lrwxrwxrwx. 1 root root 7 Apr 8 10:42 /dev/vg01/lv01 -> ../dm-2
mkfs -t ext4 /dev/mapper/vg01-lv01
或者
mkfs.ext4 /dev/vg01/lv01
7)挂载使用
mount /dev/vg01/lv01 /u01
8)修改卷组名
#把现有的卷组名更改
[root@localhost ~]# vgrename vg51cto_lv vg51cto
Volume group "vg51cto_lv" successfully renamed to "vg51cto"
#修改/etc/fstab配置文件,把vg51cto_lv修改为vg51cto
[root@localhost ~]# vim /etc/fstab
# /etc/fstab
# Created by anaconda on Thu Sep 28 19:09:08 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg51cto-LogVol01 / ext4 defaults 1 1
UUID=cb3a3439-01cd-44f8-b435-81a072a03c28 /boot ext4 defaults 1 2
/dev/mapper/vg51cto-LogVol04 /data ext4 defaults 1 2
/dev/mapper/vg51cto-LogVol02 /home ext4 defaults 1 2
/dev/mapper/vg51cto-LogVol03 /usr/local ext4 defaults 1 2
/dev/mapper/vg51cto-LogVol00 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
#修改grub.conf配置文件,把vg51cto_lv修改为vg51cto
[root@localhost ~]# vim /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-504.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg51cto-LogVol01 rd_NO_LUKS rd_LVM_LV=vg51cto/LogVol01 rd_LVM_LV=vg51cto/LogVol00 rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-504.el6.x86_64.img
#reboot重启后用df -h查看
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg51cto-LogVol01
9.5G 1.1G 8.0G 12% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 27M 154M 15% /boot
/dev/mapper/vg51cto-LogVol04
2.9G 4.5M 2.7G 1% /data
/dev/mapper/vg51cto-LogVol02
4.0G 8.3M 3.8G 1% /home
/dev/mapper/vg51cto-LogVol03
969M 1.4M 917M 1% /usr/local
demo2:在线扩容逻辑卷
状况1:当卷组剩余空间不够
1)扩容卷组
# vgextend vg01 /dev/sdb3
No physical volume label read from /dev/sdb3
Physical volume /dev/sdb3 not found
Physical volume "/dev/sdb3" successfully created
Volume group "vg01" successfully extended
说明:
卷组是由物理卷组成的,若是直接将设备加入卷组,那么系统会自动先将设备作成pv,而后在加入。
2)扩容逻辑卷
# lvextend -L +2G /dev/vg01/lv01 在原来的基础上增长2G空间
3)同步文件系统
# resize2fs /dev/vg01/lv01
状况2:当前卷组剩余空间足够
1)扩容逻辑卷
# lvextend -L 3G /dev/vg01/lv01 将原来的逻辑卷扩大到3G
2)同步文件系统
# resize2fs /dev/vg01/lv01
实例:动态扩容根文件系统
demo3:离线裁剪逻辑卷
1)卸载逻辑卷
umount /dev/vg01/lv01
2)裁剪文件系统
# e2fsck -f /dev/mapper/vg01-lv01
# resize2fs /dev/mapper/vg01-lv01 2G
3)裁剪逻辑卷
# lvreduce -L 2G /dev/mapper/vg01-lv01
# e2fsck -f /dev/mapper/vg01-lv01
4)挂载使用
# mount /dev/mapper/vg01-lv01 /u01
注意:
一、离线裁剪以前最好将数据备份
二、裁剪后的空间大小必定要大于数据大小
demo4:总结逻辑卷相关的命令
建立物理卷
pvcreate /dev/sdb /dev/sdc[1-3]
建立卷组
vgcreate vg01 /dev/sdb
建立逻辑卷
lvcreate -n lv01 -L 2G vg01
lvcreate -n lv02 -l 50 vg02
lvcreate -n lv03 -l 50%free vg03
扩容卷组
vgextend vg01 /dev/sdc[1-3]
扩容逻辑卷
lvextend -L +1G /dev/vg01/lv01
删除逻辑卷
# lvremove /dev/mapper/vg01-lv03
删除卷组
# vgremove vg01
删除物理卷
# pvremove /dev/sdb /dev/sdc[1-3]
将一个物理卷从卷组里移除
# vgreduce vg01 /dev/sdb2
注意:
该物理卷没有被使用才可以移除
demo5:逻辑卷实现条带化
条带化:
把保存在逻辑卷上的数据分红n等分,分别同时写入到不一样的物理卷中,能够提升数据的读写速率;若是任何一个涉及到物理卷损坏,数据都会没法恢复。
建立前:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.51g 0
/dev/sdb1 vg01 lvm2 a-- 2.00g 2.00g
/dev/sdb2 vg01 lvm2 a-- 2.00g 2.00g
建立条带化的逻辑卷:
# lvcreate -n lv01 -L 1G -i 2 vg01 /dev/sdb[12]
-i:指定条带化的个数
建立后:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.51g 0
/dev/sdb1 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a-- 2.00g 1.50g
格式化文件系统:
mkfs.ext4 /dev/vg01/lv01
挂载使用
mount /dev/vg01/lv01 /u01
测试验证:
# iostat -d -m /dev/sdb[12] 2
demo6:逻辑卷实现镜像
镜像:对某个逻辑卷作数据镜像,实现数据备份做用。
建立前:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.51g 0
/dev/sdb1 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb3 vg02 lvm2 a-- 2.00g 2.00g
/dev/sdb4 vg02 lvm2 a-- 2.00g 2.00g
建立一个互为镜像的逻辑卷:
# lvcreate -n lv02 -L 1G -m 1 vg02 /dev/sdb[34]
-m:指定镜像的个数
# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 1.00g
lv02 vg02 mwi-a-m--- 1.00g lv02_mlog 100.00 数据同步100%完成
建立后:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.51g 0
/dev/sdb1 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb3 vg02 lvm2 a-- 2.00g 1.00g
/dev/sdb4 vg02 lvm2 a-- 2.00g 1.00g
格式化文件系统而且挂载使用
# mkfs.ext4 /dev/vg02/lv02
# mkdir /u02
# mount /dev/mapper/vg02-lv02 /u02
测试验证:
# dd if=/dev/zero of=/dev/sdb3 bs=1M count=300
# vgreduce --removemissing -f vg02 强制从卷组中移除损坏的盘
再次将逻辑卷挂载使用,咱们须要将坏的盘修好换成健康的盘让其再次互为镜像:
# lvconvert -m 1 /dev/vg02/lv02 /dev/sdb[34]
demo7:修改逻辑卷名
#查看逻辑卷名
默认的卷组名为VolGroup00,卷组内的逻辑卷为LogVol00,LogVol01……末两位由00开始依次递增
[root@localhost ~]# lvscan
ACTIVE '/dev/vg51cto/LogVol04' [2.93 GiB] inherit
ACTIVE '/dev/vg51cto/LogVol01' [9.77 GiB] inherit
ACTIVE '/dev/vg51cto/LogVol00' [2.00 GiB] inherit
ACTIVE '/dev/vg51cto/LogVol03' [1000.00 MiB] inherit
ACTIVE '/dev/vg51cto/LogVol02' [4.13 GiB] inherit
#修改逻辑卷名
[root@localhost ~]# lvrename /dev/vg51cto/LogVol00 /dev/vg51cto/lv_swp
Renamed "LogVol00" to "lv_swp" in volume group "vg51cto"
[root@localhost ~]# lvrename /dev/vg51cto/LogVol01 /dev/vg51cto/lv_root
Renamed "LogVol01" to "lv_root" in volume group "vg51cto"
[root@localhost ~]# lvrename /dev/vg51cto/LogVol02 /dev/vg51cto/lv_home
Renamed "LogVol02" to "lv_home" in volume group "vg51cto"
[root@localhost ~]# lvrename /dev/vg51cto/LogVol03 /dev/vg51cto/lv_usr
Renamed "LogVol03" to "lv_usr" in volume group "vg51cto"
[root@localhost ~]# lvrename /dev/vg51cto/LogVol04 /dev/vg51cto/lv_data
Renamed "LogVol04" to "lv_data" in volume group "vg51cto"
#修改/etc/fstab配置文件
[root@localhost ~]# vim /etc/fstab
# /etc/fstab
# Created by anaconda on Thu Sep 28 19:09:08 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg51cto-lv_root / ext4 defaults 1 1
UUID=cb3a3439-01cd-44f8-b435-81a072a03c28 /boot ext4 defaults 1 2
/dev/mapper/vg51cto-lv_data /data ext4 defaults 1 2
/dev/mapper/vg51cto-lv_home /home ext4 defaults 1 2
/dev/mapper/vg51cto-lv_usr /usr/local ext4 defaults 1 2
/dev/mapper/vg51cto-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
#修改grub.conf配置文件
root@localhost ~]# vim /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg51cto-LogVol01
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-504.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg51cto-lv_root rd_NO_LUKS rd_LVM_LV=vg51cto/lv_root rd_LVM_LV=vg51cto/lv_swap rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-504.el6.x86_64.img
20.4.迁移逻辑卷到新的系统
我首先在另一个虚拟机中建立一个逻辑卷,并在里面存入相应的数据,而后来模拟咱们的迁移逻辑卷的实验。在另一个虚拟机中建立LV0逻辑卷的操做,以下图所示。
此时该系统中块设备列表以下所示。 LV0。就是咱们刚刚建立的逻辑卷。
[root@centos6 lv0]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 3.7G 0 rom /media/CentOS_6.9_Final
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1000M 0 part /boot
├─sda2 8:2 0 53.7G 0 part /
├─sda3 8:3 0 48.8G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
└─VG0-LV0 (dm-0) 253:0 0 10G 0 lvm /mnt/lv0
如今咱们要将刚刚建立的这个逻辑卷迁移到一个新的系统中,并且咱们要保证,数据不能丢失。同时,咱们考虑一下,万一咱们要迁移到的新的文件系统中有跟咱们新建立的逻辑卷同名的逻辑卷该如何处理,比方说像,下面这样。 注意,两个系统不同,可是逻辑卷的名字一致。
#CentOS6 中的逻辑卷,即将被迁移到CentOS7中
[root@centos6 ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LV0 VG0 -wi-ao---- 10.00g
#CentOS 7 中的逻辑卷,即将迁移到这里。
[root@localhost ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LV0 VG0 -wi-ao---- 300.00g
LV1 VG0 -wi-ao---- 50.00g
总结一下迁移过程当中的重要步骤,一共有以下几步。 在源主机上
将旧的逻辑卷解除挂载 umount /mnt/lv0
修改旧的卷组名称 vgrename VG0 NEWVG0
修改旧的逻辑卷的名称 lvrename /dev/NEWVG0/LV0 NEWLV0
将旧的卷组设置为非活动状态 vgchange -an NEWVG0
将旧的卷组导出 vgexport NEWVG0
将硬盘拆下 安装到新的主机上
相关的操做以下所示,操做成功以后,将硬盘文件拆下,接到新的主机上。
[root@centos6 ~]#umount /mnt/lv0
[root@centos6 ~]#vgrename VG0 NEWVG0
Volume group "VG0" successfully renamed to "NEWVG0"
[root@centos6 ~]#lvrename /dev/NEWVG0/LV0 NEWLV0
Renamed "LV0" to "NEWLV0" in volume group "NEWVG0"
[root@centos6 ~]#vgchange -an NEWVG0
0 logical volume(s) in volume group "NEWVG0" now active
[root@centos6 ~]#vgexport NEWVG0
Volume group "NEWVG0" successfully exported
在目标主机上
在新的系统中安装硬盘,并将其导入文件系统。 vgimport NEWVG0
激活新的卷组 vgchange -ay NEWVG0
从新挂载 mount /dev/NEWVG0/NEWLV0 /mnt/newlv0
在加装了新的硬盘以后,咱们能够看到系统中已经添加了一块新的硬盘。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 55G 0 part /
├─sda3 8:3 0 50G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 200G 0 disk
├─sdb1 8:17 0 100G 0 part
│ └─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
└─sdb2 8:18 0 100G 0 part
└─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
sdc 8:32 0 100G 0 disk
└─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
sdd 8:48 0 80G 0 disk
├─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
└─VG0-LV1 253:1 0 50G 0 lvm /mnt/lv1
sde 8:64 0 20G 0 disk
└─NEWVG0-NEWLV0 253:2 0 10G 0 lvm
使用pvscan 命令能够查看到系统中已经有一个处于 exported 状态的 设备,及其详细的信息。
[root@localhost ~]#pvscan
PV /dev/sdb1 VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdb2 VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdc VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdd VG VG0 lvm2 [80.00 GiB / 29.98 GiB free]
PV /dev/sde is in exported VG NEWVG0 [20.00 GiB / 10.00 GiB free]
Total: 5 [399.98 GiB] / in use: 5 [399.98 GiB] / in no VG: 0 [0 ]
接下来咱们将新的NEWVG0 导入到系统中。
#导入新的卷组
[root@localhost ~]#vgimport NEWVG0
Volume group "NEWVG0" successfully imported
#将新的卷组激活
[root@localhost ~]#vgchange -ay NEWVG0
1 logical volume(s) in volume group "NEWVG0" now active
此时咱们再使用pvscan 来查看的话,状态应该与以前已经不同了。
# 状态已经发生了相应的变化
[root@localhost ~]#pvscan
PV /dev/sdb1 VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdb2 VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdc VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdd VG VG0 lvm2 [80.00 GiB / 29.98 GiB free]
PV /dev/sde VG NEWVG0 lvm2 [20.00 GiB / 10.00 GiB free]
Total: 5 [399.98 GiB] / in use: 5 [399.98 GiB] / in no VG: 0 [0 ]
将已经添加好的逻辑卷从新挂载就能够继续使用了。
20.5.删除逻辑卷
在完成了上面的大部分操做以后,咱们又有了一个新的想法,若是我想将某个分区,从卷组中去掉该怎样作?
实际中,咱们可能面临众多的困难,比方说,该分区中已经存储了不少的数据,这样的话,咱们是不能直接删除的。假设咱们有下面这样的一组逻辑卷(只是假设,为了用来佐证)
[root@localhost ~]#pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 VG0 lvm2 a-- 100.00g 0
/dev/sdb2 VG0 lvm2 a-- 100.00g 0
/dev/sdc VG0 lvm2 a-- 10.00g 89.98g
/dev/sdd VG0 lvm2 a-- 80.00g 29.98g
若是咱们要将/dev/sdd 这个分区删除掉,那么咱们首先就要在同一个卷组(VG0)中找到与/dev/sdd 已经使用掉的空间一样大小的空间,来作迁移。而后将/dev/sdd 的空间 移动到 /dev/sdc中,此时就能够进行删除了。
这样,咱们就详细的介绍了逻辑卷的详细使用,以及在使用过程当中须要注意的相关内容。实际上,逻辑卷还有快照,关于快照的内容在逻辑卷中也是很重要的一部份内容,实际使用中也是很是重要的,之后有机会会详细地介绍。如若本片文章中有描述不合理的地方,敬请留言,我会及时改正。
[root@localhost ~]#mkdir /mnt/newlv0
[root@localhost ~]#mount /dev/NEWVG0/NEWLV0 /mnt/newlv0
[root@localhost ~]#cd /mnt/newlv0
[root@localhost newlv0]#ls
acpid iptables.old readahead
atd irqbalance readonly-root
auditd kdump rngd
authconfig kernel rsyslog
................
[root@localhost ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 55G 0 part /
├─sda3 8:3 0 50G 0 part /app
├─sda4 8:4 0 512B 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 200G 0 disk
├─sdb1 8:17 0 100G 0 part
│ └─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
└─sdb2 8:18 0 100G 0 part
└─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
sdc 8:32 0 100G 0 disk
└─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
sdd 8:48 0 80G 0 disk
├─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
└─VG0-LV1 253:1 0 50G 0 lvm /mnt/lv1
在这一步中,一共有三个步骤。准备步骤:强制性检查文件系统。而后:先缩减文件系统大小。接着:缩减逻辑卷。 这三步,缺一不可。
[root@localhost ~]#umount /mnt/lv1
卷组VG0的全部空间都被使用了。接下来咱们就能够进行缩减逻辑卷的实验。
从整个扩展的过程当中,咱们看出,只要LV0的空间不足,咱们就能够很灵活的给LV0扩展存储空间。若是VG0的空间不足够使用了,那咱们就能够从新加入一个物理磁盘,并按照此过程将物理卷添加到VG0中,只要使用vgextend命令就能够。
建立了文件系统以后,将LV0挂载到 /app 目录下,就能够正常访问 LV0了,固然挂载的方式有临时挂载和永久挂载两种方式,永久挂载就是将挂载选项写到 /etc/fstab 文件中,咱们这里再也不详细介绍。
[root@localhost ~]#lvdisplay
--- Logical volume ---
LV Path /dev/VG0/LV0 #已经生成了设备名称
LV Name LV0
VG Name VG0
LV UUID D3dpT9-EYFP-ieGm-DiYm-Ey4P-O5JM-EMtrOh
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-08-15 21:51:32 +0800
LV Status available
# open 0
LV Size 250.00 GiB #逻辑卷的大小
Current LE 64000 #当前一共有多少LE 逻辑区块
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
[root@localhost ~]#vgdisplay
--- Volume group ---
VG Name VG0 #卷组名称
System ID
Format lvm2 #Format版本
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 379.98 GiB #卷组的大小
PE Size 4.00 MiB #默认区块的大小
Total PE 97276
Alloc PE / Size 0 / 0
Free PE / Size 97276 / 379.98 GiB
VG UUID rrI0HJ-JPwB-CWtU-ddM0-kvJ5-7Beo-uV5qEy
从上面的详细信息中能够看到 VG Name 尚未值, PE Size 也没有值, 那么接下来,咱们就要建立卷组,建立了卷组以后,咱们再回过头查看如下这些物理卷的详细信息,就会发生很大的变化 。
[root@localhost ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 55G 0 part /
├─sda3 8:3 0 50G 0 part /app
├─sda4 8:4 0 512B 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 200G 0 disk
├─sdb1 8:17 0 100G 0 part
└─sdb2 8:18 0 100G 0 part
sdc 8:32 0 100G 0 disk
sdd 8:48 0 80G 0 disk
注意名称的格式标准:/dev/{vg_name}/{lv_name} -> /dev/mapper/{vg_name}{lv_name}
这里有一点须要注意。物理区段的分配并不是是连续的,也就是说,属于LV0的逻辑区段,他们所对应的物理区段有可能来自不一样的物理设备。这也再一次证明了,卷组在对应物理卷到逻辑卷的映射上起到了关键性的做用。
LVM 的组成一共包含三种元素,卷(Volume,物理和逻辑卷,卷组),区段(物理和逻辑区段),设备映射器 。 接下来,咱们分别介绍这三种元素各表明什么意思。
如图所示,咱们从逻辑上实现了 建立了一个大于300G的文件系统,并且在用户看来,根本不清楚底层一共有多少个硬盘,只知道有一个文件系统能够用来存储数据。固然,这对用户来讲就足够了。具体的实验将在稍后的内容中实现。
20.6.逻辑卷快照
#首先,使用‘vgs’命令检查卷组中的空闲空间以建立新的快照
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg51cto 2 5 0 wz--n- 39.80g 20.00g
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_data vg51cto -wi-ao---- 2.93g
lv_home vg51cto -wi-ao---- 4.13g
lv_root vg51cto -wi-ao---- 9.77g
lv_swp vg51cto -wi-ao---- 2.00g
lv_usr vg51cto -wi-ao---- 1000.00m
#建立1GB的快照卷
[root@localhost ~]# lvcreate -L 1GB -s -n home_bak /dev/mapper/vg51cto-lv_home
Logical volume "home_bak" created
#选项
-s – 建立快照
-n – 为快照命名
此处,是对上面高亮要点的说明。
1.我在此建立的快照的大小。
2.建立快照。
3.建立快照名。
4.新的快照名。
5.要建立快照的卷
#若是你想要移除快照,可使用‘lvremove’命令
[root@localhost ~]# lvremove /dev/mapper/vg51cto-home_bak
#列出新建立的快照
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home_bak vg51cto swi-a-s--- 1.00g lv_home 0.00
lv_data vg51cto -wi-ao---- 2.93g
lv_home vg51cto owi-aos--- 4.13g
lv_root vg51cto -wi-ao---- 9.77g
lv_swp vg51cto -wi-ao---- 2.00g
lv_usr vg51cto -wi-ao---- 1000.00m
#往home里写500m的文件,看看快照有什么变化
[root@localhost ~]# dd if=/dev/zero of=/home/123 bs=500M count=1
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home_bak vg51cto swi-a-s--- 1.00g lv_home 49.03
lv_data vg51cto -wi-ao---- 2.93g
lv_home vg51cto owi-aos--- 4.13g
lv_root vg51cto -wi-ao---- 9.77g
lv_swp vg51cto -wi-ao---- 2.00g
lv_usr vg51cto -wi-ao---- 1000.00m
数据已经占用了49%
再来对上面图片中高亮的要点做个清楚的说明。
快照逻辑卷名称。
当前使用的卷组名。
读写模式下的快照卷,咱们甚至能够挂载并使用该卷。
快照建立时间。这个很重要,由于快照将跟踪此时间以后的每一个改变。
该快照属于tecmint_datas逻辑卷。
逻辑卷在线并可用。
咱们录制快照的源卷大小。
写时复制表大小,Cow = copy on Write,这是说对tecmint_data卷所做的任何改变都会写入此快照。
当前使用的快照大小,咱们的tecmintdata有10GB,而咱们的快照大小是1GB,这就意味着咱们的数据大概有650MB。因此,若是tecmintdatas中的文件增加到2GB,如今的51%中的内容将增长到超过所分配的快照的大小,固然,咱们在建立快照时会出现问题。这就意味着咱们须要扩展逻辑卷大小(快照逻辑卷)
给出快照组块的大小。
若是该逻辑卷满了,它就会自动丢失新的数据,咱们就不能再使用了,就算咱们去扩展快照卷的大小也不行。最好的方法就是在建立快照时,建立一个和源同样大小的快照卷。tecmint_datas的大小是10GB,若是咱们建立一个10GB大小的快照,它就永远都不会像上面那样超载,由于它有足够的空间来录制你的逻辑卷的快照。
#扩展快照
[root@localhost ~]# lvextend -L +1G /dev/mapper/vg51cto-home_bak
Size of logical volume vg51cto/home_bak changed from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
Logical volume home_bak successfully resized
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home_bak vg51cto swi-a-s--- 2.00g lv_home 24.52
lv_data vg51cto -wi-ao---- 2.93g
如今空间大小总计2G
#恢复快照或合并
[root@localhost ~]# umount /dev/mapper/vg51cto-lv_home
#检查是否卸载成功
df -h
#恢复快照
[root@localhost ~]# lvconvert --merge /dev/mapper/vg51cto-home_bak
在合并完成后,快照卷将被自动移除。如今咱们可使用df命令来查看分区大小。
重要:要自动扩展快照,咱们能够经过修改配置文件来进行。对于手动扩展,咱们可使用lvextend。
#打开lvm的配置文件
[root@localhost ~]# vim /etc/lvm/lvm.conf
#搜索单词autoextend
https://linux.die.net/man/8/lvm Linux LVM2工具手册
修改此处的100为75,这样自动扩展的起始点就是75,而自动扩展百分比为20,它将自动扩容百分之20。
若是快照卷达到75%,它会自动为快照卷扩容20%。这样,咱们能够自动扩容了。使用wq!来保存并退出。
这将把快照从超载致使下线事故中拯救出来,这也会帮助你节省更多时间。
练习:
一、添加一块新的10g硬盘到你的linux系统中,并将其分为2个分区(大小本身决定),如sdb1和sdb2
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─VolGroup-lv_root (dm-0) 253:0 0 17.6G 0 lvm /
└─VolGroup-lv_swap (dm-1) 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─VolGroup-lv01 (dm-2) 253:2 0 5G 0 lvm /data
sdc 8:32 0 10G 0 disk
[root@localhost ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x989783d7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +5G
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (655-1305, default 655):
Using default value 655
Last cylinder, +cylinders or +size{K,M,G} (655-1305, default 1305): 1305
Command (m for help): p
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x989783d7
Device Boot Start End Blocks Id System
/dev/sdc1 1 654 5253223+ 83 Linux
/dev/sdc2 655 1305 5229157+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
二、建立大小为2G的逻辑卷lv01挂载到系统中的/u01目录下面,而且在/u01目录下面建立file1~file5 5个文件。
[root@localhost ~]# mkdir /u01
[root@localhost ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
[root@localhost ~]# pvcreate /dev/sdc2
Physical volume "/dev/sdc2" successfully created
[root@localhost ~]# vgextend VolGroup /dev/sdc[1-2]
Volume group "VolGroup" successfully extended
[root@localhost ~]# lvcreate -n lv02 -L 2G VolGroup
Logical volume "lv02" created
[root@localhost ~]# mkfs -t ext4 /dev/mapper/VolGroup-lv02
[root@localhost ~]# mount /dev/mapper/VolGroup-lv02 /u01
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
18G 14G 3.0G 82% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 477M 28M 425M 6% /boot
/dev/mapper/VolGroup-lv01
4.8G 19M 4.6G 1% /data
/dev/mapper/VolGroup-lv02
2.0G 3.0M 1.9G 1% /u01
[root@localhost ~]# touch /u01/file{1..5}
[root@localhost ~]# ls /u01
file1 file2 file3 file4 file5 lost+found
三、假设sdb1分区有坏块,如今须要将sdb1分区上的数据快速移动到另外的硬盘sdb2上,怎么作?
首先,先在sdb2新建一个逻辑卷,而后挂载,把sdb1分区上的数据拷贝到sdb2
四、因为业务须要,/u01目录须要扩大到9G,怎么作?
[root@localhost ~]# lvextend -L +7G /dev/mapper/VolGroup-lv02
[root@localhost ~]# resize2fs /dev/mapper/VolGroup-lv02
五、新建一个卷组vg02,PEsize为8M,在卷组中建立一个名为lv02的逻辑卷,大小为50个pe,格式化成ext3的文件系统挂载使用,要求开机自动挂载
vgcreate -s 8M vg02 /dev/sda3
lvcreate -n lv02 -l 50 vg02
mkfs.ext3 /dev/mapper/vg02-lv02
扩展:
一、测试验证已有逻辑卷的硬盘,从一台服务器换到另外一台服务器上是否能够正常读取到原来的数据?须要怎么作?
不能正常读取原来数据,已经有分区表,能够挂载读到原来的数据,重要的是原服务器必须关机,要不加不了
正常的步骤是添加进去先要激活vg,而后才能够挂载使用
vgchange -a y lvm_list激活卷组
二、测试验证已有互为镜像的逻辑卷的硬盘,从一台服务器换到另外一台服务器上是否能够正常读取数据?怎么作?
原来服务器关掉,现有服务器也关掉,而后把原服务器互为镜像的逻辑硬盘加到如今服务器,能够读取数据,须要正常挂载
lvmdiskcan扫描块设备,看看那些是逻辑卷
逻辑卷迁移:
源端:
1)将源文件系统umount
umount /test
2)将lv和lv inactive
lvchange -an /dev/vg_test/lv_test
vgchange -an vg_test
3)导出vg
vgexport vg_test
目标端:
1)永kudzu检测新的盘
2)导入vg
vgimport vg_test
3)激活vg
vgchange -ay vg_test
3)mount文件系统