前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux磁盘管理之LVM快速入门配置

Linux磁盘管理之LVM快速入门配置

作者头像
全栈工程师修炼指南
发布2020-10-26 11:39:13
2.9K0
发布2020-10-26 11:39:13
举报

[TOC]

0x00 LVM快速入门

描述:LVM——Logical Volume Manager就是动态卷管理在Linux2.4内核以上实现的磁盘管理技术,它可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。

LVM的工作原理: 通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用;

  • 在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,
  • 在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作

LVM的特点:可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据,我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷 ,作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性

基本概念:

  • 1、 物理卷—–PV(Physical Volume)
    • 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。
  • 2、 卷组——–VG(Volumne Group)
    • 卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
  • 3、 逻辑卷—–LV(Logical Volume)
  • 逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷要以属于同一个卷组,也可以属于不同的多个卷组。
  • 4、 物理区域–PE(Physical Extent)
    • 物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
  • 5、 逻辑区域―LE(Logical Extent)
    • 逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
  • 6、 卷组描述区域—–(Volume Group Descriptor Area)
    • 卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中的逻辑卷及逻辑卷中物理区域的分配等所有信息,卷组描述区域是在使用pvcreate建立物理卷时建立的。

用途:LVM就是Linux下专门针对我们数据的不断的扩大,在原有动态磁盘的基础上动态的调整磁盘的大小,LVM动态卷管理,一张图片让你深入了解lvm的使用。 四个概念:

  • ②PV(Physical Volume) 物理卷: 处于LVM最底层,可以是物理硬盘或者分区。
  • ①PE(Physical Extend) 物理拓展: PV中可以用于分配的最小存储单元,可以在创建PV的时候制定(默认为4MB*n)
  • ③VG(Volume Group) 卷组 : 建立在PV之上,可以含有一个到多个PV
  • ④LV(Logical Volume) 逻辑卷: 建立在VG之上,相当于原来分区的概念,不过大小可以动态改变
WeiyiGeek.
WeiyiGeek.

WeiyiGeek.

LVM的优点:

  • 在系统运行状态下动态扩展文件系统的大小
  • 文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制
  • 可以增加新的磁盘到LVM的存储池中
  • 可以以镜像的方式冗余重要的数据到多个物理磁盘
  • 可以方便的导出整个卷组到另外一台机器

LVM的缺点:

  • ①.在从卷组中移除一个磁盘的时候必须使用reducevg命令(这个命令要求root权限,并且不允许在快照卷组中使用)。
  • ②.当卷组中的一个磁盘损坏时,整个卷组都会受到影响。
  • ③.因为加入了额外的操作,存贮性能受到影响。

工作原理:

  • (1)物理磁盘被格式化为PV,空间被划分为一个个的PE
  • (2)不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内
  • (3)LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘
  • (4)LV现在就直接可以格式化后挂载使用了
  • (5)LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据
WeiyiGeek.原理图
WeiyiGeek.原理图

WeiyiGeek.原理图


0x01 LVM操作

LVM常用操作命令一览:

1) 查看物理卷/卷组/逻辑卷
pvs / pvdisplay   #查看物理卷
pes / pedisplay   #查看pe的大小(pes==pescan)
vgs / vgdisplay   #查看卷组
lvs / lvdisplay   #查看逻辑卷
fdisk -l   #查看磁盘分区


2) 创建pv/vg/lv
pvcreate 设备路径               创建物理卷
vgcreate 名字 pv路径            创建卷组
lvcreate -n 名字 -L 大小 vg名   创建逻辑卷
格式化:mkfs.ext4 lv完整路径               格式化逻辑卷(mkfs.文件系统格式或-t 文件系统格式)
挂载:mount  lv完整路径  挂载点             挂载使用(可以使用/etc/fstab或autofs)


3) 逻辑卷删除:
    1.卸载:umount 
    2.删lv:lvremove lv完整路径 
    3.删vg:vgremove vg名 
    4.删PV:pvremove 设备完整路径 去硬盘


