提出思路:
所有的数据太多,为了便于处理和保存,我们想要建立一个随时变大变小的容器。
例如水果榨汁,我们可以任取水果和容器。
如图:
部分定义:
pv即为物理卷——被lv命令处理过的物理分区(存放果汁的小瓶子)
vg即为物理卷组——被组装到一起的物理卷(我们需要将将许多小瓶子的果汁到入大瓶子中,物理卷组就是大瓶子)
pe即为物理扩展——lvm设备的最小单元(可以通过pvdisplay查看),lvm的大小必须是pe的整数倍
lvm即为逻辑卷——可以直接使用的设备(可以增大缩减并保持原有数据不变)
lvm的建立
fdisk /dev/vdb #建立一个分区并制定标签为8e
#拿个水果
pvcreate /dev/vdb1 #榨汁并倒入小瓶子
vgcreate vg0 /dev/vdb1 #弄个大瓶子,并将小瓶子里的果汁倒入大瓶子
##
vgcreate vg0 -s 8M /dev/vdb2 #指定pe(物理扩展)的大小
lvcreate -L 20M -n lv0 vg0 #-L表示lvm实际大小 -n表示名字
#从大瓶子倒出
#建好设备(买下一片荒地)
lvcreate -l 10 -n lv0 vg0 #-l表示pe的倍数
mkfs.xfs /dev/vg0/lv0 #文件格式化,将文件系统设为xfs格式
#建立文件系统(铺设草坪)
mount /dev/vg0/lv0 /mnt #挂载(查看设备是否能正常挂载)
watch -n 1 'pvs;echo ====;vgs;echo ====;lvs;echo ====;df -h /mnt' #监控lvm创建过程中的状态
lvm拉伸
1.当vg中的剩余容量充足时
lvm支持热拉伸——就时说可以在lvm的使用过程中进行拉伸(容量增加)
举例扩容到80M:
lvextend -L 80M /dev/vg0/lv0 #拉伸设备大小(先拉开荒地)
xfs_growfs /dev/vg0/lv0 #拉伸文件系统大小(后在荒地上铺设草坪)
此时监控的状态:
补充:
man df #查看df命令说明
df -H #1M=1000
df -h #1M=1024
2.当vg中剩余容量不足时
举例扩容到200M:
再次建立一个分区并指定标签为8e(同lvm建立中的第一步)
partprobe #手动同步分区表
mkfs.xfs /dev/vg0/lv0 #文件格式化,将文件系统设为xfs格式
#建立文件系统(铺设草坪)
pvcreate /dev/vdb2 #建立一个新的物理卷
#再拿一个小瓶子
vgextend vg0 /dev/vdb2 #拉伸物理卷组
#扩大大瓶子的容量
lvextend -L 200M /dev/vg0/lv0 #扩大lvm
#扩大输出
xfs_growfs /dev/vg0/lv0 #扩大文件系统
此时监控中的内容为:
以上都是xfs格式,此格式下不能缩减只能拉伸。
3.针对ext文件系统的拉伸和缩减
可以进行热拉伸:
umount /mnt #将上一步的设备卸载下来
mkfs.ext4 /dev/vg0/lv0 #将文件系统格式改为ext
mount /dev/vg0/lv0 /mnt #挂载设备
lvextend -L 250M /dev/vg0/lv0 #扩大lvm容量
resize2fs /dev/vg0/lv0 #扩大文件系统大小
此时监控中的内容:
补充:
pvdisplay lvdisplay vgdisplay #查看具体信息
不能热缩减(不能正在使用中缩减,先卸载再缩减):
umount /dev/vg0/lv0 | /mnt #卸载设备
e2fsck -f /dev/vg0/lv0 无报错就继续用 #检查设备
resize2fs /dev/vg0/lv0 100M #减小文件系统大小
#将多于的草坪去掉
lvreduce -L 100M /dev/vg0/lv0 #减小设备大小
#将多余的荒地去掉
mount /dev/vg0/lv0 /mnt #挂载设备
此时监控中的状态:
拉伸的时候先设备再文件系统,
缩减的时候先文件系统再设备,
设备就像荒地,而文件系统是在铺东西
数据迁移
pvmove /dev/vdb1 /dev/vdb2 #将vdb1中的数据转移到vdb2中
#前提必须是在一个组内
#中间过程要等,不能Ctrl+c——可能会导致数据丢失
vgreduce vg0 /dev/vdb1 #减小vg0值
#减小大瓶子的容量
pvremove /dev/vdb1 #去掉pv中的/dev/vdb1
此时监控中的内容:
lvm快照
lvcreate -L 40M -n lv0-backup -s /dev/vg0/lv0
mount /dev/vg0/lv0-backup /mnt
此时监控中的内容:
如果截取数据大于40M,会损坏设备
dd if=/dev/zero of=/mnt/file bs=1M count=60 #截取60M的数据放入/mnt/file中
会自动卸载掉lv0-backup,再次挂载会报错
元设备的reset:
umount /mnt #若没有彻底卸载,可再卸载一次
lvremove /dev/vg0/lv0-backup
lvcreate -L 40M -n lv0-backup -s /dev/vg0/lv0
此时可以直接挂载lv0-backup。
删除快照时应该先删除快照再删除设备。。。
过程截图: