详解基于Linux的LVM无缝磁盘水平扩容

环境

名称 属性
CPU x5650
内存 4G
磁盘 20G+4TB

这时候,我们假设服务器已经有如下东西:

  • 安装好了Parted(yum install parted)
  • 分区容量已经告捷,公司为服务器增加了一块4T硬盘用来增加容量!
  • 除了/boot分区外,其余都为LVM 模式的扩展逻辑分区

软件安装与信息查看

首先查看软件是否安装:

[root@Candy ~]# rpm -qa | grep lvm
lvm2-libs-2.02.118-2.el6.x86_64
lvm2-2.02.118-2.el6.x86_64
[root@Candy ~]# lv
lvchange   lvextend   lvmdiskscan lvmsar    lvresize
lvconvert  lvm     lvmdump   lvreduce   lvs
lvcreate   lvmchange  lvmetad   lvremove   lvscan
lvdisplay  lvmconf   lvmsadc   lvrename
[root@Candy ~]# rpm -qa | grep parted
parted-2.1-29.el6.x86_64

软件准备好后顺便查看下 VM 硬件:

[root@Candy ~]# df -h
Filesystem      Size Used Avail Use% Mounted on
/dev/mapper/vg_candy-root
           7.3G 231M 6.7G  4% /
tmpfs         1.9G   0 1.9G  0% /dev/shm
/dev/sda1       477M  30M 422M  7% /boot
/dev/mapper/vg_candy-home
           3.9G 8.0M 3.7G  1% /home
/dev/mapper/vg_candy-usr
           3.9G 382M 3.3G 11% /usr
/dev/mapper/vg_candy-var
           3.9G  63M 3.6G  2% /var
