此文章为搬运,原作者链接

一文掌握 Ubuntu 全场景扩容操作 - 南北东西万里程的文章 - 知乎
https://zhuanlan.zhihu.com/p/707918020

为 ubuntu扩容,除了直接将磁盘挂载到某个目录之外,还有一种将空间扩容至根目录的方法。其本质就是扩容逻辑卷 ubuntu-lv

Ubuntu分区概述

Ubuntu 系统的磁盘布局和使用情况通常包括几个关键部分,下面是一个典型的 Ubuntu 安装可能涉及的磁盘分区和卷结构概述:

  1. 主分区(Primary Partitions):
  • /boot:通常是一个单独的小型分区,用来存放启动加载器(如 GRUB)和内核映像。大小一般在 200MB 到 500MB 之间,取决于系统配置。
  • 根分区(/):这是系统的主要分区,包含了操作系统的所有文件和目录。在没有使用 LVM 的情况下,根分区可能就是整个磁盘或其大部分空间。
  • 交换分区(Swap Partition):
  • 这是一个用于虚拟内存的专用分区。在早期的 Ubuntu 版本中,交换分区是常见的,但现在一些系统可能使用交换文件(swapfile)代替。
  • 逻辑卷管理(LVM):
  • 物理卷(Physical Volumes, PV):这可以是磁盘分区或整个磁盘,它们被 LVM 初始化为物理卷。
  • 卷组(Volume Groups, VG):卷组将一个或多个物理卷组织在一起,形成一个逻辑上的大存储池。
  • 逻辑卷(Logical Volumes, LV):逻辑卷是从卷组中分配出来的可独立管理的存储空间,类似于传统的分区,但提供了更多的灵活性,如动态调整大小。
  • 文件系统:
  • Ubuntu 默认使用 ext4 文件系统作为根分区和其他分区的文件系统。有些系统也可能使用 XFS 或 Btrfs
  • 其他分区:
  • 用户可能还会创建额外的分区,如 /home/var/tmp 等,以便更好地管理和隔离数据。

示例磁盘布局

假设你有一个 1TB 的磁盘,你可能会看到这样的分区布局:

  • /dev/sda1:一个 500MB 的 /boot 分区,用于存放启动所需的文件。
  • /dev/sda2:一个交换分区,大小根据系统内存大小决定,通常是内存大小的 1.5 至 2 倍。
  • /dev/sda3:剩余空间被初始化为物理卷,加入到一个卷组中,如 ubuntu-vg
    • ubuntu-lv:从 ubuntu-vg 卷组中创建的一个逻辑卷,用于根分区(/)。
    • home-lv:另一个逻辑卷,用于 /home 目录,存放用户数据。

查看磁盘和分区信息

在 Ubuntu 中,你可以使用以下命令来查看磁盘和分区的详细信息:

  • sudo fdisk -l:列出所有磁盘及其分区。
  • sudo lsblk:以树状形式展示磁盘和分区,包括挂载点和文件系统类型。
  • sudo lvs:列出所有的逻辑卷。
  • sudo vgs:列出所有的卷组。
  • sudo pvs:列出所有的物理卷。

这些信息可以帮助你理解当前的磁盘布局和使用情况,以及规划未来的存储需求和调整。

LVM 技术

LVM(Logical Volume Manager,逻辑卷管理器)是一种在 Linux 和其他类 Unix 系统中用于管理存储设备的技术。LVM 提供了比传统分区方案更为灵活和强大的存储管理方式,允许用户在不影响数据的情况下动态调整存储空间。以下是 LVM 技术的主要介绍:

LVM 核心概念

1. 物理卷(Physical Volume,PV)

  • 物理卷是 LVM 的基础,可以是硬盘上的分区、整个物理磁盘或任何其他能够被操作系统识别的存储设备。在 LVM 使用之前,必须将存储设备初始化为物理卷。

2. 卷组(Volume Group,VG)

  • 卷组是物理卷的集合,可以包含一个或多个物理卷。卷组提供了一个统一的存储池,从中可以创建和管理逻辑卷。卷组内的物理空间可以被动态地分给逻辑卷。

3. 逻辑卷(Logical Volume,LV)

  • 逻辑卷是从卷组中分配出来的存储空间,可以视为一个具有特定大小的虚拟磁盘。逻辑卷可以跨越一个或多个物理卷,允许灵活地分配和调整存储空间,而不受物理位置限制。

