lvm入门之扩缩容及新建分区

最近更新时间为2021.11.13

(一)基本概念

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。使用LVM好处就是可以动态给lvm分区目录空间大小进行动态扩缩容。

物理卷(Physical Volume,PV) LVM的基本存储逻辑块
卷组(Volume Group,VG) 由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。
逻辑卷(Logical Volume,LV) 逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。
物理块(Physical Extent,PE) PE是物理卷PV的基本划分单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。
逻辑块(Logical Extent,LE) 逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

(二)主要命令 

背景:对使用lvm做存储的主机做扩容和新建分区,我们将一个新的10G硬盘安装上去,5G用于旧分区扩容,另外将5G空间用于新建分区。以下是在VM上的Linux虚机启动时直接新增磁盘。

#挂载磁盘前先确认现挂载磁盘名。一般磁盘名称格式为sda,xvda等,则新挂载磁盘就应该为sdb,xvdb等
fdisk -l|grep dev
#同时结合ls /dev/sd* 或者ls /dev/xvd*等命令确认磁盘名。一般来说*号位上当前最大字母的下一个字母就是新磁盘名
ls /dev/sd*
#添加磁盘后,让系统重新扫描磁盘,只对scsi格式磁盘有效
echo '- - -'> /sys/class/scsi_host/host0/scan
#确认新增磁盘名ls /dev/sd* 或者ls /dev/xvd*,之前没有出现的就是新增磁盘,我这里是/dev/sdb
ls /dev/sd*

#接着分别输入n,p,1,回车,10480000,t,8e,n,p,2,回车,回车,t,回车,8e,w
fdisk /dev/sdb  
#新建物理卷
pvcreate /dev/sdb1 
#将新建物理卷加入centos逻辑卷组 
vgextend centos /dev/sdb1 
#旧分区扩容
lvresize -l +1278 /dev/centos/root 
#确认lvm分区目录文件系统格式
df -Th
#针对xfs格式,使用xfs_growfs重新识别旧分区    
xfs_growfs /dev/centos/root
#新建物理卷    
pvcreate /dev/sdb2 
#新建逻辑卷组,并将新建物理卷加入该逻辑卷组中
vgcreate bp /dev/sdb2
#新建逻辑卷,格式为lvcreate -n 逻辑卷名 -l +大小(lvdisplay中的free pe数量) 逻辑卷组名    
lvcreate -n testbp -l +1280 bp 
#格式化逻辑卷文件系统格式
mkfs.xfs /dev/bp/testbp 
#创建新挂载目录
mkdir /bp 
#挂载lv到新建分区
mount /dev/bp/testbp /bp
#配置开机自动挂载新建分区
echo "/dev/mapper/bp-testbp /bp xfs defaults 0 0">>/etc/fstab

(三)完整操作过程及解释

1.VM给Centos7新建10G磁盘

 为方便阅读,以下删减了部分和本次实验无关的信息

