VMESXi_增加硬盘扩展LVM容量

我之前在VMESXi上创建的一个CentOS系统,当时只给了8G的磁盘大小,后来发现实在不够空间用,又扩容到20G。
不过扩容后我是新建了一个12G的分区3,然后挂载到/data目录中。
而有很多情况是要你对之间整个”/”分区做大小扩容的,这个时候就不能简单用分区那些命令的,要用到一些对卷操作的命令。

lsblk可以帮助我们以树型结构查看磁盘结构:

[root@jira support-files]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 7.5G 0 part
│ ├─centos-root 253:0 0 6.7G 0 lvm /
│ └─centos-swap 253:1 0 820M 0 lvm [SWAP]
└─sda3 8:3 0 12G 0 part /data
sr0 11:0 1 1024M 0 rom

如上面,我将要将sda3分区的12G大小扩展到才6.7G大小的/ lvm卷上。

pvdisplay (显而易见pv是物理卷的缩写)可对卷更详细信息。

[root@jira support-files]# pvdisplay
— Physical volume —
PV Name /dev/sda2
VG Name centos
PV Size 7.51 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1922
Free PE 10
Allocated PE 1912
PV UUID lZGwkF-spUE-jKhE-5D4f-13k5-Z2SQ-3iMv3c

vgdisplay (vg上卷组的缩写)对卷组查看信息。

[root@jira support-files]# vgdisplay
— Volume group —
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 7.51 GiB
PE Size 4.00 MiB
Total PE 1922
Alloc PE / Size 1912 / 7.47 GiB
Free PE / Size 10 / 40.00 MiB
VG UUID qz6cfP-VAdz-KmvU-LGqu-y7UD-3Fbh-pXc4FP

接下来我们将/dev/sdb 加入到卷组
要用到的命令是vgextend
[root@jira ~]# vgextend –help
vgextend: Add physical volumes to a volume group

vgextend
[-A|–autobackup y|n]
[–restoremissing]
[–commandprofile ProfileName]
[-d|–debug]
[-f|–force]
[-h|–help]
[–reportformat {basic|json}]
[-t|–test]
[-v|–verbose]
[–version]
[-y|–yes]
[ PHYSICAL DEVICE OPTIONS ]
VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]

vgextend centos /dev/sda3
注意这里vgextend后面接的是vg name,就是之前vgdisplay命令看到的vg name参数。

[root@jira ~]# vgextend centos /dev/sda3
Can’t open /dev/sda3 exclusively. Mounted filesystem?

注意这里提示你要先将挂载的磁盘卸下来才能进一步操作。
umount /dev/sda3

[root@jira ~]# vgextend centos /dev/sda3
WARNING: ext3 signature detected on /dev/sda3 at offset 1080. Wipe it? [y/n]:
Wiping ext3 signature on /dev/sda3.
Physical volume “/dev/sda3” successfully created.
Volume group “centos” successfully extended

因为我之前格式化成了ext3格式的,并不是lvm格式,所以这里会提示你要擦除。没有数据可以选y。
像如果之前就初始化分区来做也行。
比如:pvcreate /dev/sda3 (创建,初始化物理卷)
而我这里是直接按y,同样也是初始化并加入到centos卷组里面了。

现在再查看物理卷和卷组就会发现增加了sda3分区进去:
[root@jira ~]# pvdisplay
— Physical volume —
PV Name /dev/sda2
VG Name centos
PV Size 7.51 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1922
Free PE 10
Allocated PE 1912
PV UUID lZGwkF-spUE-jKhE-5D4f-13k5-Z2SQ-3iMv3c

— Physical volume —
PV Name /dev/sda3
VG Name centos
PV Size 12.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 3071
Free PE 3071
Allocated PE 0
PV UUID RGPxrv-JqXk-RCNv-QjxP-J6gP-MOI4-OmNPZG

[root@jira ~]# vgdisplay
— Volume group —
VG Name centos
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 19.50 GiB
PE Size 4.00 MiB
Total PE 4993
Alloc PE / Size 1912 / 7.47 GiB
Free PE / Size 3081 / 12.04 GiB
VG UUID qz6cfP-VAdz-KmvU-LGqu-y7UD-3Fbh-pXc4FP