4. 物理区域(Physical Extent,PE)

  • 物理区域是 LVM 中基本的存储单位,是物理卷上的固定大小块。PE 的大小通常是 4MB,但可以配置。

5. 逻辑区域(Logical Extent,LE)

  • 逻辑区域对应于逻辑卷中的 PE,它们之间是一对一的。逻辑区域允许逻辑卷跨越不同的物理卷。

LVM 的优势

  • 动态调整大小:
    • 逻辑卷的大小可以在不破坏数据的情况下增加或减少,允许管理员根据需求调整存储空间。
  • 存储池;
    • 卷组允许将多个物理卷合并成一个存储池,提高了存储空间的利用率和管理效率。
  • 容错能力:
    • 可以通过在卷组中添加物理卷来扩展存储空间,即使某个物理卷故障,逻辑卷仍然可以访问其他物理卷的数据。
  • 快照:
    • LVM 支持创建逻辑卷的快照,这对于数据备份和恢复非常有用。

LVM 的工具

  • pvcreate、vgcreate、lvcreate
    • 这些命令用于创建物理卷、卷组和逻辑卷。
  • pvdisplay、vgdisplay、lvdisplay
    • 这些命令用于显示物理卷、卷组和逻辑卷信息。
  • pvs、vgs、lvs
    • 这个命令提供列表式的物理卷、卷组和逻辑卷信息
  • pvresize、vgextend/vgreduce、lvextend/lvreduce
    • 这些命令用于调整物理卷、卷组和逻辑卷的大小。

LVM 技术极大地增强了存储管理的灵活性和可靠性,特别是在大型服务器和数据中心环境中,能够有效地应对不断变化的存储需求。

Ubuntu 安装之后扩容(所有场景)

ubuntu 在安装的过程中,默认使用一半的存储。

如何将剩下未使用的空间分配给根目录?

执行sudo lsblk查看磁盘信息,结果如下:

lennon@ubuntu-test:~$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.9M 1 loop /snap/core20/2105
loop1 7:1 0 87M 1 loop /snap/lxd/27037
loop2 7:2 0 40.4M 1 loop /snap/snapd/20671
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 30G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 15G 0 lvm /
sr0 11:0 1 2G 0 rom

此时可以清晰的看到, sda 盘有 32G,但是 ubuntu 的逻辑卷只有 15G,也就是说,磁盘有 32-2-15 = 15G 的空余。

查看sudo vgdisplay查看卷组的情况:

lennon@ubuntu-test:~$ sudo vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
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 <30.00 GiB
PE Size 4.00 MiB
Total PE 7679
Alloc PE / Size 3839 / <15.00 GiB
Free PE / Size 3840 / 15.00 GiB
VG UUID pPTLLW-iPz7-tLTe-6QqX-hV6I-goJp-Zw01Pz

其中 FREE PE 的大小为 15G,与上述计算的值相等。3840 表示块的个数。

执行sudo lvdisplay查看逻辑卷的信息:

lennon@ubuntu-test:~$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/ubuntu-vg/ubuntu-lv
LV Name ubuntu-lv
VG Name ubuntu-vg
LV UUID cG7Ih7-0ElR-YooV-arsS-xn3R-lA5X-QWEqCw
LV Write Access read/write
LV Creation host, time ubuntu-server, 2024-07-09 08:28:29 +0000
LV Status available
# open 1
LV Size <15.00 GiB
Current LE 3839
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

此时,卷组中有空闲空间,但是没有划分到逻辑卷中。所以逻辑卷的总大小只有 15G。

下面执行扩容语句,为逻辑卷ubuntu-lv扩容。

增加指定大小的空间

逻辑卷扩容

如果只想增加指定大小,例如 10G,则执行 :

sudo lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv

完整输出

