一.为什么使用逻辑卷?
有这么一种情况 你在当初规划主机的时候将/home只给了50GB 等到用户众多的时候导致这个文件系统不够大,这个时候你会怎么做呢??这个时候多数的朋友都是重新加一个硬盘 然后重新分区格式化 将/home下的数据再完全 复制过来 然后将原来的分区卸载重新挂载新的分区 若是第二次分配的空间又太多的时候你会怎么办呢 这个时候又会导致很多的磁盘空间浪费 分区缩小又得重新操作上面的几步流程 那么这个时候就出现了更简单的方法了-lvm
LVM可以整合多个物理分区在一起 让这些分区看起来就像是一个磁盘一样 而且也可以在将来其他的物理分区或将其从这个lvm管理的磁盘当中删除 这样一来 整个磁盘上的空间就非常具有弹性了
逻辑卷和逻辑卷管理有助于更加轻松地管理磁盘空间。如果文件系统需要更多的空间,可以将其卷组的可用空间分配给逻辑卷,并且可以调整文件系统的大小。如果磁盘开始出现错误,可以通过卷组将替换磁盘注册为物理卷,并且逻辑卷的范围可以迁移到新磁盘。
物理分区:相当于几个橙子
pv:物理卷,被处理过的物理分区(相当于几个橙子榨出来的几杯果汁)
vg:物理卷组,由pv组成(相当于将两被果汁放进去的大容器)
pe:物理扩展,是lvm的最小的存储单元(是大容器里面果汁的组成)
lvm:逻辑卷,是pe大小的整数倍,从vg里面划出来的,可以使硬盘无限扩容、无限分区,上限:8EB-1字节;(从大容器里面倒出来的果汁)
二.用命令行实施 lvm 存储
1、清除上一个实验的操作:
umount /mnt/ 卸载
vim /etc/fstab 删除上面实验添加的内容
fdisk /dev/vdb 删除分区
partprobe 同步分区信息
fdisk -l 查看分区
2.打开监控:
watch -n 1 ‘pvs;vgs;lvs;df -h /mnt’
3、建立2个分区,大小分别为 1G;改变(t) id 为8e,即就是建立物理设备
Device Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 8e Linux LVM
/dev/vdb2 2099200 4196351 1048576 8e Linux LVM
4、
pvcreate /dev/vdb1 #将设备变成物理卷
vgcreate vg0 /dev/vdb1 #将设备放进物理卷组,vg的名字vg0不做限制,可以在创建时指定其他物理卷(以空格隔开),也可以随后使用vgextend添加新物理卷
lvcreate -L 300M -n lv0 vg0 #从物理卷组vg0取出一部分lv0,大小为300M,lvm的名字lv0不做限制
mkfs.xfs /dev/vg0/lv0 #格式化该部分,将在新逻辑卷上创建xfs文件系统
mount /dev/vg0/lv0 /mnt/ #挂载 ,会出现vg0-lv0
测试:
###建立lvm分区
Device Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 8e Linux LVM
/dev/vdb2 2099200 4196351 1048576 8e Linux LVM
###将设备vdb1变成物理卷
[[email protected] ~]# pvcreate /dev/vdb1 ###将vdb1变成物理卷
Physical volume "/dev/vdb1" successfully created
[[email protected] ~]# vgcreate vg0 /dev/vdb1
###将vdb1物理卷放进物理卷组vg0
Volume group "vg0" successfully created
[[email protected] ~]# lvcreate -L 300M -n lv0 vg0 ###创建lvm,名字为lv0
Logical volume "lv0" created
[[email protected] ~]# mkfs.xfs /dev/vg0/lv0 ###xfs格式化/dev/vg0/lv0
meta-data=/dev/vg0/lv0 isize=256 agcount=4, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=76800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[[email protected] ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 942644 0 942644 0% /sys/fs/cgroup
[[email protected] ~]# mount /dev/vg0/lv0 /mnt
[[email protected] ~]# df ###挂载/dev/vg0/lv0
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 942644 0 942644 0% /sys/fs/cgroup
/dev/mapper/vg0-lv0 303788 15520 288268 6% /mnt
原始
将vdb1弄成物理卷
生成物理卷组vg0并且将vdb1添加进去
生成lv0
三.lvm调整
一.lvm不够用,xfs扩容
1.当物理组卷vg0中剩余容量充足的时候,可以在vg0范围内,直接从扩展lv0的容量(热拉伸,不用解挂)
lvextend -L 500M /dev/vg0/lv0 #将lvm扩展到500M
xfs_growfs /dev/vg0/lv0 #将文件系统拉伸变大500M
[[email protected] ~]# lvextend -L 500M /dev/vg0/lv0 ###将lvm扩展到500M
Extending logical volume lv0 to 500.00 MiB
Logical volume lv0 successfully resized
[[email protected] ~]# xfs_growfs /dev/vg0/lv0 ####将文件系统拉伸变大500M
meta-data=/dev/mapper/vg0-lv0 isize=256 agcount=4, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=76800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 76800 to 128000
文件系统拉伸变大后在挂载才会显示增大了的容量,否则只会显示lv0变大
2.vg0的大小不够用,需要向vg0中加入更多的容量,再进行扩展拉伸
pvcreate /dev/vdb2 ##加入新的物理卷
vgextend vg0 /dev/vdb2 #将物理卷组扩展
lvextend -L 1500M /dev/vg0/lv0 #将lvm扩展到1500M
xfs_growfs /dev/vg0/lv0 #将挂载的lvm拉伸变大到1500M
实验:
[[email protected] ~]# pvcreate /dev/vdb2 ##创建一个新的物理卷
Physical volume "/dev/vdb2" successfully created
[[email protected] ~]# vgextend vg0 /dev/vdb2 ###将/dev/vdb2添加进vg0
Volume group "vg0" successfully extended ###增大lv0到1500M
[[email protected] ~]# lvextend -L 1500M /dev/vg0/lv0
Extending logical volume lv0 to 1.46 GiB
Logical volume lv0 successfully resized
[[email protected] ~]# xfs_growfs /dev/vg0/lv0 ###增大文件系统
meta-data=/dev/mapper/vg0-lv0 isize=256 agcount=7, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 128000 to 384000
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 监视内容
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv0 vg0 -wi-ao---- 1.46g
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv0 1.5G 16M 1.5G 2% /mnt
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
二.lvm不够用,ext4扩容,可增大可缩小
主要用来缩减,必须先缩减文件系统,再扫描。再缩减设备
不支持热缩减:不能在使用时操作,必须先卸载解挂
1.增大文件系统
???
umount /mnt #将lvm卸载
mkfs.ext4 /dev/vg0/lv0 #格式化成ext系统文件
mount /dev/vg0/lv0 /mnt/ #将lvm挂载
mount #查看是否激活
lvextend -L 1800M /dev/vg0/lv0 #将lvm扩展到1800M
resize2fs /dev/vg0/lv0 #将文件系统拉伸变大到1800M
???
2.缩小文件系统
umount /mnt/ #卸载
e2fsck -f /dev/vg0/lv0 #数据扫描,防止破坏文件系统中的数据
resize2fs /dev/vg0/lv0 1000M #缩小文件系统到1000M
mount /dev/vg0/lv0 /mnt #挂载
lvreduce -L 1000M /dev/vg0/lv0缩小lvm
3.缩减vg:
数据迁移,移除含有数据的设备
pvmove /dev/vdb1 /dev/vdb2 #将vdb1移到闲置的vdb2中
vgreduce vg0 /dev/vdb1 #从vg0中移除vdb1
pvremove /dev/vdb1 #删除vdb1
四.lvm快照
[[email protected] vg0]# cd /mnt/
[[email protected] mnt]# mkdir file{1..9}
lvcreate -L 50M -n lv0backup1 -s /dev/vg0/lv0 #给lv0生成快照,大小50M,名字是lv0backup
会在/dev/vg0/内生成一个lv0backup1
mount /dev/vg0/lv0backup1 /mnt/ #挂载快照
ls /mnt/ #查看快照内容
rm -fr /mnt/* #删除快照里面的所有内容
ls /mnt/ #查看快照内容
umount /mnt/ #卸载快照
lvremove /dev/vg0/lv0backup1 #把快照删除
lvcreate -L 50M -n lv0backup2 -s /dev/vg0/lv0 #重新照一个快照
mount /dev/vg0/lv0backup2 /mnt/ #挂载
ls /mnt/ #内容还在,读取的是原始设备
实验:
在原来lvm中创建了
[[email protected] vg0]# cd /mnt/
[[email protected] mnt]# mkdir file{1..9}
umount /mnt
[[email protected] vg0]# lvcreate -L 50M -n lv0backup1 -s /dev/vg0/lv0
Rounding up size to full physical extent 52.00 MiB
Logical volume "lv0backup1" created
[[email protected] vg0]# mount /dev/vg0/lv0backup1 /mnt/
[[email protected] vg0]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3156472 7317428 31% /
devtmpfs 469328 0 469328 0% /dev
tmpfs 484916 84 484832 1% /dev/shm
tmpfs 484916 12860 472056 3% /run
tmpfs 484916 0 484916 0% /sys/fs/cgroup
/dev/mapper/vg0-lv0backup1 303788 15568 288220 6% /mnt
[[email protected] vg0]# cd /mnt/
[[email protected] mnt]# ls
file1 file2 file3 file4 file5 file6 file7 file8 file9
[[email protected] mnt]# rm -rf *
[[email protected] mnt]# ls ###在lv0backup1上将文件删完
[[email protected] ~]# umount /mnt ###解挂
###删除lv0backup1快照
[[email protected] ~]# lvremove /dev/vg0/lv0backup1
Do you really want to remove active logical volume lv0backup1? [y/n]: y
Logical volume "lv0backup1" successfully removed
[[email protected] ~]# lvcreate -L 50M -n lv0backup2 -s /dev/vg0/lv0
Rounding up size to full physical extent 52.00 MiB
Logical volume "lv0backup2" created
####重新拍照lv0backup2
[[email protected] ~]# mount /dev/vg0/lv0backup2 /mnt
[[email protected] ~]# cd /mnt/
[[email protected] mnt]# ls ###原来文件还在
file1 file2 file3 file4 file5 file6 file7 file8 file9
五.全部删除还原硬盘
lvremove /dev/vg0/lv0backup2 ###删除lv0的快照
lvremove /dev/vg0/lv0 ###删除lv0设备
vgremove vg0 ###删除物理卷组vg0
pvremove /dev/vdb1 ###删除物理卷
fdisk /dev/vdb ###按d 删除分区
实验:
[[email protected] mnt]# lvremove /dev/vg0/lv0backup2 ###删除lv0的快照
Do you really want to remove active logical volume lv0backup2? [y/n]: y
Logical volume "lv0backup2" successfully removed
[[email protected] mnt]# lvremove /dev/vg0/lv0 ###删除lv0设备
Do you really want to remove active logical volume lv0? [y/n]: y
Logical volume "lv0" successfully removed
[[email protected] mnt]# vgremove vg0 ###删除物理卷组vg0
Volume group "vg0" successfully removed
[[email protected] mnt]# pvremove /dev/vdb1 ###删除物理卷
Labels on physical volume "/dev/vdb1" successfully wiped
[[email protected] mnt]# fdisk /dev/vdb ###按d 删除分区
练习:
创建一个逻辑卷:
1)逻辑卷名字为qa,属于qagroup卷组
2) 逻辑卷qa分配300M大小
3)使用ext3文件系统格式并且自动挂载到/mnt/qa目录下
4)因业务需要,将该lvm设备热拉伸到700M
先新建两个分区,贴上8e Linux LVM标签
Device Boot Start End Blocks Id System
/dev/vdb1 2048 2099199 1048576 8e Linux LVM
/dev/vdb2 2099200 4196351 1048576 8e Linux LVM
[[email protected] mnt]# pvcreate /dev/vdb1
Physical volume "/dev/vdb1" successfully created
[[email protected] mnt]# vgcreate qagroup /dev/vdb1 ###创建qagroup卷组
Physical volume "/dev/vdb1" successfully created
Volume group "qagroup" successfully created
[[email protected] mnt]# lvcreate -L 300M -n qa qagroup ###从物理卷组qagroup取出一部分qa,大小为300M
WARNING: xfs signature detected on /dev/qagroup/qa at offset 0. Wipe it? [y/n] y
Wiping xfs signature on /dev/qagroup/qa.
Logical volume "qa" created
[[email protected] mnt]# mkfs.ext3 /dev/qagroup/qa ###格式化成ext3
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128016 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
63 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
[[email protected] mnt]# mkdir /mnt/qa
[[email protected] mnt]# mount /dev/qagroup/qa /mnt/qa/
[[email protected] mnt]# vim /etc/fstab
/dev/mapper/qagroup-qa /mnt/qa ext3 defaults 0 0
4)先扩展lvm再文件系统
[[email protected] mnt]# lvextend -L 700M /dev/qagroup/qa ###扩展lvm
Extending logical volume qa to 700.00 MiB
Logical volume qa successfully resized
[[email protected] mnt]# resize2fs /dev/qagroup/qa 700M ###扩展文件系统
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/qagroup/qa is mounted on /mnt/qa; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/qagroup/qa is now 716800 blocks long.
[[email protected] mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/qagroup-qa 670M 2.6M 631M 1% /mnt/qa