在使用虚拟机过程中,可能会遇到需要扩展磁盘容量的情况,而Ubuntu作为一种常见的操作系统,我们将介绍如何动态调整分区以适应磁盘大小的变更。


pv、lv、vg 介绍

PV(Phsical Volume,物理卷),PV是VG的组成部分,由分区构成,多块盘的时候,可以把一块盘格式化成一个主分区,然后用这个分区做成一个PV,只有一块盘的时候,可以这块盘的某一个分区做成一个PV,实际上一个PV就一个分区。


VG(Volume Group, 卷组),有若干个PV组成,作用就是将PV组成到以前,然后再重新划分空间。


LV(Logical Volume,逻辑卷),LV就是从VG中划分出来的卷,LV的使用要比PV灵活的多,可以在空间不够的情况下,增加空间。


可以说成是PV就是硬盘,而VG就是管理硬盘的操作系统,而LV就是操作系统分出来的各个分区.

PV->VG->LV-> 文件系统使用(挂载到某个目录)

硬盘或分区做成pv,然后将pv或多个pv建立vg,vg上建立lv,其模型如下



命令集合

PV


pvcreate :根据物理盘,创建pv


pvscan :查询目前系统里的pv


pvdisplay:显示pv的状态


pvremove:将pv属性移除


VG


vgcreate:创建vg


vgscan:查找当前系统里面的vg


vgdisplay:显示当前系统vg的状态


vgextend:给vg添加额外的pv


vgreduce:在vg内删除pv


vgchange:设置vg是否是启动状态(active)


vgremove:删除一个vg


LV


lvcreate:创建lv


lvscan:查询当前系统的lv


lvdisplay:显示lv的属性


lvextend:给lv添加容量


lvredurce:给lv减少容量


lvremove:删除一个lv


lvresize:对lv大小的容量进行调整


实战案例

查看文件系统的磁盘空间使用情况

df -hl


Filesystem                         Size  Used Avail Use% Mounted on

tmpfs                              791M  2.2M  789M   1% /run

/dev/mapper/ubuntu--vg-ubuntu--lv   38G   26G   11G  72% /

tmpfs                              3.9G     0  3.9G   0% /dev/shm

tmpfs                              5.0M     0  5.0M   0% /run/lock

/dev/sda2                          2.0G  253M  1.6G  14% /boot

tmpfs                              791M  4.0K  791M   1% /run/user/1000


可以看到 / 由 /dev/mapper/ubuntu–vg-ubuntu–lv 挂载


创建分区 sda4,将设置为 lvm 类型:

sudo fdisk /dev/sda


xiuji@xiuji:~$ sudo fdisk /dev/sda


Welcome to fdisk (util-linux 2.37.2).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.


GPT PMBR size mismatch (83886079 != 209715199) will be corrected by write.

This disk is currently in use - repartitioning is probably a bad idea.

It's recommended to umount all file systems, and swapoff all swap

partitions on this disk.



Command (m for help): p


Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors

Disk model: VMware Virtual S

Units: sectors of 1 * 512 = 512 bytes

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

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

Disklabel type: gpt

Disk identifier: D80D8A91-AB36-4BB8-A669-783F46148D68


Device       Start      End  Sectors Size Type

/dev/sda1     2048     4095     2048   1M BIOS boot

/dev/sda2     4096  4198399  4194304   2G Linux filesystem

/dev/sda3  4198400 83884031 79685632  38G Linux filesystem


Command (m for help): n

Partition number (4-128, default 4): 4

First sector (83884032-209715166, default 83884032): 83884032

Last sector, +/-sectors or +/-size{K,M,G,T,P} (83884032-209715166, default 209715166): 104857583


Created a new partition 4 of type 'Linux filesystem' and of size 10 GiB.


Command (m for help): p

Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors

Disk model: VMware Virtual S

Units: sectors of 1 * 512 = 512 bytes

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

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

Disklabel type: gpt

Disk identifier: D80D8A91-AB36-4BB8-A669-783F46148D68


Device        Start       End  Sectors Size Type

/dev/sda1      2048      4095     2048   1M BIOS boot

/dev/sda2      4096   4198399  4194304   2G Linux filesystem

/dev/sda3   4198400  83884031 79685632  38G Linux filesystem

/dev/sda4  83884032 104857583 20973552  10G Linux filesystem


Command (m for help): t

Partition number (1-4, default 4): 4

Partition type or alias (type L to list all): lvm


Changed type of partition 'Linux filesystem' to 'Linux LVM'.


Command (m for help): p

Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors

Disk model: VMware Virtual S

Units: sectors of 1 * 512 = 512 bytes

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

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

Disklabel type: gpt

Disk identifier: D80D8A91-AB36-4BB8-A669-783F46148D68


Device        Start       End  Sectors Size Type

/dev/sda1      2048      4095     2048   1M BIOS boot

/dev/sda2      4096   4198399  4194304   2G Linux filesystem

/dev/sda3   4198400  83884031 79685632  38G Linux filesystem

/dev/sda4  83884032 104857583 20973552  10G Linux LVM


Command (m for help): w

The partition table has been altered.

Syncing disks.


sda4 创建成功,查看所有可用空间:

sudo lsblk


xiuji@xiuji:~$ sudo lsblk

NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS

loop0                       7:0    0  63.4M  1 loop /snap/core20/1950

loop1                       7:1    0  53.3M  1 loop /snap/snapd/19457

loop2                       7:2    0  53.3M  1 loop /snap/snapd/19361