lennon@ubuntu-test:~$ sudo lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from <15.00 GiB (3839 extents) to <25.00 GiB (6399 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.

在使用 lvextend 扩展逻辑卷后,你可能需要调整文件系统的大小以利用新增的空间。这通常通过使用与文件系统相关的工具来完成,例如:

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

完整输出

lennon@ubuntu-test:~$ 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 = 2, new_desc_blocks = 4
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 6552576 (4k) blocks long.

检验

执行sudo lvdisplay查看逻辑卷是否增加:

lennon@ubuntu-test:~$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/ubuntu-vg/ubuntu-lv
LV Name ubuntu-lv
VG Name ubuntu-vg
LV UUID cG7Ih7-0ElR-YooV-arsS-xn3R-lA5X-QWEqCw
LV Write Access read/write
LV Creation host, time ubuntu-server, 2024-07-09 08:28:29 +0000
LV Status available
# open 1
LV Size <25.00 GiB
Current LE 6399
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

这里,我们看到,逻辑卷的大小已经由原来的 15G 增加到 25G 了。

将剩余的空间全部用掉

逻辑卷扩容

如果想使用全部的剩余空间,则执行:

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

完整输出

lennon@ubuntu-test:~$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from <25.00 GiB (6399 extents) to <30.00 GiB (7679 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.

调整文件系统的大小以利用新增的空间

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

完整输出

lennon@ubuntu-test:~$ 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 = 4, new_desc_blocks = 4
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 7863296 (4k) blocks long.

检验

执行 sudo lvdisplay查看逻辑卷是否增加。

完整输出如下:

lennon@ubuntu-test:~$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/ubuntu-vg/ubuntu-lv
LV Name ubuntu-lv
VG Name ubuntu-vg
LV UUID cG7Ih7-0ElR-YooV-arsS-xn3R-lA5X-QWEqCw
LV Write Access read/write
LV Creation host, time ubuntu-server, 2024-07-09 08:28:29 +0000
LV Status available
# open 1
LV Size <30.00 GiB
Current LE 7679
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

此时,逻辑卷 ubuntu-lv 使用剩余的全部空间(5G),总大小增加至 30G。

虚拟机直接在现有磁盘上扩容(虚拟机场景)

操作如下。通过虚拟机的操作页面,将硬盘增加指定大小。

此时我们执行 sudo vgdisplay 查看卷组中是否增加或者有空余空间:

lennon@ubuntu-test:~$ sudo vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size <30.00 GiB
PE Size 4.00 MiB
Total PE 7679
Alloc PE / Size 7679 / <30.00 GiB
Free PE / Size 0 / 0
VG UUID pPTLLW-iPz7-tLTe-6QqX-hV6I-goJp-Zw01Pz

没有增加,那查看物理卷呢 sudo pvdisplay:

lennon@ubuntu-test:~$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sda3
VG Name ubuntu-vg
PV Size <30.00 GiB / not usable 0
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 7679
Free PE 0
Allocated PE 7679
PV UUID 30vdhk-FSG3-iXkO-vePe-ufxZ-agH2-UBq9JF

同样没有看到新增的 10G 空间,此时执行 sudo lsblk查看磁盘:

lennon@ubuntu-test:~$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.9M 1 loop /snap/core20/2105
loop1 7:1 0 87M 1 loop /snap/lxd/27037
loop2 7:2 0 40.4M 1 loop /snap/snapd/20671
sda 8:0 0 42G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 30G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 30G 0 lvm /
sr0 11:0 1 2G 0 rom

磁盘 sda 确实从 32G 增加到 42G ,但是物理卷所在的分区 sda3 仍然是 30G。

有两种方案可以实现物理卷的扩容操作:

  1. 删除原有分区,重新创建,通过pvresize实现扩容。
  2. 创建新的分区,并在分区上创建新的物理卷。

删除原有分区

注意:删除原有分区一定要保留签名,否则会导致系统崩溃。

删除原有分区,然后创建一个新的、使用全部剩余空间的新分区。

此时使用 fdisk删除 sda3 分区,并创建新的 sda3 ,创建时使用全部空间,并保留签名。

lennon@ubuntu-test:~$ 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 (67108863 != 88080383) will be corrected by write.
The backup GPT table is not on the end of the device. This problem 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): m Help: GPT
M enter protective/hybrid MBR Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition Misc
m print this menu
x extra functionality (experts only) Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file Save & Exit
w write table to disk and exit
q quit without saving changes Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table Command (m for help): d
Partition number (1-3, default 3): Partition 3 has been deleted. Command (m for help): n
Partition number (3-128, default 3):
First sector (4198400-88080350, default 4198400):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4198400-88080350, default 88080350): Created a new partition 3 of type 'Linux filesystem' and of size 40 GiB.
Partition #3 contains a LVM2_member signature. Do you want to remove the signature? [Y]es/[N]o: No Command (m for help): w The partition table has been altered.
Syncing disks.