4) 逻辑卷扩展:
    1.扩展pv:相当于创建pv 
    2.扩展vg: vgextend vg名 新增pv路径 
    3.扩展lv: lvextend -L +扩展量 lv完整名  -r #加-r不用刷新系统
    4.刷新文件系统:resize2fs lv完整路径 
    注意:灵活运用,看实际情况,注意顺序 (支持在线操作)


5) 逻辑卷的缩小:  #减小需谨慎,文件系统的减小后大小一定要和lv卷最终大小相等
    1.首先进行卸载 umount 检查文件系统:e2fsck -f lv完整路径
    2.减少文件系统:resize2fs lv完整路径 减少到的大小
    3.减少lv卷大小:lvreduce -L -减少量的大小 lv的完整路径
    4.挂载使用

0x02 LVM实战

测试环境:CentOS release 6.10 (Final) 2.6.32-754.12.1.el6.i686 使用VirtualBOX来模拟我添加了一块1G的磁盘; 1) LVS创建

#1.添加的磁盘状态
$fdisk -l /dev/sdb

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


#2.在上面创建了两个分区sdb1和sdb2各500M。
$fdisk /dev/sdb
Command (m for help): u
Changing display/entry units to sectors

Command (m for help): m 
#建立两个主分区:p 分别500MB

Command (m for help): p
Disk identifier: 0x91982288
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     1026047      512000   83  Linux
/dev/sdb2         1026048     2050047      512000   83  Linux

Command (m for help): w  #写入操作
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.


#3.用pvcreate命令在新建的分区上创建PV
$pvcreate /dev/sdb1 /dev/sdb2
    Physical volume "/dev/sdb1" successfully created
    Physical volume "/dev/sdb2" successfully created
#(创建完后我们可以用pvs查看或者pvdisplay查看详细信息)
$pvs
  PV         VG           Fmt  Attr(注意属性) PSize   PFree
  /dev/sda2  vg_weiyigeek lvm2 a--u  19.51g      0
  /dev/sdb1               lvm2 ---- 500.00m 500.00m
  /dev/sdb2               lvm2 ---- 500.00m 500.00m

$pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               vg_weiyigeek
  PV Size               19.51 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4994
  Free PE               0
  Allocated PE          4994
  PV UUID               svdPF0-R72a-NU6n-qrZV-jUwP-cOEz-b9OXnm

 "/dev/sdb1" is a new physical volume of "500.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name              #VG那一栏是所属的VG组,因为我们还没有划分VG组,所以这一栏也是空。
  PV Size               500.00 MiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               M5biUE-eaM1-8U6X-gOpd-31iW-cgNC-m1sIG1


#4. 使用vgcreate命令创建一个VG组,并将我们创建的两个PV加入VG组
$vgcreate vgdemo1 /dev/sdb1 /dev/sdb2
  Volume group "vgdemo1" successfully created
#(用vgs和vgdisplay命令查看卷组信息及详细信息)
$vgs
  VG           #PV #LV #SN Attr   VSize   VFree
  vg_weiyigeek   1   2   0 wz--n-  19.51g      0
  vgdemo1        2   0   0 wz--n- 992.00m 992.00m  #建立的VG组,可以看到他的大小

$vgdisplay vgdemo1
  --- Volume group ---
  VG Name               vgdemo1
  System ID
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               992.00 MiB  #关键点:后面的LV分配大小不能藏此大小
  PE Size               4.00 MiB  #PE是卷组的最小储存单位默认是4MB,创建的时候我们也可以用-s参数来修改,
                                #一旦卷组创建成功是没法再去修改PE大小的。
  Total PE              248
  Alloc PE / Size       0 / 0
  Free  PE / Size       248 / 992.00 MiB
  VG UUID               AdWgG1-DkWu-3OrA-skAW-ad3i-n2V9-pTHYWF


#5. 使用lvcreate命令从VG中创建一个逻辑卷
$lvcreate -L 200M -n lv_disk1 vgdemo1
  Logical volume "lv_disk1" created.