[root@Candy ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x0006e71c
  Device Boot   Start     End   Blocks  Id System
/dev/sda1  *      1     64   512000  83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2       64    2611  20458496  8e Linux LVM
Disk /dev/sdb: 4398.0 GB, 4398046511104 bytes
255 heads, 63 sectors/track, 534698 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
Disk /dev/mapper/vg_candy-root: 8061 MB, 8061452288 bytes
255 heads, 63 sectors/track, 980 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
Disk /dev/mapper/vg_candy-usr: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 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
Disk /dev/mapper/vg_candy-var: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 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
Disk /dev/mapper/vg_candy-home: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 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
[root@Candy ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb

这时候我们看到,Centos 已经知道有个sdb的盘了,但是没挂载与分区。

使用Parted进行扩容前的分区

现在假设除了/boot 其余分区都满了! 我们需要先进行分区,将4T的硬盘用上(/dev/sdb).

[root@Candy ~]# parted /dev/sdb
GNU Parted 2.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
新的磁盘标签类型? gpt
(parted) mkpart
分区名称? []?
文件系统类型? [ext2]? ext4
起始点? 0T
结束点? 4T
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4398GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start  End   Size  File system Name 标志
 1   1049kB 4398GB 4398GB
(parted)set 1 lvm on
(parted)p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4398GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start  End   Size  File system Name 标志
1   1049kB 4398GB 4398GB           lvm
(parted)q
[root@Candy ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1

现在让我们来解释一下操作:

  1. mklabel将磁盘转换为gpt分区,因为MBR分区无法支持TB级硬盘(具体请自行查阅,parted当然也支持TB级以下的操作)
  2. mkpart将转换好的gpt磁盘进行分区,需要提供文件系统类型、开始点、结束点。
  3. 输入p 打印出刚才才做后生成的分区。
  4. set 1 lvm on 是将num为1的分区,tager设置为LVM ,这样才能添加到vm卷组里

下一步,我们查看我们的LVM组名叫什么:

[root@Candy ~]# vgs
 VG    #PV #LV #SN Attr  VSize VFree
 vg_candy  1  4  0 wz--n- 19.51g  0

[root@Candy ~]# vgdisplay
 --- Volume group ---
 VG Name        vg_candy
 System ID
 Format        lvm2
 Metadata Areas    1
 Metadata Sequence No 5
 VG Access       read/write
 VG Status       resizable
 MAX LV        0
 Cur LV        4
 Open LV        4
 Max PV        0
 Cur PV        1
 Act PV        1
 VG Size        19.51 GiB
 PE Size        4.00 MiB
 Total PE       4994
 Alloc PE / Size    4994 / 19.51 GiB
 Free PE / Size    0 / 0
 VG UUID        Gcm5Ml-fc88-Xk5q-xuPC-Kj7Y-alfK-i770Gc
[root@Candy ~]# lvscan
 ACTIVE      '/dev/vg_candy/usr' [4.00 GiB] inherit
 ACTIVE      '/dev/vg_candy/var' [4.00 GiB] inherit
 ACTIVE      '/dev/vg_candy/home' [4.00 GiB] inherit
 ACTIVE      '/dev/vg_candy/root' [7.51 GiB] inherit
[root@Candy ~]#

知道lvm卷组叫 'vg_candy'了, 我们就使用vgextend来向lvm 'vg_candy' 卷组添加成员了.

[root@Candy ~]# vgextend vag_candy /dev/sdb1
Physical volume "/dev/sdb1" successfully created
Volume group "vg_candy" successfully extended

现在我们再用vgs命令看一下pv个数:

[root@Candy ~]# vgs
VG    #PV #LV #SN Attr  VSize VFree
vg_candy  2  4  0 wz--n- 4.02t 4.00t

大家对比未添加时的vgs是否有看到PV个数从1变为2了!

现在让我们用vgdisplay看看现在分区的容量.

[root@Candy ~]# vgdisplay
 --- Volume group ---
 VG Name        vg_candy
 System ID
 Format        lvm2
 Metadata Areas    2
 Metadata Sequence No 6
 VG Access       read/write
 VG Status       resizable
 MAX LV        0
 Cur LV        4
 Open LV        4
 Max PV        0
 Cur PV        2
 Act PV        2
 VG Size        4.02 TiB
 PE Size        4.00 MiB
 Total PE       1053569
 Alloc PE / Size    4994 / 19.51 GiB
 Free PE / Size    1048575 / 4.00 TiB
 VG UUID        Gcm5Ml-fc88-Xk5q-xuPC-Kj7Y-alfK-i770Gc

再次对比未添加的vgdiplay命令发现,FreePE 的value 从 0 / 0 变为 1048575 / 4.00 TiB . 这样说明Candy已经成功将4TB的lvm 分区添加进入到vg_candy 逻辑卷组里了。

现在我们对所有逻辑分区进行扩容前,df -h 看看有哪些分区。

[root@Candy ~]# df -h
Filesystem         Size Used Avail Use% Mounted on
/dev/mapper/vg_candy-root 7.3G 231M 6.7G  4% /
 tmpfs           1.9G   0 1.9G  0% /dev/shm
/dev/sda1         477M  30M 422M  7% /boot
/dev/mapper/vg_candy-home 3.9G 8.0M 3.7G  1% /home
/dev/mapper/vg_candy-usr  3.9G 382M 3.3G 11% /usr
/dev/mapper/vg_candy-var  3.9G  63M 3.6G  2% /var

现在麻烦的事已经做完了,接下来就剩下为分区进行扩容了.

为磁盘进行扩容

假设:我们需要向 这些分区都添加500G容量: //home/usr/var

[root@Candy ~]# lvextend -L +500G /dev/mapper/vg_candy-root
 Size of logical volume vg_candy/root changed from 7.51 GiB (1922 extents) to 507.51 GiB (129922 extents).
 Logical volume root successfully resized

[root@Candy ~]# lvextend -L +500G /dev/mapper/vg_candy-home
 Size of logical volume vg_candy/home changed from 4.00 GiB (1024 extents) to 504.00 GiB (129024 extents).
 Logical volume home successfully resized

[root@Candy ~]# lvextend -L +500G /dev/mapper/vg_candy-usr
 Size of logical volume vg_candy/usr changed from 4.00 GiB (1024 extents) to 504.00 GiB (129024 extents).
 Logical volume usr successfully resized

[root@Candy ~]# lvextend -L +500G /dev/mapper/vg_candy-var
 Size of logical volume vg_candy/var changed from 4.00 GiB (1024 extents) to 504.00 GiB (129024 extents).
 Logical volume var successfully resized

大家注意,这一步操作时不可逆的! 如果输入了错误的分区名字还好! 如果添加到其它分区了,就得重复N遍来缩容,比较麻烦哦! 建议大家注仔细核对上面的FileSystem. 切记切记....

提示扩容成功! 让我们再次用上述命令查看LVM信息:

[root@Candy ~]# vgs
 VG    #PV #LV #SN Attr  VSize VFree
 vg_candy  2  4  0 wz--n- 4.02t 2.05t 

[root@Candy ~]# lvscan
 ACTIVE      '/dev/vg_candy/usr' [504.00 GiB] inherit
 ACTIVE      '/dev/vg_candy/var' [504.00 GiB] inherit
 ACTIVE      '/dev/vg_candy/home' [504.00 GiB] inherit
 ACTIVE      '/dev/vg_candy/root' [507.51 GiB] inherit

[root@Candy ~]# vgdisplay
 --- Volume group ---
 VG Name        vg_candy
 System ID
 Format        lvm2
 Metadata Areas    2
 Metadata Sequence No 10
 VG Access       read/write
 VG Status       resizable
 MAX LV        0
 Cur LV        4
 Open LV        4
 Max PV        0
 Cur PV        2
 Act PV        2
 VG Size        4.02 TiB
 PE Size        4.00 MiB
 Total PE       1053569
 Alloc PE / Size    516994 / 1.97 TiB
 Free PE / Size    536575 / 2.05 TiB
 VG UUID        Gcm5Ml-fc88-Xk5q-xuPC-Kj7Y-alfK-i770Gc

[root@Candy ~]# df -h
Filesystem         Size Used Avail Use% Mounted on
/dev/mapper/vg_candy-root 7.3G 231M 6.7G  4% /
 tmpfs           1.9G   0 1.9G  0% /dev/shm
/dev/sda1         477M  30M 422M  7% /boot
/dev/mapper/vg_candy-home 3.9G 8.0M 3.7G  1% /home
/dev/mapper/vg_candy-usr  3.9G 382M 3.3G 11% /usr
/dev/mapper/vg_candy-var  3.9G  63M 3.6G  2% /var

看到这里大家可能奇怪! 为什么df -h 还没变呢?

刷新磁盘信息与写入

我们需要用resize2fs 重设分区大小, 这样才能使df -h 也能生效.

而resize2fs 需要的时间与你给予的容量线性叠加. 也就是说你给的容量越多,resize2fs 的需要的时间就越多。

[root@Candy ~]# resize2fs /dev//mapper/vg_candy-root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev//mapper/vg_candy-root is mounted on /; on-line resizing required old desc_blocks = 1, new_desc_blocks = 32
Performing an on-line resize of /dev//mapper/vg_candy-root to 133040128 (4k) blocks.
The filesystem on /dev//mapper/vg_candy-root is now 133040128 blocks long.

[root@Candy ~]# resize2fs /dev//mapper/vg_candy-usr
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev//mapper/vg_candy-usr is mounted on /usr; on-line resizing required old desc_blocks = 1, new_desc_blocks = 32
Performing an on-line resize of /dev//mapper/vg_candy-usr to 132120576 (4k) blocks.
The filesystem on /dev//mapper/vg_candy-usr is now 132120576 blocks long.

[root@Candy ~]# resize2fs /dev//mapper/vg_candy-var
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev//mapper/vg_candy-var is mounted on /var; on-line resizing required old desc_blocks = 1, new_desc_blocks = 32
Performing an on-line resize of /dev//mapper/vg_candy-var to 132120576 (4k) blocks.
The filesystem on /dev//mapper/vg_candy-var is now 132120576 blocks long.

[root@Candy ~]# resize2fs /dev//mapper/vg_candy-home
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev//mapper/vg_candy-home is mounted on /home; on-line resizing required old desc_blocks = 1, new_desc_blocks = 32
Performing an on-line resize of /dev//mapper/vg_candy-home to 132120576 (4k) blocks.
The filesystem on /dev//mapper/vg_candy-home is now 132120576 blocks long.

[root@Candy ~]# df -h
Filesystem          Size Used Avail Use% Mounted on
/dev/mapper/vg_candy-root   500G 245M 474G  1% /
tmpfs             1.9G   0 1.9G  0% /dev/shm
/dev/sda1           477M  30M 422M  7% /boot
/dev/mapper/vg_candy-home   496G  16M 471G  1% /home
/dev/mapper/vg_candy-usr   496G 390M 471G  1% /usr
/dev/mapper/vg_candy-var   496G  71M 471G  1% /var

结束语

顺便给大家晒一张重启后系统自动挂载的图!

Linux系统还是比较聪明的. 其实重启与不重启都能使用, 只是为大家演示重启后的效果.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • linux中Centos7的LVM磁盘扩容问题

    系统提示我容量不足 就利用LVM的方式进行扩容吧. 系统是RHEL7(centos7差不多一样) 先查看磁盘信息及根目录 fdisk -l 注意:sda为硬盘,需要扩容的是系统的根目录,这里RHEL的系统根目录为/dev/mapper/rhel-root(系统不一样,根目录也不一样) 关闭系统,在vmware->设置->硬盘->扩展->输入数字大于当前系统内存->点击扩展 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还没有,也就是说增加出来

  • 详解基于Linux的LVM无缝磁盘水平扩容

    环境 名称 属性 CPU x5650 内存 4G 磁盘 20G+4TB 这时候,我们假设服务器已经有如下东西: 安装好了Parted(yum install parted) 分区容量已经告捷,公司为服务器增加了一块4T硬盘用来增加容量! 除了/boot分区外,其余都为LVM 模式的扩展逻辑分区 软件安装与信息查看 首先查看软件是否安装: [root@Candy ~]# rpm -qa | grep lvm lvm2-libs-2.02.118-2.el6.x86_64 lvm2-2.02.118

  • 详解基于Linux下正则表达式(基本正则和扩展正则命令使用实例)

    前言 正则表达式应用广泛,在绝大多数的编程语言都可以完美应用,在Linux中,也有着极大的用处. 使用正则表达式,可以有效的筛选出需要的文本,然后结合相应的支持的工具或语言,完成任务需求. 在本篇博客中,我们使用grep/egrep来完成对正则表达式的调用,其实也可以使用sed等工具,但是sed的使用极大的需要正则表达式,为了在后面sed篇的书写,就只能这样排序了,有需要的朋友可以把这两篇一起来看. 正则表达式的类型 正则表达式可以使用正则表达式引擎实现,正则表达式引擎是解释正则表达式模式并使用

  • 详解基于Scrapy的IP代理池搭建

    一.为什么要搭建爬虫代理池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制,即在某一时间段内,当某个ip的访问次数达到一定的阀值时,该ip就会被拉黑.在一段时间内禁止访问. 应对的方法有两种: 1. 降低爬虫的爬取频率,避免IP被限制访问,缺点显而易见:会大大降低爬取的效率. 2. 搭建一个IP代理池,使用不同的IP轮流进行爬取. 二.搭建思路 1.从代理网站(如:西刺代理.快代理.云代理.无忧代理)爬取代理IP: 2.验证代理IP的可用性(使用代理IP去请求指定URL,根据响应验证

  • 详解 MAC/Linux Vi配置环境变量及Java环境变量配置

    详解 MAC/Linux Vi配置环境变量及Java环境变量配置 vi基础 1.vi的基本概念 (1)基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: 1) 命令行模式command mode) 控制屏幕光标的移动,字符.字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode. 2) 插入模式(Insert mode) 只有在Ins

  • mysql数据库详解(基于ubuntu 14.0.4 LTS 64位)

    1.mysql数据库的组成与相关概念 首先明白,mysql是关系型数据库,和非关系型数据库中最大的不同就是表的概念不一样. +整个mysql环境可以理解成一个最大的数据库:A +用mysql创建的数据库B是属于A的,是数据的仓库,相当于系统中的文件夹 +数据表C:是存放数据的具体场所,相当于系统中的文件,一个数据库B中包含若干个数据表C(注意此处的数据库B和A不一样) +记录D:数据表中的一行称为一个记录,因此,我们在创建数据表时,一定要创建一个id列,用于标识"这是第几条记录",id

  • 详解基于django实现的webssh简单例子

    本文介绍了详解基于django实现的webssh简单例子,分享给大家,具体如下: 说明 新建一个 django 程序,本文为 chain. 以下仅为简单例子,实际应用 可根据自己平台情况 进行修改. 打开首页后,需要输入1,后台去登录主机,然后返回登录结果. 正常项目 可以post 主机和登录账户,进行权限判断,然后去后台读取账户密码,进行登录. djang后台 需要安装以下模块 安装后会有一个版本号报错,不影响 channels==2.0.2 channels-redis==2.1.0 amq

  • zabbix 4.04 安装文档教程详解(基于CentOS 7.6)

    1    安装前准备: 1.1   安装JDK 卸载openjdk # rpm -qa | grep java # yum remove java-1.8.0-openjdk # yum remove java-1.8.0-openjdk-headless 安装JDK包 # rpm -ivh jdk-8u191-linux-x64.rpm 1.2   安装依赖包 # yum install -y net-snmp net-snmp-devel OpenIPMI-devel libssh2-dev

  • 详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程

    一.导入excel文件和相关库 import pandas; import matplotlib; from pandas.tools.plotting import scatter_matrix; data = pandas.read_csv("D:\\面积距离车站.csv",engine='python',encoding='utf-8') 显示文件大小 data.shape data 二.绘制多个变量两两之间的散点图:scatter_matrix()方法 #绘制多个变量两两之间的

  • 详解基于Spring Data的领域事件发布

    领域事件发布是一个领域对象为了让其它对象知道自己已经处理完成某个操作时发出的一个通知,事件发布力求从代码层面让自身对象与外部对象解耦,并减少技术代码入侵. 一. 手动发布事件 // 实体定义 @Entity public class Department implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer departmentId; @Enumerate

  • 详解基于Mybatis-plus多租户实现方案

    一.引言 小编先解释一下什么叫多租户,什么场景下使用多租户. 多租户是一种软件架构技术,在多用户的环境下,共有同一套系统,并且要注意数据之间的隔离性. 举个实际例子:小编曾经开发过一套支付宝程序,这套程序应用在不同的小程序上,当使用者访问不同,并且进入相对应的小程序页面,小程序则会把用户相关数据传输到小编这里.在传输的时候需要带上小程序标识(租户ID),以便小编将数据进行隔离. 当不同的租户使用同一套程序,这里就需要考虑一个数据隔离的情况. 数据隔离有三种方案: 1.独立数据库:简单来说就是一个

随机推荐