其中:

  • m 查看菜单
  • d 删除分区,默认最后一个,即 3
  • n 创建一个新的分区,在现有的基础上加一,删除之后为 2,创建时默认为 3
  • 开始地址和结束地址选择默认即可。
  • 不删除签名。删除会导致系统崩溃。
  • w 将操作写入文件系统。否则丢弃操作(默认所有的操作在内存中进行)。

扩充物理卷,使用分区的全部空间

执行 sudo lsblk查看分区情况,此时 sda3 已经变成 40G 了。

lennon@ubuntu-test:~$ sudo lsblk
[sudo] password for lennon:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 40.4M 1 loop /snap/snapd/20671
loop1 7:1 0 87M 1 loop /snap/lxd/27037
loop2 7:2 0 63.9M 1 loop /snap/core20/2105
sda 8:0 0 42G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 40G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 30G 0 lvm /
sr0 11:0 1 2G 0 rom

查看物理卷 sudo pvdisplay,发现物理卷仍然没有空余空间。

lennon@ubuntu-test:~$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sda3
VG Name ubuntu-vg
PV Size <30.00 GiB / not usable 1.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 7679
Free PE 0
Allocated PE 7679
PV UUID 30vdhk-FSG3-iXkO-vePe-ufxZ-agH2-UBq9JF

执行 sudo pvresize /dev/sda3来扩容物理卷,执行结果如下:

lennon@ubuntu-test:~$ sudo pvresize /dev/sda3
Physical volume "/dev/sda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

此时查看物理卷的信息,发现已经存在空余空间了:

lennon@ubuntu-test:~$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sda3
VG Name ubuntu-vg
PV Size <40.00 GiB / not usable 16.50 KiB
Allocatable yes
PE Size 4.00 MiB
Total PE 10239
Free PE 2560
Allocated PE 7679
PV UUID 30vdhk-FSG3-iXkO-vePe-ufxZ-agH2-UBq9JF

因为卷组是由物理卷组成,所以不需要做任何操作。执行 sudo vgdisplay查看卷组信息;

lennon@ubuntu-test:~$ sudo vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
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 <40.00 GiB
PE Size 4.00 MiB
Total PE 10239
Alloc PE / Size 7679 / <30.00 GiB
Free PE / Size 2560 / 10.00 GiB
VG UUID pPTLLW-iPz7-tLTe-6QqX-hV6I-goJp-Zw01Pz

扩容逻辑卷

参考上述两种方案,扩容指定大小或全部剩余空间。

创建一个新的分区(推荐)

执行 sudo lsblk查看现有分区

lennon@ubuntu-test:~$ sudo lsblk
[sudo] password for lennon:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.9M 1 loop /snap/core20/2105
loop1 7:1 0 87M 1 loop /snap/lxd/27037
loop2 7:2 0 40.4M 1 loop /snap/snapd/20671
sda 8:0 0 42G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 30G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 30G 0 lvm /
sr0 11:0 1 2G 0 rom

我们在 sda 分区中创建新的分区 sda4,然后在 sda4 中创建一个物理卷。将物理卷添加到卷组 ubuntu-vg中。使得卷组中有新的空间,然后将这个空间扩充到逻辑卷 ubuntu-lv 中。

创建新的分区

执行 sudo fdisk /dev/sda来创建分区:

lennon@ubuntu-test:~$ 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 (67108863 != 88080383) will be corrected by write.
The backup GPT table is not on the end of the device. This problem 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): n
Partition number (4-128, default 4):
First sector (67106816-88080350, default 67106816):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (67106816-88080350, default 88080350): Created a new partition 4 of type 'Linux filesystem' and of size 10 GiB. Command (m for help): w
The partition table has been altered.
Syncing disks.

执行 sudo lsblk查看分区结果:

lennon@ubuntu-test:~$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.9M 1 loop /snap/core20/2105
loop1 7:1 0 87M 1 loop /snap/lxd/27037
loop2 7:2 0 40.4M 1 loop /snap/snapd/20671
sda 8:0 0 42G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
├─sda3 8:3 0 30G 0 part
│ └─ubuntu--vg-ubuntu--lv 253:0 0 30G 0 lvm /
└─sda4 8:4 0 10G 0 part
sr0 11:0 1 2G 0 rom

在分区上创建新的物理卷