#-L参数后跟的是你要设定的逻辑卷大小,这个大小必须是你设定的PE值的整数倍,常用(弊端就是有可能用不完vg里面的空间)
#-l参数后跟的是数量,那划分的逻辑卷大小就为 4xn 你划分的数量MiB。-l 127 个PE弊端是需要计算,比如一个PE 4M 127x4M=508M 但是不会出现用不完vg的空间的情况
#-n参数后跟逻辑卷名字,是对创建的卷组命名,最后跟的是卷组名。
#(逻辑卷的查看命令也是lvs和lvsdisplay)
$lvs
  LV       VG           Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_root  vg_weiyigeek -wi-ao----  17.54g
  lv_swap  vg_weiyigeek -wi-ao----   1.97g
  lv_disk1 vgdemo1      -wi-a----- 200.00m

$lvdisplay vgdemo1 #lvdisplay后跟卷组是查看这个卷组的详细信息,只输入lvdisplay是显示所有逻辑卷的详细信息
  --- Logical volume ---
  LV Path                /dev/vgdemo1/lv_disk1
  LV Name                lv_disk1
  VG Name                vgdemo1
  LV UUID                ohx66h-l1kU-qnTR-bZQH-eWb5-tVhS-3B03Rq
  LV Write Access        read/write
  LV Creation host, time Master-data2, 2019-05-26 13:05:28 +0800
  LV Status              available
  # open                 0
  LV Size                200.00 MiB
  Current LE             50
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2


#6.使用mkfs命令对创建的卷组进行格式化并挂载
$mkfs.ext4 /dev/vgdemo1/lv_disk1
mke2fs 1.41.12 (17-May-2010)
#Linux下的文件系统需要被挂载后才能使用,建立一个空目录进行挂载
$mkdir /lvsdisk
#进行挂载,如果要想实现开机自动挂载可以写在fstab表里
$mount /dev/vgdemo1/lv_disk1 /lvsdisk/
$df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/vgdemo1-lv_disk1 190M  1.6M  179M   1% /lvsdisk

2) LV的扩容与缩小 LVM的强大之处不只是它可以扩容压缩,更重要的是它可以支持在线扩容,但我们首先要保证VG中有足够的空闲空间。

#1.使用lvextend命令来对逻辑卷进行扩容
$vgs
VG           PV LV SN Attr   VSize   VFree
vg_weiyigeek   1   2   0 wz--n-  19.51g      0
vgdemo1        2   1   0 wz--n- 992.00m 792.00m  #必须要用可用的空间

$lvextend -L +100M /dev/vgdemo1/lv_disk1   #扩展lvs动态卷的大小 +100M是增加100M空间
Size of logical volume vgdemo1/lv_disk1 changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
  Logical volume lv_disk1 successfully resized.

#2.lvs卷扫描查看分配后的大小
$lvscan
  ACTIVE            '/dev/vgdemo1/lv_disk1' [300.00 MiB] inherit
  ACTIVE            '/dev/vg_weiyigeek/lv_root' [17.54 GiB] inherit
  ACTIVE            '/dev/vg_weiyigeek/lv_swap' [1.97 GiB] inherit


#3.但这个时候我们用df-h命令查看一下发现挂载的文件系统并没有增大,这就需要我们使用resize2fs命令手动同步一下文件系统
#lvextend -L +100M /dev/vgdemo1/lv_disk1 -r #加上-r参数就此步可用忽略
$resize2fs -f /dev/vgdemo1/lv_disk1
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vgdemo1/lv_disk1 to 307200 (1k) blocks.
The filesystem on /dev/vgdemo1/lv_disk1 is now 307200 blocks long.

$df -h /lvsdisk  #挂载完成并查看空间大小
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vgdemo1-lv_disk1
                      287M  2.1M  270M   1% /lvsdisk

############## LVS缩小 ##############
#我们要先缩小文件系统,再去缩小逻辑卷

#逻辑卷扩容可以在线操作但是缩减必须是离线执行,需要先卸载已挂载的逻辑卷。
$umount /lvsdisk  #取消挂载

#缩小文件系统前我们要先对文件系统做个扫描检测,如果我们直接使用resize2fs系统会提示让你先对文件系统进行检测,
#这是为了保护缩减文件系统时不对数据损害。
$e2fsck -f /dev/vgdemo1/lv_disk1
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vgdemo1/lv_disk1: 11/14112 files (9.1% non-contiguous), 6921/53248 blocks