loop3                       7:3    0  63.5M  1 loop /snap/core20/1891

loop4                       7:4    0 111.9M  1 loop /snap/lxd/24322

sda                         8:0    0   100G  0 disk

├─sda1                      8:1    0     1M  0 part

├─sda2                      8:2    0     2G  0 part /boot

├─sda3                      8:3    0    38G  0 part

│ └─ubuntu--vg-ubuntu--lv 253:0    0    38G  0 lvm  /

└─sda4                      8:4    0    10G  0 part

sr0                        11:0    1   1.8G  0 rom


将 sda4创建成 PV(Physical Volume):

sudo pvcreate /dev/sda4


xiuji@xiuji:~$ sudo pvcreate /dev/sda4

  Physical volume "/dev/sda4" successfully created.


sudo pvdisplay


xiuji@xiuji:~$ sudo pvdisplay

  --- Physical volume ---

  PV Name               /dev/sda3

  VG Name               ubuntu-vg

  PV Size               <38.00 GiB / not usable 0

  Allocatable           yes (but full)

  PE Size               4.00 MiB

  Total PE              9727

  Free PE               0

  Allocated PE          9727

  PV UUID               qtpZ00-5KSl-HJr3-GCcf-Ki6B-eQP8-pcO6oH


  "/dev/sda4" is a new physical volume of "10.00 GiB"

  --- NEW Physical volume ---

  PV Name               /dev/sda4

  VG Name

  PV Size               10.00 GiB

  Allocatable           NO

  PE Size               0

  Total PE              0

  Free PE               0

  Allocated PE          0

  PV UUID               eKegVq-phGh-jZ51-p08D-go8S-fFvt-8DLU62



查看当前 VG

sudo vgdisplay


xiuji@xiuji:~$  sudo vgdisplay

  --- Volume group ---

  VG Name               ubuntu-vg

  System ID

  Format                lvm2

  Metadata Areas        1

  Metadata Sequence No  3

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                1

  Open LV               1

  Max PV                0

  Cur PV                1

  Act PV                1

  VG Size               <38.00 GiB

  PE Size               4.00 MiB

  Total PE              9727

  Alloc PE / Size       9727 / <38.00 GiB

  Free  PE / Size       0 / 0

  VG UUID               vy0kkj-d2tU-Izec-RFY0-1Nmx-cReb-3Kx2S7


将 PV 添加到 VG

sudo vgextend ubuntu-vg /dev/sda4



xiuji@xiuji:~$ sudo vgextend ubuntu-vg /dev/sda4

  Volume group "ubuntu-vg" successfully extende


sudo vgdisplay


xiuji@xiuji:~$ sudo vgdisplay

  --- Volume group ---

  VG Name               ubuntu-vg

  System ID

  Format                lvm2

  Metadata Areas        2

  Metadata Sequence No  4

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                1

  Open LV               1

  Max PV                0

  Cur PV                2

  Act PV                2

  VG Size               47.99 GiB

  PE Size               4.00 MiB

  Total PE              12286

  Alloc PE / Size       9727 / <38.00 GiB

  Free  PE / Size       2559 / <10.00 GiB

  VG UUID               vy0kkj-d2tU-Izec-RFY0-1Nmx-cReb-3Kx2S7



块设备(block devices)的信息

sudo lsblk


xiuji@xiuji:~$ sudo lsblk

NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS

loop0                       7:0    0  63.4M  1 loop /snap/core20/1950

loop1                       7:1    0  53.3M  1 loop /snap/snapd/19457

loop2                       7:2    0  53.3M  1 loop /snap/snapd/19361

loop3                       7:3    0  63.5M  1 loop /snap/core20/1891

loop4                       7:4    0 111.9M  1 loop /snap/lxd/24322

sda                         8:0    0   100G  0 disk

├─sda1                      8:1    0     1M  0 part

├─sda2                      8:2    0     2G  0 part /boot

├─sda3                      8:3    0    38G  0 part

│ └─ubuntu--vg-ubuntu--lv 253:0    0    38G  0 lvm  /

└─sda4                      8:4    0    10G  0 part

sr0                        11:0    1   1.8G  0 rom


调整 LV 占用 VG 的全部空间

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv


xiuji@xiuji:~$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

  Size of logical volume ubuntu-vg/ubuntu-lv changed from <38.00 GiB (9727 extents) to 47.99 GiB (12286 extents).

  Logical volume ubuntu-vg/ubuntu-lv successfully resized.


sudo resize2fs /dev/ubuntu-vg/ubuntu-lv


xiuji@xiuji:~$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

resize2fs 1.46.5 (30-Dec-2021)

Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required

old_desc_blocks = 5, new_desc_blocks = 6

The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 12580864 (4k) blocks long.


查看文件系统的磁盘空间使用情况

df -hl


xiuji@xiuji:~$ df -hl

Filesystem                         Size  Used Avail Use% Mounted on

tmpfs                              791M  2.2M  789M   1% /run

/dev/mapper/ubuntu--vg-ubuntu--lv   48G   26G   20G  57% /

tmpfs                              3.9G     0  3.9G   0% /dev/shm

tmpfs                              5.0M     0  5.0M   0% /run/lock

/dev/sda2                          2.0G  253M  1.6G  14% /boot

tmpfs                              791M  4.0K  791M   1% /run/user/1000


可以看到我们/dev/mapper/ubuntu–vg-ubuntu–lv调整了10G的大小已经生效了