为 ubuntu 扩容,除了直接将磁盘挂载到某个目录之外,还有一种将空间扩容至根目录的方法。其本质就是扩容逻辑卷 ubuntu-lv
。
Ubuntu 分区概述
Ubuntu 系统的磁盘布局和使用情况通常包括几个关键部分,下面是一个典型的 Ubuntu 安装可能涉及的磁盘分区和卷结构概述:
主分区(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 技术极大地增强了存储管理的灵活性和可靠性,特别是在大型服务器和数据中心环境中,能够有效地应对不断变化的存储需求。
场景1:Ubuntu 安装之后扩容(所有场景)
ubuntu 在安装的过程中,默认使用一半的存储。
如何将剩下未使用的空间分配给根目录?
执行sudo lsblk
查看磁盘信息,结果如下:
lennon@ubuntu-test:~$ sudo lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSloop0 7:0 0 63.9M 1 loop /snap/core20/2105loop1 7:1 0 87M 1 loop /snap/lxd/27037loop2 7:2 0 40.4M 1 loop /snap/snapd/20671sda 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 扩展逻辑卷后,你可能需要调整文件系统的大小以利用新增的空间。这通常通过使用与文件系统相关的工具来完成,例如ext文件系统:
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
完整输出
lennon@ubuntu-test:~$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lvresize2fs 1.46.5 (30-Dec-2021)Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing requiredold_desc_blocks = 2, new_desc_blocks = 4The 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-lvresize2fs 1.46.5 (30-Dec-2021)Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing requiredold_desc_blocks = 4, new_desc_blocks = 4The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 7863296 (4k) blocks long.
也可直接添加 -r参数,一步完成
sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
检验
执行 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。
场景2:虚拟机直接在现有磁盘上扩容(虚拟机场景)
操作如下。通过虚拟机的操作页面,将硬盘增加指定大小。
此时我们执行 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 lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSloop0 7:0 0 63.9M 1 loop /snap/core20/2105loop1 7:1 0 87M 1 loop /snap/lxd/27037loop2 7:2 0 40.4M 1 loop /snap/snapd/20671sda 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。
有两种方案可以实现物理卷的扩容操作:
删除原有分区,重新创建,通过pvresize
实现扩容。创建新的分区,并在分区上创建新的物理卷。 方式1:删除原有分区(谨慎)
注意:删除原有分区一定要保留签名,否则会导致系统崩溃。删除原有分区,然后创建一个新的、使用全部剩余空间的新分区。
此时使用 fdisk
删除 sda3 分区,并创建新的 sda3 ,创建时使用全部空间,并保留签名。
lennon@ubuntu-test:~$ sudo fdisk /dev/sdaWelcome 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 swappartitions on this disk.Command (m for help): mHelp: 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 tableCommand (m for help): dPartition number (1-3, default 3): Partition 3 has been deleted.Command (m for help): nPartition 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: NoCommand (m for help): wThe partition table has been altered.Syncing disks.
其中:
m 查看菜单d 删除分区,默认最后一个,即 3n 创建一个新的分区,在现有的基础上加一,删除之后为 2,创建时默认为 3开始地址和结束地址选择默认即可。不删除签名。删除会导致系统崩溃。w 将操作写入文件系统。否则丢弃操作(默认所有的操作在内存中进行)。扩充物理卷,使用分区的全部空间
执行 sudo lsblk
查看分区情况,此时 sda3 已经变成 40G 了。
lennon@ubuntu-test:~$ sudo lsblk[sudo] password for lennon: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSloop0 7:0 0 40.4M 1 loop /snap/snapd/20671loop1 7:1 0 87M 1 loop /snap/lxd/27037loop2 7:2 0 63.9M 1 loop /snap/core20/2105sda 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
扩容逻辑卷
参考上述两种方案,扩容指定大小或全部剩余空间。
方式2:创建一个新的分区(推荐)
执行 sudo lsblk
查看现有分区
lennon@ubuntu-test:~$ sudo lsblk[sudo] password for lennon: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSloop0 7:0 0 63.9M 1 loop /snap/core20/2105loop1 7:1 0 87M 1 loop /snap/lxd/27037loop2 7:2 0 40.4M 1 loop /snap/snapd/20671sda 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/sdaWelcome 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 swappartitions on this disk.Command (m for help): nPartition 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): wThe partition table has been altered.Syncing disks.
执行 sudo lsblk
查看分区结果:
lennon@ubuntu-test:~$ sudo lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSloop0 7:0 0 63.9M 1 loop /snap/core20/2105loop1 7:1 0 87M 1 loop /snap/lxd/27037loop2 7:2 0 40.4M 1 loop /snap/snapd/20671sda 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
扩容逻辑卷
参考上述两种方案,扩容指定大小或全部剩余空间。
场景3:添加新硬盘进行扩容(所有场景)
为虚拟机添加一块新的硬盘,等同于实体机加硬盘的操作
可以看到,此时虚拟机有两块硬盘。
此时执行 sudo lsblk
查看磁盘情况:
lennon@ubuntu-test:~$ sudo lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSloop0 7:0 0 63.9M 1 loop /snap/core20/2105loop1 7:1 0 87M 1 loop /snap/lxd/27037loop2 7:2 0 40.4M 1 loop /snap/snapd/20671sda 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/sdbWelcome 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): nPartition 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): wThe 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 lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSloop0 7:0 0 63.9M 1 loop /snap/core20/2105loop1 7:1 0 87M 1 loop /snap/lxd/27037loop2 7:2 0 40.4M 1 loop /snap/snapd/20671sda 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 的扩容操作。
扩展卷组,有两种思路,一个是扩展卷组中物理卷的数量,一个是增加某个或某几个物理卷的大小。
而扩展物理卷,如果物理卷所在的分区有剩余,直接扩展。否则就需要新建分区并创建新的物理卷。虽然文中介绍了删除分区重新创建的方法,但是并不推荐。因为一旦出现误操作,悔之晚矣。
而且任何对于磁盘的操作,都需要慎之又慎。
如果有条件,尽量提前为机器创建快照或者备份。