#设置减小后的动态卷大小
$resize2fs /dev/vgdemo1/lv_disk1 200

$lvreduce -L 200M /dev/vgdemo1/lv_disk1 -r  #将lv_disk1卷组缩小200MB (非常注意缩小后的空间必须是可以整除4的)与下面的参数无关了
$lvscan
  ACTIVE            '/dev/vgdemo1/lv_disk1' [52.00 MiB] inherit
$mount /dev/vgdemo1/lv_disk1 /lvsdisk/  #分区挂载
$df -h   #查看缩小后的空间大小
/dev/mapper/vgdemo1-lv_disk1
                       47M  1.1M   43M   3% /lvsdisk

注意:

  • 文件系统大小和逻辑卷大小一定要保持一致才行。
  • 如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。

3)VG卷组的扩容与缩小 添加一块新的硬盘,通常我们是需要重启机器的;

WeiyiGeek.disk
WeiyiGeek.disk

WeiyiGeek.disk

#1.使用命令让系统重新扫描SCSI总线来添加设备,因为添加的是SCSI磁盘,所以扫描的是SCSI总线
echo "- - -" > /sys/class/scsi_host/host0/scan 

#2.查看磁盘以及分区使用状态
$lsblk
NAME                            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                              11:0    1 1024M  0 rom
sda                               8:0    0   20G  0 disk
├─sda1                            8:1    0  500M  0 part /boot
└─sda2                            8:2    0 19.5G  0 part
  ├─vg_weiyigeek-lv_root (dm-0) 253:0    0 17.6G  0 lvm  /
  └─vg_weiyigeek-lv_swap (dm-1) 253:1    0    2G  0 lvm  [SWAP]
sdb                               8:16   0    1G  0 disk
├─sdb1                            8:17   0  500M  0 part
│ └─vgdemo1-lv_disk1 (dm-2)     253:2    0   52M  0 lvm  /lvsdisk
└─sdb2                            8:18   0  500M  0 part
sdc                               8:32   0    1G  0 disk  #我们新添加的磁盘


#3.首先将要添加的硬盘格式化为PV,再将新的PV添加到指定的卷组中去
$pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created
$vgextend vgdemo1 /dev/sdc   #将新建立PV扩展到vgdemo1中
  Volume group "vgdemo1" successfully extended
$vgs 
  VG           #PV #LV #SN Attr   VSize  VFree
  vg_weiyigeek   1   2   0 wz--n- 19.51g    0
  vgdemo1        3   1   0 wz--n-  1.96g 1.91g  #扩展pV后的卷大小


##########  缩小卷组的缩减 ##########
$vgreduce vgdemo1 /dev/sdc  #用vgreduce去缩小VG卷组的大小
  Removed "/dev/sdc" from volume group "vgdemo1"
#缩小VG卷组也就是把一个PV从卷组中移除,但我们要先肯定PV中没有数据,不然就会造成数据的丢失
#然后使用pvremove命令移除PV,这样就让分区又重新变成了普通分区。
$pvremove /dev/sdc
  Labels on physical volume "/dev/sdc" successfully wiped

0x03 实际实践
1.扩容根分区与挂载磁盘

描述: 由于系统安装的时候一共分了50G系统经过一段时间后发现磁盘资源不足,此时需要通过LVM进行对centos-root进行扩容;

环境准备: 在ESXI主机中找到指定的虚拟机,添加一块磁盘为150G即系统后面识别的/dev/sdb

基础流程:

# 1.查看系统当前磁盘情况
[[email protected] ~]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdb               8:16   0   150G  0 disk
sr0              11:0    1  1024M  0 rom
sda               8:0    0    50G  0 disk
├─sda2            8:2    0    49G  0 part
│ ├─centos-swap 253:1    0   3.9G  0 lvm
│ └─centos-root 253:0    0  45.1G  0 lvm  /
└─sda1            8:1    0     1G  0 part /boot

