逻辑卷管理器(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