0


Ubuntu磁盘扩容

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

场景1: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 扩展逻辑卷后,你可能需要调整文件系统的大小以利用新增的空间。这通常通过使用与文件系统相关的工具来完成,例如ext文件系统:

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.

也可直接添加 -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 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. 创建新的分区,并在分区上创建新的物理卷。

方式1:删除原有分区(谨慎)

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

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

此时使用

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
扩容逻辑卷

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

方式2:创建一个新的分区(推荐)

执行

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
扩容逻辑卷

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

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

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

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

此时执行

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 linux 运维

本文转载自: https://blog.csdn.net/qzlijian/article/details/141896999
版权归原作者 qzlijian 所有, 如有侵权,请联系我们删除。

“Ubuntu磁盘扩容”的评论:

还没有评论