物理卷(Physical Volume,PV)是 LVM(Logical Volume Manager)架构中的基础存储单元,它通常对应于一个磁盘分区或整个磁盘。在标准的 LVM 实现中,一个物理卷不能跨越多个分区,也就是说,每个物理卷应该是一个连续的、独立的存储区域,通常是一个单独的分区或磁盘。
然而,值得注意的是,虽然单个物理卷不能跨越多个分区,但一个卷组(Volume Group,VG)可以包含多个物理卷。这意味着你可以将多个磁盘分区或多个磁盘本身作为物理卷添加到同一个卷组中。这样一来,逻辑卷(Logical Volume,LV)就可以利用卷组中所有物理卷的总存储空间,从而实现了存储的聚合和管理。
因此,尽管单个物理卷不能跨越多个分区,但通过卷组的概念,LVM 允许逻辑卷利用多个分区或磁盘的组合空间。这提供了高灵活性,允许系统管理员根据需要分配和重新分配存储资源。

创建物理卷 sudo pvcreate /dev/sda4,执行结果如下:

lennon@ubuntu-test:~$ sudo pvcreate /dev/sda4
Physical volume "/dev/sda4" successfully created.

将物理卷添加到卷组中

将创建的物理卷添加到卷组 ubuntu-vg 中,sudo vgextend ubuntu-vg /dev/sda4

lennon@ubuntu-test:~$ sudo vgextend ubuntu-vg /dev/sda4
Volume group "ubuntu-vg" successfully extended

查看卷组,可以看到有 10G 的剩余空间,sudo vgdisplay

lennon@ubuntu-test:~$ sudo vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
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 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 7679 / <30.00 GiB
Free PE / Size 2559 / <10.00 GiB
VG UUID pPTLLW-iPz7-tLTe-6QqX-hV6I-goJp-Zw01Pz

扩容逻辑卷

参考上述两种方案,扩容指定大小或全部剩余空间。

添加新硬盘进行扩容(所有场景)

为虚拟机添加一块新的硬盘,等同于实体机加硬盘的操作

可以看到,此时虚拟机有两块硬盘。

此时执行 sudo lsblk查看磁盘情况:

lennon@ubuntu-test:~$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.9M 1 loop /snap/core20/2105
loop1 7:1 0 87M 1 loop /snap/lxd/27037
loop2 7:2 0 40.4M 1 loop /snap/snapd/20671
sda 8:0 0 42G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
├─sda3 8:3 0 30G 0 part
│ └─ubuntu--vg-ubuntu--lv 253:0 0 30G 0 lvm /
└─sda4 8:4 0 10G 0 part
sdb 8:16 0 32G 0 disk
sr0 11:0 1 2G 0 rom

我们可以看到,有两块硬盘,分别是

  • sda,容量为 42G;
  • sdb,容量为 32G;

此时,我们可以选择使用硬盘的一部分来扩容,也可以使用全部空间来扩容

使用全部空间

创建新的物理卷

如果我们想使用整个硬盘来扩容根目录。则可以直接执行 sudo pvcreate /dev/sdb

lennon@ubuntu-test:~$ sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.

查看结果,sudo pvs

lennon@ubuntu-test:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <30.00g 0
/dev/sda4 ubuntu-vg lvm2 a-- <10.00g <10.00g
/dev/sdb lvm2 --- 32.00g 32.00g

将物理卷添加到卷组中

将新创建的物理卷添加到卷组中 sudo vgextend ubuntu-vg /dev/sdb,执行结果如下:

lennon@ubuntu-test:~$ sudo vgextend ubuntu-vg /dev/sdb
Volume group "ubuntu-vg" successfully extended

此时查看 sudo pvs

lennon@ubuntu-test:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <30.00g 0
/dev/sda4 ubuntu-vg lvm2 a-- <10.00g <10.00g
/dev/sdb ubuntu-vg lvm2 a-- <32.00g <32.00g

扩容逻辑卷

参考上述两种方案,扩容指定大小或全部剩余空间。

使用一部分空间

创建分区

执行 sudo fdisk /dev/sdb为新的硬盘创建一个可用的分区,这里我将全部空间都给了 sdb1。

lennon@ubuntu-test:~$ sudo fdisk /dev/sdb

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. Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x4ac0e522. Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): Using default response p.
Partition number (1-4, default 1):
First sector (2048-67108863, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-67108863, default 67108863): Created a new partition 1 of type 'Linux' and of size 32 GiB. Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

在 fdisk 的上下文中,2048-67108863 是表示磁盘扇区的数量,而不是字节或其它常见的数据量度单位。每个扇区的标准大小是 512 字节。

