磁盘存储和文件系统(七)
磁盘存储和文件系统(七)
逻辑卷管理器(LVM)
- 容许对卷进行方便操做的抽象层,包括从新设定文件系统的大小
- 容许在多个物理设备间从新组织文件系统
- 将设备指定为物理卷
- 用一个或者多个物理卷来建立一个卷组
- 物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
- 在物理卷上建立的逻辑卷是由物理区域(PE)组成
- 能够在逻辑卷上建立文件系统

LVM介绍
- LVM:Logical Volume Manager,Version 2
- dm:device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
- 设备名:/dev/dm-#
- 软连接:
- /dev/mapper/VG_NAME-LV_NAME
- /dev/VG_NAME/LV_NAME
LVM更改文件系统的容量
- LVM能够弹性的更改LVM的容量
- 经过交换PE来进行资料的转换,将原来LV的PE转移到其余的设备中以下降LVr容量,或将其余设备中的PE加到LV中以加大容量

PV管理工具
vg 管理工具
- 显示卷组
- 建立卷组
- vgcreate [-s #[kKmMgGtTpPeE]] VolumeGRoupName PhysicalDevicePath [PhysicalDevicePath...]
- 管理卷组
- vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
- vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
- 删除卷组
LV管理工具
- 显示逻辑卷
- 建立逻辑卷
- lvcreate -L #[mMgGtT] -n NAME VolumeGroup
- lvcreate -L 60%VG -n mylv testvg
- lvcreate -l 100%FREE -n yourlv testvg
- 删除逻辑卷
- lvremove /dev/VG_NAME/LV_NAME
- 重设文件系统大小
- fsadm [options] resize device [new_size[BKMGTEP]]
- resize2fs [-f] [-F] [-M] [-P] device [new_size]
- xts_growfs /mountpoint
扩展和缩减逻辑卷
- 扩展逻辑卷:
- lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
- resize2fs /dev/VG_NAME/LV_NAME
- lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
- 缩减逻辑卷:
- umount /dev/VG_NAME/LV_NAME
- e2fsck -f /dev/VG_NAME/LV_NAME
- resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
- lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
- mount
建立逻辑卷示例
- 建立物理卷
- 为卷组分配物理卷
- vgcreate vg0 /dev/sda3
- 从卷组建立逻辑卷
- lvcreate -L 256M -n data vg0
- mkfs.xfs /dev/vg0/data
- 挂载
- mount /dev/vg0/data /mnt/data
跨主机迁移卷组
- 源计算机上
- 在旧系统中,umount全部卷组上的逻辑卷
- 禁用卷组
- vgchange –a n vg0
- lvdisplay
- 导出卷组
- vgexport vg0
- pvscan
- vgdisplay
- 拆下旧硬盘
- 在目标计算机上
- 在新系统中安装旧硬盘,并导入卷组:vgimport vg0
- vgchange –ay vg0 启用
- mount全部卷组上的逻辑卷
逻辑卷管理器快照
- 快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝
- 对于须要备份或者复制的现有数据临时拷贝以及其它操做来讲,快照是最合适
的选择
- 快照只有在它们和原来的逻辑卷不一样时才会消耗空间
- 在生成快照时会分配给它必定的空间,但只有在原来的逻辑卷或者快照有所
改变才会使用这些空间
- 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
- 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的
数据
- 创建快照的卷大小小于等于原始逻辑卷,也可使用lvextend扩展快照
逻辑卷管理器快照
- 快照就是将当时的系统信息记录下来,就好像照相通常,若未来有任何数据
改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件
系统共享

- 因为快照区与本来的LV共用不少PE的区块,所以快照与被快照的LV必须在同一个VG中.系统恢复的时候的文件数量不能高于快照区的实际容量
使用LVM快照
- 为现有逻辑卷建立快照
- lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
- 挂载快照
- mkdir -p /mnt/snap
- mount -o ro /dev/vg0/data-snapshot /mnt/snap
- 恢复快照
- umount /dev/vg0/data-snapshot
- umount /dev/vg0/data
- lvconvert --merge /dev/vg0/data-snapshot
- 删除快照
- umount /mnt/databackup
- lvremove /dev/vg0/databackup
逻辑卷例子
- 准备一个硬盘 /dev/sdb,分区 /dev/sda6
- fdisk /dev/sda
- partprobe
- sdb 8:16 0 20G 0 disk
- 建立物理卷
- yum install lvm2 -y;pvcreate /dev/sda6 /dev/sdb
- pvs
- 建立卷组
- vgcreate vg0 /dev/sda6 /dev/sdb
- 建立逻辑卷
- lvcreate -n mysql -L 8G vg0
- 建立文件系统
- mkfs.xfs /dev/vg0/mysql
- 挂载
- mkdir /mnt/mysql
- mount /dev/vg0/mysql /mnt/mysql
- vim /etc/fstab
-

- 查看
- mount |grep /dev/mapper/vg0-mysql
-

- 单个硬盘与逻辑卷性能比较
-

- 扩展逻辑卷(文件系统为xfs)
- lvextend -l +100%free /dev/vg0/mysql
- df -hP /dev/vg0/mysql
-

- xfs_growfs /mnt/mysql/
- df -hP /dev/vg0/mysql
-
- 卷组、物理卷的空间都没有了,逻辑卷的空间仍是不够用咋办?
- pvcreate /dev/sdc
- vgextend vg0 /dev/sdc
- vgdisplay|egrep "vg0|PE"
- 再建立一个逻辑卷,建立文件系统为ext4
- lvcreate -n binlog -L 10G vg0
- mkfs.ext4 /dev/vg0/binlog
- blkid /dev/vg0/binlog
-

- 扩展逻辑卷( 文件系统为ext4 )
- vgdisplay |grep Free
-

- mkdir /mnt/binlog
- mount /dev/vg0/binlog /mnt/binlog
- lvextend -l +1000 /dev/vg0/binlog
- resize2fs /dev/vg0/binlog
- 扩展逻辑卷( ext4 与 xfs 文件系统都适用)
- lvextexted -r -l +100%free /dev/vg0/mysql
- 缩减逻辑卷(只适用于ext4文件系统)
- umount /mnt/binlog/
- e2fsck -f /dev/vg0/binlog
- resize2fs /dev/vg0/binlog 10G
- lvreduce -L 10G /dev/vg0/binlog
- mount /dev/vg0/binlog /mnt/binlog/
- df -hP /mnt/binlog/
跨主机迁移卷组实例
- 在 centos6 上建立逻辑卷,建立文件系统,挂载,写入数据,卷组更名
- yum install lvm2 -y
- pvcreate /dev/sdb
- vgcreate -s 16M vg0 /dev/sdb
- lvcreate -n mysql -L 5G vg0
- mkfs.ext4 /dev/vg0/mysql
- mount /dev/vg0/mysql /mnt/mysql
- cp -av /etc/. /mnt/mysql
- vgrename vg0 vg1
- 在centos6机器上卸载全部逻辑卷,禁用卷组、导出卷组
- umount /mnt/mysql/
- vgchange -an vg1

- vgexport vg1


- init 0
- 查看全部逻辑卷对应的全部虚拟磁盘文件

- 在另外一台机器上添加硬盘,导入 centos6对应的虚拟文件


- 识别新添加的硬盘

- 查看系统中全部的卷组,导入卷组,启用卷组,挂载,查看数据
- [root@Centos7 ~]# yum install lvm2 -y

- [root@Centos7 ~]# vgimport vg1
- [root@Centos7 ~]# vgchange -ay vg1

硬盘( 逻辑卷的组成部分 )快坏了,搬家
- 查看快坏的硬盘空间大小
-

- 查看 物理卷 /dev/sdb所属的 vg0 所剩空间的大小

- 将 /dev/sdb 搬家到它所属的vg0的剩余空间,发现剩余空间过小了

- 建立一个物理卷,扩展卷组 vg0,将/dev/sdb搬家
- pvcreate /dev/sdd
- vgextend vg0 /dev/sdd

- 从卷组中移除 /dev/sdb,

- 查看

- 删除物理卷

- 这时 /dev/sdb就是一个普通硬盘了,把即将坏的硬盘拆走。
逻辑卷还原成普通硬盘
- umount /mnt/mysql

- 删除 vg1

- 查看

- 物理卷的删除

- 这就成了一个独立硬盘就能够拔走了
逻辑卷快照举例
- 建立 2 个逻辑卷 /dev/vg0/lv-mysql,/dev/vg0/lv-binlog,vg0有剩余空间
- yum install lvm2 -y
- pvcreate /dev/sd{b,c}
- vgcreate vg0 /dev/sd{b,c}
- lvcreate -L 23G -n lv-mysql vg0
- lvcreate -l +50%free -n lv-binlog vg0
- 建立文件系统,挂载,查看
- mkdir /mnt/mysql
- mkdir /mnt/binlog
- mkfs.xfs /dev/vg0/lv-mysql
- mkfs.ext4 /dev/vg0/lv-binlog
- mount /dev/vg0/lv-mysql /mnt/mysql/
- mount /dev/vg0/lv-binlog /mnt/binlog/

- 向逻辑卷写入数据
- 向 /dev/vg0/lvl-mysql 写入数据

- 向 /dev/vg0/lv-binlog 写入数据

- 建立逻辑卷快照
- lvcreate -s -L 1G -n lv-mysql-snapshot /dev/vg0/lv-mysql // xfs
- lvcreate -s -L 1G -n lv-binlog-snapshot -p r /dev/vg0/lv-binlog //ext4
- 挂载逻辑卷快照
- mkdir /mnt/mysql-snapshot;mkdir /mnt/binlog-snapshot
- mount -o ro,nouuid /dev/vg0/lv-mysql-snapshot /mnt/mysql-snapshot/ //xfs
- mount -o ro /dev/vg0/lv-binlog-snapshot /mnt/binlog-snapshot/ //ext4
- 查看

- 修改逻辑卷的原数据

- 利用逻辑卷快照进行恢复
- umount /mnt/{mysql,mysql-snapshot,binlog,binlog-snapshot}
- lvconvert --merge /dev/vg0/lv-mysql-snapshot
- lvconvert --merge /dev/vg0/lv-binlog-snapshot
- mount /dev/vg0/lv-mysql /mnt/mysql
- mount /dev/vg0/lv-binlog /mnt/binlog

- 那么逻辑卷快照去哪儿了呢?

欢迎关注本站公众号,获取更多信息