背景

线上新加7台服务器,每台除了100G系统盘外,还挂载了4*4T硬盘,准备用LVM做成一块16T逻辑盘。此处记录一下。

 

步骤如下

 

说明

安装Parted分区工具,Parted支持2T以上的硬盘,fdisk分区工具最大支持2T硬盘。MBR分区格式最大支持2T空间;gpt分区格式可以支持大于2T。

yum install parted

 

1、查看软件及磁盘信息

 

首先查看软件是否安装:

[root@q-bi-01 ~]# rpm -qa |grep lvm

lvm2-2.02.177-4.el7.x86_64

lvm2-libs-2.02.177-4.el7.x86_64

 

查看磁盘情况

[root@q-bi-05 ~]# fdisk -l

Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x0005fc9a

Device Boot Start End Blocks Id System

/dev/vda1 * 2048 209715199 104856576 83 Linux

 

Disk /dev/vdb: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

 

Disk /dev/vdc: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

 

Disk /dev/vdd: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

 

Disk /dev/vde: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

 

2、使用Parted进行分区

 

[root@q-bi-03 ~]# parted /dev/vdb

GNU Parted 3.1

Using /dev/vdb

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) mklabel

New disk label type? gpt

(parted) mkpart

Partition name? []?

File system type? [ext2]? xfs

Start? 0T

End? 4T

(parted) p

Model: Virtio Block Device (virtblk)

Disk /dev/vdb: 4001GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

Number Start End Size File system Name Flags

1 1049kB 4001GB 4001GB

(parted) set 1 lvm on

(parted) p

Model: Virtio Block Device (virtblk)

Disk /dev/vdb: 4001GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

Number Start End Size File system Name Flags

1 1049kB 4001GB 4001GB lvm

(parted) q

Information: You may need to update /etc/fstab.

 

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

mklabel将磁盘转换为gpt分区,因为MBR分区无法支持TB级硬盘(具体请自行查阅,parted当然也支持TB级以下的操作)

mkpart将转换好的gpt磁盘进行分区,需要提供文件系统类型、开始点、结束点。

输入p 打印出刚才才做后生成的分区。

set 1 lvm on 是将num为1的分区,设置为LVM ,这样才能添加到vm卷组里

 

3、创建PV、VG、LV

 

PV

把/dev/vdb1 /dev/vdc1 /dev/vdd1 /dev/vde1设置为PV

pvcreate /dev/vdb1 /dev/vdc1 /dev/vdd1 /dev/vde1

 

查看已有PV

pvdisplay

 

VG

创建名称为bi_vg的卷组,包含如下PV:/dev/vdb1 /dev/vdc1 /dev/vdd1 /dev/vde1

vgcreate bi_vg /dev/vdb1 /dev/vdc1 /dev/vdd1 /dev/vde1

 

查看vg

vgdisplay

 

LV

创建1个16T的逻辑卷bi_lv从卷组bi_vg

lvcreate –L 16T –n bi_lv bi_vg

 

把卷组bi_vg所有的空间创建一个逻辑卷bi_lv

lvcreate -l 100%VG -n bi_lv bi_vg

 

把卷组bi_vg剩余的空间创建一个逻辑卷bi_lv

lvcreate -l 100%FREE -n bi_lv bi_vg

 

此命令类似上面一个

lvcreate --name bi_lv -l 100%FREE bi_vg

以上4种命令可以任选其一。

 

查看Lv

lvdisplay

 

创建了一个名字为bi_lv,容量大小是16T的分区,其中:-L:指定LV的大小 -n:指定LV的名。bi_vg:表示从这个VG中划分LV;

 

扩容

 

把剩余的空间都加到/dev/bi_vg/lv_bdata逻辑卷中。

lvextend -l 100%VG /dev/bi_vg/lv_bdata

 

使扩容生效

xfs_growfs /dev/bi_vg/lv_bdata

 

resize2fs命令 针对的是ext2ext3ext4文件系统

xfs_growfs命令 针对的是xfs文件系统

 

4、LV格式化及挂载

 