如果需要预留部分空间,则使用下面简单写法

Partition number (1-4, default 1):
First sector (2048-67108863, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-67108863, default 67108863): +10G

这将创建一个大约 10GB 大小的分区,实际大小可能会稍微多一点,因为 fdisk 会自动调整以符合磁盘的对齐要求。

自行计算的公式为 扇区数 = 字节数 / 扇区大小。但是不推荐自行计算,因为计算的值没有考虑对齐需求。不能保证分区正确对齐。

执行 sudo lsblk查看分区情况

lennon@ubuntu-test:~$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.9M 1 loop /snap/core20/2105
loop1 7:1 0 87M 1 loop /snap/lxd/27037
loop2 7:2 0 40.4M 1 loop /snap/snapd/20671
sda 8:0 0 42G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
├─sda3 8:3 0 30G 0 part
│ └─ubuntu--vg-ubuntu--lv 253:0 0 30G 0 lvm /
└─sda4 8:4 0 10G 0 part
sdb 8:16 0 32G 0 disk
└─sdb1 8:17 0 32G 0 part
sr0 11:0 1 2G 0 rom

创建物理卷

使用 sudo pvcreate /dev/sdb1来创建一个物理卷

lennon@ubuntu-test:~$ sudo pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.

查看物理卷 sudo pvs

lennon@ubuntu-test:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <30.00g 0
/dev/sda4 ubuntu-vg lvm2 a-- <10.00g <10.00g
/dev/sdb1 lvm2 --- <32.00g <32.00g

将物理卷添加到卷组中

将物理卷添加到卷组中,sudo vgextend ubuntu-vg /dev/sdb1

lennon@ubuntu-test:~$ sudo vgextend ubuntu-vg /dev/sdb1
Volume group "ubuntu-vg" successfully extended

查看物理卷 sudo pvs

lennon@ubuntu-test:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <30.00g 0
/dev/sda4 ubuntu-vg lvm2 a-- <10.00g <10.00g
/dev/sdb1 ubuntu-vg lvm2 a-- <32.00g <32.00g

扩容逻辑卷

参考上述两种方案,扩容指定大小或全部剩余空间。

总结

无论是在虚拟机中增加了单个硬盘的大小、还是实体机中添加了新的硬盘。都可以基于扩展卷组的思路来完成 ubuntu 的扩容操作。

扩展卷组,有两种思路,一个是扩展卷组中物理卷的数量,一个是增加某个或某几个物理卷的大小。

而扩展物理卷,如果物理卷所在的分区有剩余,直接扩展。否则就需要新建分区并创建新的物理卷。虽然文中介绍了删除分区重新创建的方法,但是并不推荐。因为一旦出现误操作,悔之晚矣。

而且任何对于磁盘的操作,都需要慎之又慎。

如果有条件,尽量提前为机器创建快照或者备份。

一文掌握 Ubuntu 全场景扩容操作的更多相关文章

  1. 一文搞定全场景K3s离线安装

    作者简介 王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营.拥有6年的云计算领域经验,经历了OpenStack到Kubernetes的技术变革,无论底层操作系统Lin ...

  2. 乘风破浪,遇见华为鸿蒙智能终端系统(HarmonyOS 2),打造面向全场景的分布式操作系统

    什么是鸿蒙智能终端系统(HarmonyOS 2) HarmonyOS 是新一代的智能终端操作系统,为不同设备的智能化.互联与协同提供了统一的语言.带来简洁,流畅,连续,安全可靠的全场景交互体验. ht ...

  3. Kubernetes 弹性伸缩全场景解读(五) - 定时伸缩组件发布与开源

    作者| 阿里云容器技术专家刘中巍(莫源) 导读:Kubernetes弹性伸缩系列文章为读者一一解析了各个弹性伸缩组件的相关原理和用法.本篇文章中,阿里云容器技术专家莫源将为你带来定时伸缩组件  kub ...

  4. 昇思MindSpore全场景AI框架 1.6版本,更高的开发效率,更好地服务开发者

    摘要:本文带大家快速浏览昇思MindSpore全场景AI框架1.6版本的关键特性. 全新的昇思MindSpore全场景AI框架1.6版本已发布,此版本中昇思MindSpore全场景AI框架易用性不断改 ...

  5. LVM 认知与扩容操作

    继上次 "Linux系统如何迁移至LVM磁盘"反响不错,近三百的访问量吧.这次想续写点东西,主要讲的是"LVM认知和扩容操作".因为网上大多数不准确,可能作者也 ...

  6. Kubernetes 弹性伸缩全场景解读(二)- HPA 的原理与演进

    前言 在上一篇文章 Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局中,我们介绍了在 Kubernetes 在处理弹性伸缩时的设计理念以及相关组件的布局,在今天这篇文章中,会为大家 ...

  7. 最全的Java操作Redis的工具类,使用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!

    转载自:https://github.com/whvcse/RedisUtil 代码 ProtoStuffSerializerUtil.java import java.io.ByteArrayInp ...

  8. 一文了解Docker容器技术的操作

    一文了解Docker容器技术的操作 前言一.Docker是什么二.Docker的安装及测试Docker的安装Docker的Hello world测试三.Docker的常见操作镜像的基本操作容器的基本操 ...

  9. HDC 2021 | HMS Core 6.0:连接与通信论坛,为App打造全场景连接体验

    如何在弱网环境下让用户享受无中断沉浸体验? 如何在全场景互联中让多设备交互如丝般顺滑? 如何在无网区域让移动终端发出紧急求助信息? 连接无处不在,连接与体验息息相关!流畅的网络体验已成为应用开发的关键 ...

  10. VMware下ubuntu 20.04扩容/磁盘

    最近搞zabbix监控,发现搭建的监控server主机磁盘告警.提示/超过阈值80%. 有实在VMware软件下的虚拟机,首先我就是给虚机磁盘增加容量. 增加后发现没什么改变,看来还需要其他操作. 在 ...