[root@localhost ~]# fdisk -l|grep dev
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM
磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
[root@localhost ~]# ls /dev/sd*  #新增的磁盘就应该是sdb
/dev/sda  /dev/sda1  /dev/sda2
[root@localhost ~]# echo '- - -'> /sys/class/scsi_host/host0/scan   #让系统重新扫描scsi磁盘
[root@localhost ~]# ls /dev/sd*        #重新扫描后,就可以看到sdb
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
命令(输入 m 获取帮助):m      #打印帮助信息
命令(输入 m 获取帮助):n #新建分区 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p #分区类型 分区号 (1-4,默认 1):1 #分区号 起始 扇区 (2048-20971519,默认为 2048): #起始扇区,默认即可 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):10480000 #要划分两个5G分区,这里只是其中一个,所以取一半 分区 1 已设置为 Linux 类型,大小设为 5 GiB 命令(输入 m 获取帮助):t #配置分区类型 已选择分区 1 Hex 代码(输入 L 列出所有代码):8e #8e代表lvm 已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):n #接着新建第二个分区,类似上面步骤,不再重复讲解 Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p 分区号 (2-4,默认 2):2 起始 扇区 (10480001-20971519,默认为 10481664): 将使用默认值 10481664 Last 扇区, +扇区 or +size{K,M,G} (10481664-20971519,默认为 20971519): 将使用默认值 20971519 分区 2 已设置为 Linux 类型,大小设为 5 GiB 命令(输入 m 获取帮助):t 分区号 (1,2,默认 2): Hex 代码(输入 L 列出所有代码):8e 已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):p 设备 Boot Start End Blocks Id System /dev/sdb1 2048 10480000 5238976+ 8e Linux LVM /dev/sdb2 10481664 20971519 5244928 8e Linux LVM 命令(输入 m 获取帮助):w #保存改变并退出 The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]# pvcreate /dev/sdb1 #新建物理卷。后面更fdisk新建的分区名 Physical volume "/dev/sdb1" successfully created. [root@localhost ~]# vgdisplay |grep Name #获取现有卷组名 VG Name centos [root@localhost ~]# vgextend centos /dev/sdb1 #将sdb1物理卷加入现有centos卷组,加入卷组后,卷组有新空间才能给lv扩容 Volume group "centos" successfully extended [root@localhost ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root xfs 17G 12G 5.6G 68% / /dev/sda1 xfs 1014M 137M 878M 14% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 [root@localhost ~]# lvdisplay #根目录/dev/mapper/centos-root对应的centos卷组root逻辑卷,所以根分区lv路径是/dev/centos/root --- Logical volume --- LV Path /dev/centos/root #我们主要需要这个 LV Name root VG Name centos LV Size <17.00 GiB [root@localhost ~]# vgdisplay #查看vg信息 --- Volume group --- VG Name centos VG Size <23.99 GiB PE Size 4.00 MiB Total PE 6141 Alloc PE / Size 4863 / <19.00 GiB Free PE / Size 1278 / 4.99 GiB VG UUID dN3nEt-WSKs-dP1g-15uD-kGJh-qmZn-wYebKD [root@localhost ~]# lvresize -l +1278 /dev/centos/root #-l指定扩容大小,1278来自vg信息里的Free PE, 后面是我们要扩容的根分区lv路径,从lvdisplay获取 Size of logical volume centos/root changed from <17.00 GiB (4351 extents) to <21.99 GiB (5629 extents). Logical volume centos/root successfully resized. [root@localhost ~]# df -Th #现在扩容还没生效 文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root xfs 17G 12G 5.6G 68% / /dev/sda1 xfs 1014M 137M 878M 14% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 [root@localhost ~]# xfs_growfs /dev/centos/root #可以看到根目录是xfs文件系统,所以我们用xfs_growfs来让系统自动扩容 data blocks changed from 4455424 to 5764096 [root@localhost ~]# df -Th #根目录大小由17G变为22G,扩容生效 文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root xfs 22G 12G 11G 53% / /dev/sda1 xfs 1014M 137M 878M 14% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 [root@localhost ~]# pvcreate /dev/sdb2 #创建pv Physical volume "/dev/sdb2" successfully created. [root@localhost ~]# vgcreate bp /dev/sdb2 #新建名为bp的vg,并将pv加入新vg Volume group "bp" successfully created [root@localhost ~]# vgdisplay #主要是获取bp卷组的Free PE --- Volume group --- VG Name centos System ID Format lvm2 VG Size <23.99 GiB PE Size 4.00 MiB Total PE 6141 Alloc PE / Size 6141 / <23.99 GiB Free PE / Size 0 / 0 VG UUID dN3nEt-WSKs-dP1g-15uD-kGJh-qmZn-wYebKD --- Volume group --- VG Name bp System ID Format lvm2 VG Size 5.00 GiB PE Size 4.00 MiB Total PE 1280 Alloc PE / Size 0 / 0 Free PE / Size 1280 / 5.00 GiB VG UUID 04UUr1-W34y-eZte-U2tL-KZeC-bWnB-NiYd57 [root@localhost ~]# lvcreate -n testlv -l +1280 bp #新建lv,-n命名为testlv,-l指定大小,bp即lv从bp卷组中新建出来 Logical volume "testlv" created. [root@localhost ~]# mkfs.xfs /dev/bp/testlv #格式化lv文件格式 [root@localhost ~]# mkdir /bp [root@localhost ~]# mount /dev/bp/testlv /bp/ #挂载 [root@localhost ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root xfs 22G 12G 11G 53% / /dev/sda1 xfs 1014M 137M 878M 14% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 /dev/mapper/bp-testlv xfs 5.0G 33M 5.0G 1% /bp [root@localhost ~]# echo "/dev/mapper/bp-testbp /bp xfs defaults 0 0">>/etc/fstab #新建分区需要配置/etc/fstab自动开机挂载 [root@localhost ~]# cat /etc/fstab /etc/fstab/dev/mapper/centos-root / xfs defaults 0 0 UUID=192cfb95-ea9b-450d-85bf-68d54eb43ca6 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/mapper/bp-testbp /bp xfs defaults 0 0 [root@localhost ~]#

PS:有人可能会好奇,为什么只有xfs扩容的,没有写缩容?小知识点,xfs是不支持缩容的。

 

接下来再来看下ext4文件类型扩缩容。
关于ext文件系统,有两点我们需要注意下:
扩容必须先扩展逻辑卷的物理边界,再扩展逻辑边界
缩容必须先缩减逻辑卷的逻辑边界,再缩减物理边界。
lvextend 扩展逻辑卷的物理边界
lvreduce 缩减逻辑卷的物理边界
resize2fs 扩展/缩减逻辑卷的逻辑边界
e2fsck 强行对lv执行文件系统检测
不能在线缩减,得先卸分区。同时在缩减(逻辑边界)前应该先强行检查文件,以确保文件系统处于一致性状态。

ext扩容:
lvextend -L 5G /PATH/TO/LV_NAME   #表示扩展后的LV总大小为5G容量。-L size 指定大小
resize2fs /PATH/TO/LV 5G  #扩展逻辑边界到5G,该值不能超过物理边界

ext缩容:
umount /mnt #卸载挂载的lv
e2fsck -f /dev/myvg/testlv #对lv强制执行文件系统检测
resize2fs /dev/myvg/testlv 2G #调整逻辑卷的逻辑边界大小为2G
lvreduce -L 2G /dev/myvg/testlv #对逻辑卷的物理边界缩减为2G
mount /dev/myvg/lv /mnt #重新挂载lv逻辑卷

 

删除逻辑卷:
umount /bplvm
vim /etc/fstab 删除自己添加的那条挂载vo的命令的那行
lvremove /dev/storage/vo 删除LV逻辑卷设备
vgremove storage 删除VG卷组
pvremove /dev/sdb /dev/sdc 删除PV物理卷设备
注意删除的顺序是按照上面的删除顺序的,跟增加时正好相反,不能乱来

 

posted on 2017-10-25 18:06  标配的小号  阅读(1509)  评论(0编辑  收藏  举报

导航