重要的是VG的大小Size是两个分区的合计容量了!
而且Free Size中也可以看到有12G左右的空闲!我们可以对此扩展到root根分区了!

用到的命令是lvresize (看命令名字就知道是lvm卷重设卷大小的意思)

[root@jira ~]# lvresize –help
lvresize: Resize a logical volume

lvresize
[-A|–autobackup y|n]
[–alloc AllocationPolicy]
[–commandprofile ProfileName]
[-d|–debug]
[-f|–force]
[-h|–help]
[-i|–stripes Stripes [-I|–stripesize StripeSize]]
{-l|–extents [+|-]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}] |
-L|–size [+|-]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}
–poolmetadatasize [+]MetadataVolumeSize[bBsSkKmMgG]}
[-n|–nofsck]
[–noudevsync]
[–reportformat {basic|json}]
[-r|–resizefs]
[-t|–test]
[–type VolumeType]
[-v|–verbose]
[–version]
LogicalVolume[Path] [ PhysicalVolumePath… ]

lvresize -L +12G /dev/centos/root #把空闲的空间扩容到root上
注意,/dev/centos/root 这个路径可以从lsblk这个命令展开的结构上看出来,表示的就是整个root分区。

[root@jira ~]# lvresize -L +12G /dev/centos/root
Size of logical volume centos/root changed from 6.67 GiB (1707 extents) to 18.67 GiB (4779 extents).
Logical volume centos/root successfully resized.

提示已操作扩展成功,我们敲lsblk来验证一下:

[root@jira ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 7.5G 0 part
│ ├─centos-root 253:0 0 18.7G 0 lvm /
│ └─centos-swap 253:1 0 820M 0 lvm [SWAP]
└─sda3 8:3 0 12G 0 part
└─centos-root 253:0 0 18.7G 0 lvm /
sr0 11:0 1 1024M 0 rom

可以看到sda3也是在centos/root之中了,并且sda2同样lvm /的大小扩展到18.7G了。

VMESXi这些方便如此操作,因为都是在同一块磁盘上,如果是在阿里云的ECS上增添的是不同的磁盘,可能就不容易这样去实现了。
不过至少懂得了,比起windows上有的扩展C盘空间大小,linux系统上也是有如此操作的,只不过windows上有工具实现无损重新分区,linux上目前只适用于新增新扩容,不然就得将资料备份好了。

然而现在只是成功了一半,后面我们还得将文件系统也弄好,你现在直接敲df -h命令可以看到文件系统依然还是6.7G大小的根目录:

[root@jira ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 6.7G 6.1G 583M 92% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 8.5M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 497M 162M 336M 33% /boot
tmpfs 396M 0 396M 0% /run/user/0

———————
resize2fs /dev/centos/root #重建文件系统后,扩容才生效。

resize2fs: Bad magic number in super-block 当尝试打开 /dev/centos/root 时
找不到有效的文件系统超级块.

这个错误后来在网上查到了,原来是因为我这边(查看/etc/fstab可得知)用的是xfs根式。
所以要将resize2fs 这个命令改为用xfs_growfs 命令去做!
————————-

[root@jira ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=436992 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0 spinodes=0
data = bsize=4096 blocks=1747968, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 1747968 to 4893696

成功!在用df命令查看文件系统,已是正常扩展的容量!

[root@jira ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 19G 6.1G 13G 33% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 8.5M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 497M 162M 336M 33% /boot
tmpfs 396M 0 396M 0% /run/user/0

以防万一,我还将之前在/etc/fstab 写进挂载/dev/sda3 到/data的这一条给删除。
重启服务器验证一下,挂载方面会不会出错。
重启过后看也正常,看来只需之前默认的有挂载就可以了。
若是像上面当初没有将12G全部合并过去,而是分成6G过去,剩6G创建一个新的逻辑卷,那就得在/etc/fstab文件里写入这个新卷的挂载点。

创建LV(逻辑分区)的命令例子是
lvcreate -L 1000G -n lvData(lv的名字)centos(vg组的名字)

比如我在另一台用做samba的服务器上有操作
[yunwei@localhost ~]$ sudo lvcreate -L 1000G -n lvData centos
Logical volume “lvData” created.
[yunwei@localhost ~]$ sudo lvdisplay
— Logical volume —
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID cyumac-RTxT-jWPT-rjpi-71SK-qYxD-MVopB8
LV Write Access read/write
LV Creation host, time localhost, 2017-05-20 17:28:10 +0800
LV Status available
# open 2
LV Size 820.00 MiB
Current LE 205
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 8192
Block device 253:1

— Logical volume —
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID kjK7D9-2srG-yMD2-2xx0-2G3m-07Zb-FWJqGQ
LV Write Access read/write
LV Creation host, time localhost, 2017-05-20 17:28:10 +0800
LV Status available
# open 1
LV Size 18.67 GiB
Current LE 4779
Segments 2
Allocation inherit
Read ahead sectors auto
– currently set to 8192
Block device 253:0

— Logical volume —
LV Path /dev/centos/lvData
LV Name lvData
VG Name centos
LV UUID eSSM8B-5pDs-7fN1-p6Ec-9Y4s-axvk-V2myaq
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-08-18 14:13:09 +0800
LV Status available
# open 0
LV Size 1000.00 GiB
Current LE 256000
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 8192
Block device 253:2

下一步需要对LV进行格式化(使用mksf进行格式化操作),然后LV才能存储资料 。

sudo mkfs -t ext3 /dev/centos/lvData

将格式化后的LV分区挂载到指定的目录下,就可以像普通目录一样存储数据了。同样,要想开机就挂载就写入到/etc/fstab(分区表)中
sudo mount /dev/centos/lvData /data
(这个时候就可以看出命令lv名字的方便了,同时挂载的时候若有特殊权限要求还可以指定只读之类)

[yunwei@localhost ~]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 19G 1.4G 18G 8% /
devtmpfs 991M 0 991M 0% /dev
tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs 1001M 8.5M 993M 1% /run
tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
/dev/sda1 497M 162M 336M 33% /boot
tmpfs 201M 0 201M 0% /run/user/1000
/dev/mapper/centos-lvData 985G 72M 935G 1% /data

df命令查看证明生效。接下来写入/etc/fstab配置文件中

例如上图,在文件末尾依样填入
/dev/mapper/centos-lvData /data xfs defaults 0 0
关于fstab文件的详细配置可以另外再去学习。

后修正:这样写挂载会出错的,后面我重启的时候就变成进到紧急模式emergency mode了,将这行出错的挂载注释掉了才恢复进正常模式了。
正确的配置文件应该要写成
/dev/centos/lvData /data ext3 defaults 0 2
我猜主要是文件系统类型(type)之前填错成xfs引起,毕竟我们是格式化成ext3的。

上图是实例,正确挂载后就不会重启服务器变进紧急模式了。
—————
文:铁乐与猫
2017-8-17 初稿
2017-8-24 修订

附:网上引用的关于LVM的说明

一、LVM简介
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。
LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,
这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。
在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。
LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如”sales’、 ‘development’)代替物理磁盘名(如’sda’、’sdb’)来标识存储卷。

如图所示LVM模型:

由四个磁盘分区可以组成一个很大的空间,然后在这些空间上划分一些逻辑分区,当一个逻辑分区的空间不够用的时候,可以从剩余空间上划分一些空间给空间不够用的分区使用。

二、 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等)。
PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
简单来说就是:
PV:是物理的磁盘分区
VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。
LV:也就是从VG中划分的逻辑分区

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

三、 安装LVM
首先确定系统中是否安装了lvm工具:
[root@www root]# rpm –qa|grep lvm
lvm-1.0.3-4
如果命令结果输入类似于上例,那么说明系统已经安装了LVM管理工具;如果命令没有输出则说明没有安装LVM管理工具,则需要从网络下载或者从光盘装LVM rpm工具包。

发表评论

电子邮件地址不会被公开。 必填项已用*标注