格式化逻辑卷

mkfs.xfs /dev/bi_vg/bi_lv

创建挂载点

mkdir –p /data

挂载磁盘

mount /dev/bi_vg/bi_lv /data

使用LVM动态管理4T以上硬盘_第1张图片

 

如果要在系统启动的时候启动LV,可以写入fstab中。

/dev/bi_vg/bi_lv /data xfs noatime,defaults 0 0

 

5、扩容当前分区

此情况适合服务器上快没有空间了,又新加一块磁盘,这有点扯远了。

 

pvcreate /dev/hda6

vgdisplay

#查看当前已经存在的VG信息,以存在VG:VolGroup00为例

 

vgextend VolGroup00 /dev/hda6

#扩展VolGroup00

lvdisplay

#查看已经存在的LV信息,以存在LV:LogVol01为例

lvextend –L +1G /dev/VolGroup00/LogVol01

 

#扩展LV. ext2/ext3/ext4文件系统的调整命令是resize2fs

 

resize2fs /dev/VolGroup00/LogVol01

#执行该重设大小,对于当前正在使用的LogVol01有效

df –h

#查看挂载情况,已经扩容

 

6、 扩展知识

 

LVM基本术语

LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:

物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。

物理卷(physical volume:物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

卷组(Volume Group:LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

逻辑卷(logical volume:LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。

简单来说就是:

PV:是物理的磁盘分区

VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。

LV:也就是从VG中划分的逻辑分区

如下图所示PV、VG、LV三者关系:

使用LVM动态管理4T以上硬盘_第2张图片

当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间。如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区),那么就可以轻松进行扩容或缩容!不同文件系统类型所对应的创建、检查、调整命令不同,下面就针对xfs和ext2/3/4文件系统的lvm分区空间的扩容和缩容的操作做一记录:

------------------------------------------------------------------------------------------

特别注意的是:

resize2fs命令 针对的是ext2、ext3、ext4文件系统

xfs_growfs命令 针对的是xfs文件系统

------------------------------------------------------------------------------------------

1)ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)

lvextend -L 120G /dev/mapper/centos-home //增大至120G

lvextend -L +20G /dev/mapper/centos-home //增加20G

lvreduce -L 50G /dev/mapper/centos-home //减小至50G

lvreduce -L -8G /dev/mapper/centos-home //减小8G

resize2fs /dev/mapper/centos-home //执行调整

 

2)xfs文件系统的调整命令是xfs_growfs(只支持增大)

lvextend -L 120G /dev/mapper/centos-home //增大至120G

lvextend -L +20G /dev/mapper/centos-home //增加20G

xfs_growfs /dev/mapper/centos-home //执行调整

 

如果是XFS文件系统,使用了resize2fs这个命令,则会报错如下:

[root@my-cdh-01 mnt]# resize2fs /dev/bi_vg/bi_lv

resize2fs 1.42.9 (28-Dec-2013)

resize2fs: Bad magic number in super-block 当尝试打开 /dev/bi_vg/bi_lv 时

找不到有效的文件系统超级块.

就是说:xfs文件系统只支持增大分区空间的情况,不支持减小的情况(切记!!!!!)。

硬要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了。如果有重要文件,那就歇菜喽~~~

 

[root@localhost ~]# umount /home/umount: /home: device is busy.(In some cases useful info about processes that usethe device is found by lsof(8) or fuser(1))

提示无法卸载,则是有进程占用/home,使用如下命令来终止占用进程:

[root@localhost ~]# fuser -m -k /home

/home: 1409 1519ce 1531e 1532e 1533e 1534e 1535e 1536e 1537e 1538e 1539e 1541e 1543e 1544e 1545e 1546e 1547e 1548e 1549e 1550e 1601m

再次卸载home分区就成功了。

[root@localhost ~]# umount /home/

-k 表示自动把霸占home分区的进程kill掉!

如果你不是很明确是否要杀死所有霸占设备的程序,还可以加一个-i 参数,这样每杀死一个程序前,都会询问!(即fuser -m -v -i -k /home)