随机推荐

  1. pytest自动化测试 - 我对测试用例超时处理的一点看法

    1 pytest自动化测试 - 我对测试用例超时处理的一点看法 1.1 背景   用例在执行过程中,可能由于网络等待,或者等待一些特殊的文件,而又由于一些异常,导致这些条件一直不能满足,用例卡死,这种 ...

  2. C#中对面向standard2.0、standard2.1的项目进行单元测试

    单元测试项目的目标框架 (TargetFramework或TargetFrameworks) 不能是standard2.0或standard2.1. 这是因为.NET Standard只是一个规范,它 ...

  3. postgresql使用for循环

    开发过程中经常需要制造一些测试数据,sqlserver等数据库都有循环执行语句的方式,postgresql也可以使用for循环插入数据 do $$ begin for tt in 1..99 loop ...

  4. 题解:洛谷P11557 [ROIR 2016 Day 2] 有趣数字

    题目传送门. 考虑数位 dp,也就是记忆化搜索,设置一个搜索函数 \(dfs\),有三个参数,一个是当前位数,表示搜到哪一位了,一个是从第一位到上一个位数是否全部顶上界,从第一位到上一位全部顶上界的意 ...

  5. VUE-CLI 创建VUE3项目

    前言 第一篇当然是如何安装vue3 安装步骤 第一步安装vue-cli npm install -g @vue/cli // vue --version 第二步创建项目 vue create hell ...

  6. 【由技及道】量子构建交响曲:Jenkinsfile流水线的十一维编程艺术【人工智障AI2077的开发日志008】

    摘要:当代码提交触发时空涟漪,当构建流水线穿越量子维度--欢迎来到自动化构建的终极形态.本文将揭示如何用Jenkinsfile编写量子构建乐章,让每次代码提交都成为跨维度交响乐的音符. 动机:构建系统 ...

  7. Go 1.20更新了那些内容

    PGO的引入 Go 1.20 发布了配置文件引导优化(PGO)的预览版,使编译器能够根据运行时配置文件信息,执行应用程序和工作负载的特定性优化.提供要构建的配置文件,使编译器能够将应用程序的速度提高大 ...

  8. 神经网络与模式识别课程报告-卷积神经网络(CNN)算法的应用

    ======================================================================================= 完整的神经网络与模式识别 ...

  9. Django实战项目-学习任务系统-查询列表分页显示

    接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了. 接着优化查询列表分页显示功能,有很多菜单功能都有查询列表显示页面情况,如果数据量多,不分页显示的话,页面展示效果就不太好. 本次 ...

  10. 裸金属架构之服务器安装VMWare ESXI虚拟化平台详细流程

    目录1. 裸金属架构(Vcent)2. Vcent安装流程2.1 远程控制端(个人电脑)安装VMware-viclien2.2 服务器部署安装VMWare ESXI2.3 VMware-viclien ...