目录
一、基本概念
- 磁盘Disk:包括物理磁盘、逻辑磁盘。磁盘是一个泛指概念,既包括采用LVM的PV和LV可统称为磁盘,也包括没有采用LVM管理也可称为磁盘。
- 分区Partition:对磁盘进行分割,每个分区的起止位置由Partition Table记录并控制。
- 文件系统FileSystem:是操作系统使用磁盘的一种方法、结构。常见的的文件系统类型包括:reiserfs/ext3/ext4/xfs,现在主要使用xfs。 另外还有用于交换区的文件系统swap(也称为虚拟内存)、用于将内存作为文件存储的文件系统tmpfs(上面的数据不是永久存储,断电重启会丢失)等等。
- LVM(Logical Volume Manager)概念:
- PV物理卷Physical Volume。相对于Linux来说,可等价视为物理磁盘(或物理磁盘上某个分区),既块设备。更准确说,在LVM中需要将物理磁盘(或物理磁盘上某个分区)通过PV相关命令将其创建后转为PV使用。一个PV的空间受限于物理磁盘(或物理磁盘上某个分区)。
- VG卷组Volume Group。将一个或多个PV共同组成一个大的空间既VG,这个空间可以超越单个物理磁盘,甚至可以将不同物理型号的块设备共同组成一个VG。
- LV逻辑卷Logical Volume。将VG卷组大空间按需重新划分,重新分割为不同的逻辑卷,以供不同用途使用。LV逻辑卷的划分分割不再受单个物理磁盘限制,既LV和PV没有直接关系。
二、环境信息
- 虚拟化软件:VMware Workstation 16+
- 虚拟机:CentOS 7.9 64bit
背景:在VMware 中给Linux虚拟机已经分了40GB单磁盘,希望扩大容量,因为Linux是使用LVM(Logical Volume Manager)所以扩充磁盘比较灵活。步骤如下
三、扩容前
1、扩容前检查空间使用率和文件系统。通过df -T命令查看结果如下,文件系统FileSystem的类型为xfs。期望对挂载根目录的文件系统扩大空间至100GB。其中:
- /dev/mapper/centos-root为软链接,实际指向/dev/dm-0,既为被文件系统格式化的LV。而名为“/dev/vg_centos/root”的LV也为软链接,实际也指向/dev/dm-0(具体见后文命令截图)。
- /dev/sda1不是采用LVM管理(见fdisk -l和parted -l命令结果),不涉及LVM。
[root@centosa ~]# df -T (加-T选项可展示文件系统类型。 df命令不展示交换区)
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 1913716 0 1913716 0% /dev
tmpfs tmpfs 1930644 1052 1929592 1% /dev/shm
tmpfs tmpfs 1930644 12800 1917844 1% /run
tmpfs tmpfs 1930644 0 1930644 0% /sys/fs/cgroup
/dev/mapper/vg_centos-root xfs 38770180 5766476 33003704 15% /
/dev/sda1 xfs 1038336 171860 866476 17% /boot
tmpfs tmpfs 386132 0 386132 0% /run/user/1000
#注意:上面的/dev/mapper/centos-root为链接,实际指向/dev/dm-0
# 而/dev/dm-0或/dev/dm-1为文件系统,也是LV(既被文件系统格式化的LV)
[root@centosa ~]# ls -l /dev/mapper/
total 0
crw-------. 1 root root 10, 236 Sep 25 11:20 control
lrwxrwxrwx. 1 root root 7 Sep 25 11:20 vg_centos-root -> ../dm-0
lrwxrwxrwx. 1 root root 7 Sep 25 11:20 vg_centos-swap -> ../dm-1
2、扩容前先查看磁盘Disk相关信息。通过fdisk -l或parted -l 命令可查看磁盘(包括物理磁盘和逻辑磁盘)及其分区信息。注意磁盘Disk和分区Partition的概念区分。
下面结果中:
- 物理磁盘为:/dev/sda。 其中/dev/sda磁盘有两个分区sda1和sda2,其中sda1没有采用LVM管理(不涉及LVM相关概念),sda2采用了LVM管理(其作为PV物理卷)
- 逻辑磁盘为:/dev/mapper/centos-root、/dev/mapper/centos-swap。既为被文件系统格式化的LV。
注意其中Disk label type或Partition Table分区类型:
- dos或者msdos 表示使用的是MBR(Master Boot Record)分区表。其分区空间不能超过2TB,最多支持4个主分区。如果需要超过4个分区,可以将其中一个主分区设置为扩展分区,再在其中创建逻辑分区。总的来说,MBR最多支持4个主分区或3个主分区加多个逻辑分区。MBR历史悠久,兼容性更广。
- gpt 表示使用的是GPT(GUID Partition Table)分区表。其分区空间理论可最大支持18EB,支持多达128个主分区,无需创建扩展或逻辑分区。GPT需要64位操作系统,并且做系统盘启动需支持UEFI的BIOS。
对于MBR类型,可使用fdisk命令或者parted命令处理。
对于GPT类型,应使用parted命令或者gdisk命令处理,fdisk对GPT仅可查看,无法处理(高版本fdisk已经开始支持)!
2、通过lsblk -p和lsblk -f 命令查看块设备信息。包括磁盘关系、分区、文件系统、挂接点。
[root@centosa ~]# lsblk -p
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/sda 8:0 0 40G 0 disk
├─/dev/sda1 8:1 0 1G 0 part /boot
└─/dev/sda2 8:2 0 39G 0 part
├─/dev/mapper/vg_centos-root 253:0 0 37G 0 lvm /
└─/dev/mapper/vg_centos-swap 253:1 0 2G 0 lvm [SWAP]
/dev/sr0 11:0 1 55.9M 0 rom
[root@centosa ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 55bcf9ce-3264-4633-950b-5faddc0ef994 /boot
└─sda2 LVM2_member Z53qHA-kez0-H4hc-wMmu-8g3o-oeec-tPVU2q
├─vg_centos-root xfs 8d72b4ab-80ae-4ae9-a7a3-f5162718bde5 /
└─vg_centos-swap swap 3c339105-b7db-43f6-9c14-23f1c488d54e [SWAP]
sr0 iso9660 VMware Tools 2020-03-24-18-03-49-00
四、扩容步骤
1、VMware中新增硬盘
对于VMware Workstation,无法直接扩展原磁盘(VMware vCenter可以)。因此,只能在VMware中新增一块盘。关闭VMware虚拟机后,新增一块SCSI硬盘,如下图。
新增后,重启VMware虚拟机。
2、Linux中查看新盘
增加新磁盘并启动虚拟机后,通过df命令查看文件系统,没有任何变化。
但通过fdisk -l或parted -l命令可以看到多了一块名为 /dev/sdb 的物理磁盘Disk。
3、(二选一)创建MBR类型partition
分区有多种类型,常见为:MBR(命令中显示为dos后msdoc)、GPT(命令中显示为gpt)。以下通过以下fdisk /dev/sdb命令将磁盘创建创建为MBR类型的partition。
一个磁盘可创建多个partition,这里将整个磁盘空间全部分片给一个分区。
可以通过lsblk -p或fdisk -l命令查看刚创建的partition为:/dev/sdb1 (注意这个sdb1是partition,而sdb是物理磁盘)
3、(二选一)创建GPT类型partition
分区有多种类型,常见为:MBR(命令中显示为dos后msdoc)、GPT(命令中显示为gpt)。以下通过以下parted /dev/sdb命令将磁盘创建创建为GPT类型的partition。
一个磁盘可创建多个partition,这里将整个磁盘空间全部分片给一个分区。
可以通过lsblk -p查看刚创建的partition为:/dev/sdb1 (注意这个sdb1是partition,而sdb是物理磁盘)。
4、创建PV并纳入VG
这时候通过pvdisplay 和 vgdisplay 命令还看不到刚才新增的Partition。
先对刚创建partition通过pvcreate 命令将其转为为PV,PV名也为:/dev/sdb1
再通过 vgextend命令将此新PV纳入到VG中(在本机上的VG名为"vg_centos")
然后,再次通过pvdisplay 或 vgdisplay 命令,就能看到了。并且VG的总容量也增加了,VG新增的空间是Free空闲待分配的。空闲:15359个PE * 每PE大小为4MiB = 61436MiB。
5、对原LV扩展容量
在扩LV之前,通过lvdisplay命令查看当前的LV情况。可以看到:系统已存在两个LV,都是基于名为“vg_centos”的VG上分配的空间。我们需扩容的对象是名为“ /dev/centos/root” 的LV。
注:/dev/mapper/centos-root为软链接,实际指向/dev/dm-0,既为被文件系统格式化的LV。 名为“/dev/vg_centos/root”的LV也为软链接,实际指向/dev/dm-0。
对此,我们将上步中VG中新增Free空闲待分配的60GB=61440m,全部分配给名为“ /dev/centos/root” 的LV。 以下命令-L选项指向需要增加的空间大小,单位可以为k、m、g、t等:
- lvextend -L +61440m LV名称 (按大小指定需要增加的空间大小,有个加号表示增加)
注意:通过vgdisplay命令查看VG的free空闲空间不是严格的60GB,而是少一个PE(一个PE为为4MB),因此扩展的空间大小不是61440m,而是61436m。
若命令中-L选项指定61440m时,在低版本lvextend命令可能会报“ Insufficient free space: 15360 extents needed, but only 15359 available”,这调整命令参数中空间大小即可。而高版本的lvextend命令即使-L数字有误,命令会自动适应,自动调整大小并resized成功。
[root@centosa ~]# lvextend -L +61440m /dev/vg_centos/root
Size of logical volume vg_centos/root changed from 36.99 GiB (9470 extents) to 96.99 GiB (24830 extents).
Logical volume vg_centos/root successfully resized.
[root@centosa ~]#
[root@centosa ~]#
[root@centosa ~]# vgdisplay
--- Volume group ---
VG Name vg_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 98.99 GiB
PE Size 4.00 MiB
Total PE 25342
Alloc PE / Size 25342 / 98.99 GiB
Free PE / Size 0 / 0
VG UUID 1F1oTK-AAtW-44L4-bQCB-3HzO-gEEM-GRqs2K
执行完LV扩容后,再看VG信息其Free空闲待分配剩余为零。
6、扩大文件系统
这时通过df查看当前文件系统,仍未变化。这是因为尽管LV容量扩大了,但文件系统还未扩大。
通过df -T命令查看当前文件系统的类型:
- 如果是ext4等文件系统,则通过resize2fs命令扩大。
- 如果是xfs文件系统,则通过xfs_growfs命令来完成文件系统扩大。 xfs_growfs命令的-D选项指定扩大的目标大小,若不指定则表示尽可能扩到最大。
执行完后再次通过df查看文件系统空间情况,可以看到空间已经扩大。