天天看点

Linux——逻辑卷LVM,lvm扩容,lvm缩减,lvm快照

一.为什么使用逻辑卷?

有这么一种情况 你在当初规划主机的时候将/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’
           
Linux——逻辑卷LVM,lvm扩容,lvm缩减,lvm快照

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

           

原始

Linux——逻辑卷LVM,lvm扩容,lvm缩减,lvm快照

将vdb1弄成物理卷

Linux——逻辑卷LVM,lvm扩容,lvm缩减,lvm快照

生成物理卷组vg0并且将vdb1添加进去

Linux——逻辑卷LVM,lvm扩容,lvm缩减,lvm快照

生成lv0

Linux——逻辑卷LVM,lvm扩容,lvm缩减,lvm快照

三.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
           

继续阅读