逻辑卷管理器(LVM)
LVM (Logical Volume Manager,Version 2)
dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
设备名:/dev/dm-#
软链接:/dev/mapper/VG_NAME-LV_NAME /dev/VG_NAME/LV_NAME
1.创建逻辑卷
/dev/sdb /dev/sdc 两块硬盘
pvcreate /dev/sdb /dev/sdc
vgcreate [-s 16m] vg0 /dev/sdb /dev/sdc
lvcreate -L 10G -n mysql vg0
lvcreate -L 8G -n nginx vg0
mkfs.ext4 /dev/vg0/mysql
mkfs.ext4 /dev/vg0/nginx
mkdir /mnt/nginx /mnt/mysql
mount /dev/vg0/mysql /mnt/mysql
mount /dev/vg0/nginx /mnt/nginx
永久挂载:
blkid | sed -nr "/mapper/s#.*/vg0-(.*): UUID=\"(.*)\" .*\"(.*)\"#UUID=\2 /mnt/\1 \t\t \3 \t defaults\t 0 0 #p" >> /etc/fstab
mount -a
2.扩展卷组
echo -e "n\n\n+5G\nw\n" | fdisk /dev/sda
pvcreate /dev/sda6
vgextend vg0 /dev/sda6
3.扩展逻辑卷
vgdisplay #查看卷组是否有空间
# xfs文件系统
lvextend -L +5G /dev/vg0/nginx
xfs_grows /dev/vg0/nginx
#ext文件系统
lvextend -L +5G /dev/vg0/mysql
resize2fs /dev/vg0/mysql
或
lvextend -r -L +5G /dev/vg0/mysql
4.缩减逻辑卷
缩减前先要取消挂载逻辑卷
备份要缩减的逻辑卷的数据
umount /dev/vg0/mysql
fsck -f /dev/vg0/mysql #检查文件系统
resize2fs /dev/vg0/mysql 5G #将该逻辑卷缩减为5G
lvreduce -L 5G /dev/vg0/mysql
mount -a #重新挂载
5.逻辑卷的快照及还原
touch /mnt/mysql/file{1..3} #创建三个文件来验证快照功能
touch /mnt/nginx/file{1..3}
lvcreate -s -n nginx_snap -L 1G /dev/vg0/nginx #xfs文件系统 为nginx逻辑卷创建一个大小为1G的快照
lvcreate -s -n mysql_snap -p r -L 1G /dev/vg0/mysql #ext4文件系统
mkdir /mnt/nginx_snap /mnt/mysql_snap
mount -o nouuid /dev/vg0/nginx_snap /mnt/nginx_snap #xfs
mount /dev/vg0/mysql_snap /mnt/mysql_snap #ext4
修改/mnt/mysql 和/mnt/nginx的数据
卸载挂载的逻辑卷及快照
umount /mnt/mysql
umount /mnt/mysql_snap
umount /mnt/nginx
umount /mnt/nginx_snap
lvconvert --merge /dev/vg0/mysql_snap
lvconvert --merge /dev/vg0/nginx_snap
mount -a #重新挂载
6.删除PV
vgdisplay
pvmove /dev/sda6 #将sda6上的数据移到vg0其他空间
vgreduce vg0 /dev/sda6
pvremove /dev/sda6
7.删除逻辑卷
umount /mnt/mysql
umount /mnt/nginx
lvremove /dev/vg0/nginx
lvremove /dev/vg0/mysql
vgremove vg0
pvremove /dev/sdb /dev/sdc
sed -i -e '/mysql/d' -e '/nginx/d' /etc/fstab