查看命令:lvs lsblk
lvm 逻辑卷管理
磁盘空间的动态划分和管理
lvm能够实现分区的动态的拉伸和回缩
lvm的创建过程其实是一个先整合,再划分的过程。
LVM创建
一、LVM的创建过程
1)添加硬盘或者创建分区,通知内核
2)创建物理卷 PV (pvcreate)
3)创建卷组 VG (vgcreate)
4)创建逻辑卷 LV (lvcreate)
5)创建文件系统 (mkfs.xfs)
6)挂载使用 (mount /etc/fstab /etc/rc.d/rc.local)
1)创建分区
# parted /dev/sdd mklabel gpt
# parted /dev/sdd mkpart primary 1 1G
# parted /dev/sdd mkpart primary 1G 2G
# parted /dev/sdd mkpart primary 2G 3G
# parted /dev/sdd mkpart primary 3G 4G
# ll /dev/sdd
sdd sdd1 sdd2 sdd3 sdd4
2)创建物理卷
# pvcreate /dev/sdd{1..4}
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.
Physical volume "/dev/sdd3" successfully created.
Physical volume "/dev/sdd4" successfully created.
2.1)查看物理卷
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- 19.00g 0
/dev/sdd1 lvm2 --- 953.00m 953.00m
/dev/sdd2 lvm2 --- 953.00m 953.00m
/dev/sdd3 lvm2 --- 954.00m 954.00m
/dev/sdd4 lvm2 --- 954.00m 954.00m
# pvscan
PV /dev/sda2 VG cl lvm2 [19.00 GiB / 0 free]
PV /dev/sdd3 lvm2 [954.00 MiB]
PV /dev/sdd2 lvm2 [953.00 MiB]
PV /dev/sdd4 lvm2 [954.00 MiB]
PV /dev/sdd1 lvm2 [953.00 MiB]
Total: 5 [22.72 GiB] / in use: 1 [19.00 GiB] / in no VG: 4 [3.72 GiB]
# pvdisplay
"/dev/sdd3" is a new physical volume of "954.00 MiB"
--- NEW Physical volume ---
PV Name /dev/sdd3
VG Name
PV Size 954.00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID kRYrRB-0BZm-Z2h1-tQxu-kDUC-FvQF-4YSZ5L
...
3)创建卷组
语法:vgcreate [-s 大小] 卷组的名字 物理卷的设备路径
# vgcreate [-s 8M] vg0 /dev/sdd{1..4}
Volume group "vg0" successfully created
-s 指定PE大小
PE(物理扩展单元) 大小(默认是4M)
3.1)
# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 2 0 wz--n- 19.00g 0
vg0 4 0 0 wz--n- 3.72g 3.72g
# vgscan
Reading volume groups from cache.
Found volume group "vg0" using metadata type lvm2
Found volume group "cl" using metadata type lvm2
# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
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 3.72 GiB
PE Size 8.00 MiB
Total PE 476
Alloc PE / Size 0 / 0
Free PE / Size 476 / 3.72 GiB
VG UUID PWOx9H-9eP0-vkdz-v31T-cHxO-C80x-4BAMfE
4)创建逻辑卷
# lvcreate -n lv0 -L 1500M vg0
Rounding up size to full physical extent 1.47 GiB
Logical volume "lv0" created.
-n 指定lv的名字
-L 指定lv的大小
vg0 取vg0卷组的空间做lv
# lvcreate -n lv0 -l 188 vg0
-l 指定使用了多少个PE
LE 逻辑扩展单元
4.1)
#lvs
#lvscan
#lvdisplay
5)创建文件系统
# mkfs.xfs /dev/vg0/lv0
6)挂载
# mkdir /lv0
# mount /dev/vg0/lv0 /lv0/
# vim /etc/fstab
/dev/vg0/lv0 /lv0 xfs defaults 0 0
7)测试
# cd /lv0
# cat > lvm-test.txt << EOF
> ---------------
> Hello JIM
> hi jim
> hello world
> ---------------
> EOF
LVM动态扩容
xfs和ext4文件系统
扩容的区别
扩容文件系统的命令不一样
xfs 使用的命令是xfs_growfs
ext4 使用的命令是resize2fs
XFS在线扩容
第1种情况:卷组内有空闲空间,直接从卷组取空间
1)对逻辑卷扩容
# lvextend -L +500M /dev/vg0/lv0 +表示在原来的空间
大小上加上多少空间大小
Rounding size to boundary between physical extents: 504.00 MiB.
Size of logical volume vg0/lv0 changed from 1.47 GiB (188 extents) to 1.96 GiB (251 extents).
Logical volume vg0/lv0 successfully resized.
2)对文件系统扩容
# xfs_growfs /dev/vg0/lv0
第2种情况:卷组内没有空间
1)创建新分区
# parted /dev/sdd mkpart primary 4G 5G
# ll /dev/sdd
sdd sdd1 sdd2 sdd3 sdd4 sdd5
2)创建物理卷
# pvcreate /dev/sdd5
Physical volume "/dev/sdd5" successfully created.
3)加入卷组 vg扩容
# vgextend vg0 /dev/sdd5
Volume group "vg0" successfully extended
4)对逻辑卷扩容
# lvextend -L 4500M /dev/vg0/lv0
Rounding size to boundary between physical extents: 4.40 GiB.
Size of logical volume vg0/lv0 changed from 1.96 GiB (251 extents) to 4.40 GiB (563 extents).
Logical volume vg0/lv0 successfully resized.
5)对文件系统扩容
# xfs_growfs /dev/vg0/lv0
ext4扩容
创建lv0逻辑卷
# lvcreate -n lv0 -L 2G vg0
制作文件系统ext4
# mkfs.ext4 /dev/vg0/lv0
挂载
# mount /dev/vg0/lv0 /lv0
在逻辑卷中添加数据
# cd /lv0
# echo "ext4" >test.txt
# cat test.txt
ext4
扩容lv0
# lvextend -L +1G /dev/vg0/lv0
Size of logical volume vg0/lv0 changed from 2.00 GiB (256 extents) to 3.00 GiB (384 extents).
Logical volume vg0/lv0 successfully resized.
文件系统扩容
# resize2fs /dev/vg0/lv0
缩容
XFS不支持缩容
ext4支持缩容
ext4缩容
注意:
1.风险大有可能造成数据的损坏
2.确保缩减后的空间大小依然能存储原来的所有数据
3.不要在线缩容
4.在缩减之前强制检查文件系统
现在要在创建一个逻辑卷lv1,lv1的大小要求为1G,卷组内没有空间,但逻辑卷lv0的空间过大,缩减lv0,给lv1
给lv0缩减
1)先卸载
# umount /lv0
2)强制检查文件系统
# e2fsck -f /dev/vg0/lv0
3)缩减文件系统
# resize2fs /dev/vg0/lv0 1800M
4)缩减逻辑卷
# lvreduce -L 1800M /dev/vg0/lv0
5)测试缩减逻辑卷后逻辑卷能否正常使用
# mount /dev/vg0/lv0 /lv0
# cd /lv0
# cat
lost+found/ test.txt
# cat test.txt
ext4
# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root 17G 4.3G 13G 26% /
devtmpfs 473M 0 473M 0% /dev
tmpfs 489M 84K 489M 1% /dev/shm
tmpfs 489M 7.1M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 155M 860M 16% /boot
tmpfs 98M 16K 98M 1% /run/user/42
tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/vg0-lv0 1.7G 6.1M 1.6G 1% /lv0
创建快照
快照的工作原理:
保存数据某一刻的状态。快照刚建立的时候,大小是空的,快照是访问源数据的另一条路径。快照是在数据改变之前将数据原封不动的保存在快照空间里面。注意变化数据的源数据不能超过快照空间的大小,否则,快照将崩溃。
写时复制:快照做完以后,源文件要修改前,会复制一份到快照,以便恢复到最原始的时候
实验:
1.挂载lv0逻辑卷,在逻辑卷内写入数据
# mount /dev/vg0/lv0 /lv0
# cd /lv0
# ls
# cp /etc/passwd /etc/shadow .
# echo "hello" > lvmsnap-test.txt
# cat lvmsnap-test.txt
hello
# ll
总用量 12
-rw-r--r--. 1 root root 6 7月 7 22:34 lvmsnap-test.txt
-rw-r--r--. 1 root root 2229 7月 7 22:34 passwd
----------. 1 root root 1248 7月 7 22:34 shadow
2.给/dev/vg0/lv0逻辑卷做快照
# lvcreate -s /dev/vg0/lv0 -L 800M -n lv0.snap
Using default stripesize 64.00 KiB.
Logical volume "lv0.snap" created.
3.改变lv0逻辑卷的数据
# cp /etc/group .
# rm passwd
rm:是否删除普通文件 "passwd"?y
# ls
group lvmsnap-test.txt shadow
# echo "world" >> lvmsnap-test.txt
# cat lvmsnap-test.txt
hello
world
4.恢复数据 会删除快照卷 恢复之前要卸载
# umount /dev/vg0/lv0
# lvconvert --merge /dev/vg0/lv0.snap
Merging of volume vg0/lv0.snap started.
lv0: Merged: 100.00%
5.挂载lv0逻辑卷查看数据是否恢复到拍快照的那一刻的状态
# mount /dev/vg0/lv0 /lv0
# cd /lv0
# ls
lvmsnap-test.txt passwd shadow
# cat lvmsnap-test.txt
hello