邏輯卷管理器(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