# 2.进行磁盘分区将分成两个主分区一个50G和一个100G
[[email protected] ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
...  #默认即可
Last 扇区, +扇区 or +size{K,M,G} (2048-314572799,默认为 314572799):+50G
分区 1 已设置为 Linux 类型,大小设为 50 GiB
命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
...  #默认即可
Last 扇区, +扇区 or +size{K,M,G} (104859648-314572799,默认为 314572799):
将使用默认值 314572799
分区 2 已设置为 Linux 类型,大小设为 100 GiB
命令(输入 m 获取帮助):w  # 写入到磁盘中
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。

# 3.查看分区信息
[[email protected] ~]# fdisk -l
磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000e9e57
   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   104857599    51379200   8e  Linux LVM
[[email protected] ~]# lsblk | grep "sdb"
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0  150G  0 disk
├─sdb2            8:18   0  100G  0 part
└─sdb1            8:17   0   50G  0 part


# 4.查看系统中pv设备
[[email protected] ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<49.00 GiB / 4.00 MiB free]
  Total: 1 [<49.00 GiB] / in use: 1 [<49.00 GiB] / in no VG: 0 [0   ]

# 5.创建一个物理卷PV并且查看PV卷
[[email protected] ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[[email protected] ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <49.00g  4.00m
  /dev/sdb1         lvm2 ---   50.00g 50.00g

# 6.将创建的PV卷加入到已存在的centos VG卷之中
[[email protected] ~]# vgextend centos /dev/sdb1
  Volume group "centos" successfully extended

# 7.查看PV卷已经分配给Centos VG然后也可以通过vgs查看
[[email protected] ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <49.00g   4.00m
  /dev/sdb1  centos lvm2 a--  <50.00g <50.00g
[[email protected] ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  centos   2   2   0 wz--n- 98.99g 50.00g


# 8.进行lv卷扩容50G采用lvscan命令查看扩容前后的比对;
[[email protected] ~]# lvscan
  ACTIVE            '/dev/centos/swap' [<3.88 GiB] inherit
  ACTIVE            '/dev/centos/root' [<45.12 GiB] inherit
[[email protected] ~]# lvextend -L +50G /dev/centos/root
  Size of logical volume centos/root changed from <45.12 GiB (11550 extents) to <95.12 GiB (24350 extents).
  Logical volume centos/root successfully resized.
[[email protected] ~]# lvscan
  ACTIVE            '/dev/centos/swap' [<3.88 GiB] inherit
  ACTIVE            '/dev/centos/root' [<95.12 GiB] inherit

# 9.此时您会发现lv其大小已经发生改变但是采用 df -h / 其大小并没有增加
[[email protected] ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0  150G  0 disk
├─sdb2            8:18   0  100G  0 part
└─sdb1            8:17   0   50G  0 part
  └─centos-root 253:0    0 95.1G  0 lvm  /
sda               8:0    0   50G  0 disk
├─sda2            8:2    0   49G  0 part
│ ├─centos-swap 253:1    0  3.9G  0 lvm
│ └─centos-root 253:0    0 95.1G  0 lvm  /
└─sda1            8:1    0    1G  0 part /boot

[[email protected] ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   46G  2.4G   43G    6% /

[[email protected] ~]# fdisk -l
磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区
...
磁盘 /dev/sdb:161.1 GB, 161061273600 字节,314572800 个扇区
...
磁盘 /dev/mapper/centos-root:102.1 GB, 102131302400 字节,199475200 个扇区 #此处也显示扩容到100G


# 10.然后要解决上面df -h命令查看一下发现根挂载的文件系统并没有增大上,此时采用下面的命令进行更新同步文件系统
# 非常注意不同系统以及分区类型处理方式不同
$ df -Th
# Filesystem              Type      Size  Used Avail Use% Mounted on
# /dev/mapper/centos-root xfs        96G  6.8G   89G   8% /
# /dev/mapper/ubuntu--vg-ubuntu--lv ext4      4.2G  3.7G  269M  94% /

# CentOS
[[email protected] ~]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=2956800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=11827200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=5775, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# ubuntu / general
# resize2fs -p -F  /dev/mapper/ubuntu--vg-ubuntu--lv
# resize2fs 1.45.5 (07-Jan-2020)
# Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
# old_desc_blocks = 1, new_desc_blocks = 10
# The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 19398656 (4k) blocks long.

# - CentOS
[[email protected] ~]# df -h  
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   96G  2.4G   93G    3% /  # 文件系统也显示成功扩容
# - Ubuntu
# [[email protected] ~]$ df -hT
# Filesystem                        Type      Size  Used Avail Use% Mounted on
# udev                              devtmpfs  1.9G     0  1.9G   0% /dev
# tmpfs                             tmpfs     394M  1.2M  393M   1% /run
# /dev/mapper/ubuntu--vg-ubuntu--lv ext4       73G  3.7G   67G   6% /


# 11.将磁盘的另外一个分区挂载到/data目录
[[email protected] ~]# mkfs.xfs /dev/sdb2 #推荐采用XFS格式的分区
meta-data=/dev/sdb2              isize=512    agcount=4, agsize=6553536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=26214144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=12799, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[[email protected] ~]# mkdir /data/
[[email protected] ~]# mkfs.ext4 /dev/sdb2
# mke2fs 1.42.9 (28-Dec-2013)
# 文件系统标签=
# OS type: Linux
# 块大小=4096 (log=2)
# 分块大小=4096 (log=2)
# Stride=0 blocks, Stripe width=0 blocks
# 6553600 inodes, 26214144 blocks
# 1310707 blocks (5.00%) reserved for the super user
# 第一个数据块=0
# Maximum filesystem blocks=2174746624
# 800 block groups
# 32768 blocks per group, 32768 fragments per group
# 8192 inodes per group
# Superblock backups stored on blocks:
#         32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
#         4096000, 7962624, 11239424, 20480000, 23887872
# Allocating group tables: 完成
# 正在写入inode表: 完成
# Creating journal (32768 blocks): 完成
# Writing superblocks and filesystem accounting information: 完成

# 12.将格式后的磁盘分区进行挂载到/data目录下,并写入/etc/fstab中永久生效
[[email protected] ~]# mount /dev/sdb2 /data
[[email protected] ~]# echo "/dev/sdb2 /data xfs defaults 0 0" >> /etc/fstab
[[email protected] ~]# mount -l|grep "/dev/sdb2"

0x04 入坑解决

PS:我们实际生产操作中很少用到逻辑卷的缩减,因为缩减很容易就会造成数据损坏,这是得不偿失的,所以我们不推荐对逻辑卷进行缩减。

问题1:执行lvreduce缩小指定lv卷大小错误(尽量不要进行缩小)
$lvreduce -L 52M /dev/vgdemo1/lv_disk1 -r
fsck from util-linux-ng 2.17.2
/dev/mapper/vgdemo1-lv_disk1: The filesystem size (according to the superblock) is 307200 blocks
The physical size of the device is 258048 blocks
Either the superblock or the partition table is likely to be corrupt!
/dev/mapper/vgdemo1-lv_disk1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
        (i.e., without -a or -p options)

#原因:由于减小的lv卷区大小不能整除4导致
#解决办法:
mkfs.ext4 /dev/vgdemo1/lv_disk1  #格式化分区后重新设置大小lv卷大小可以被四整除
问题2.Ubuntu LVM扩容后df -h显示未更新

问题原因:由于文件系统(df -h 所看见的)未及时更新导致,所以更新一哈就可以; 解决办法:

$resize2fs -p -F  /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 25
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 52164608 (4k) blocks long.

[email protected]:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               1.9G     0  1.9G   0% /dev
tmpfs                              394M  1.2M  393M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  196G  3.5G  185G   2% /  # 已更新
tmpfs                              2.0G     0  2.0G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              2.0G     0  2.0G   0% /sys/fs/cgroup
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 LVM快速入门
  • 0x01 LVM操作
  • 0x02 LVM实战
  • 0x03 实际实践
    • 1.扩容根分区与挂载磁盘
    • 0x04 入坑解决
      • 问题1:执行lvreduce缩小指定lv卷大小错误(尽量不要进行缩小)
        • 问题2.Ubuntu LVM扩容后df -h显示未更新
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档