Skip to content

Instantly share code, notes, and snippets.

@PommesPeter
Forked from xxrjun/extend-lvm.md
Last active December 11, 2023 09:26
Show Gist options
  • Save PommesPeter/a09569b52e2c6c9a898f0776d79a2ac6 to your computer and use it in GitHub Desktop.
Save PommesPeter/a09569b52e2c6c9a898f0776d79a2ac6 to your computer and use it in GitHub Desktop.
了解LVM並於Ubuntu擴充伺服器磁碟空間

Ubuntu 扩充服务器磁盘空间

透过此文件记录扩容过程。 Written by @xxrjun

前情提要

一开始伺服器的磁碟空间有 30GB,今天(2023/03/17)不过是下载完 MetaMap 的压缩档就发现磁碟爆了(一开始分割的时候只有分配 14GB),虽然可以把剩下的 10GB 多可以分配过去,但是!

  1. 我不会做扩充磁碟或是磁碟分割有的没的,所以想说可以顺便学
  2. MetaMap 解压缩就 16G 了,之后还要装资料库的东西,所以现在不弄未来还是得弄!但修了 29 学分的我可不想拖任何事!

在铭祐扩大 vm disk 的容量之前,输入 lsblk 看一下磁碟分割的状况,总共有 30G,我们主要是使用 sda3 的区域,有 28G

$ lsblk
NAME                 MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                  7:0    0 116.8M  1 loop /snap/core/14784
loop1                  7:1    0  55.6M  1 loop /snap/core18/2708
loop2                  7:2    0  55.6M  1 loop /snap/core18/2714
loop3                  7:3    0  63.3M  1 loop /snap/core20/1828
loop4                  7:4    0    62M  1 loop /snap/core20/1587
loop5                  7:5    0 139.4M  1 loop /snap/docker/2746
loop6                  7:6    0   338M  1 loop /snap/google-cloud-sdk/324
loop7                  7:7    0 339.5M  1 loop /snap/google-cloud-sdk/326
loop8                  7:8    0  79.9M  1 loop /snap/lxd/22923
loop9                  7:9    0 111.9M  1 loop /snap/lxd/24322
loop10                 7:10   0  38.7M  1 loop /snap/postgresql10/47
loop11                 7:11   0  70.8M  1 loop /snap/powershell/229
loop12                 7:12   0  49.8M  1 loop /snap/snapd/18357
loop13                 7:13   0  70.8M  1 loop /snap/powershell/231
sda                    8:0    0    30G  0 disk
├─sda1                 8:1    0     1M  0 part
├─sda2                 8:2    0     2G  0 part /boot
└─sda3                 8:3    0    28G  0 part
  └─ubuntu--vg-ubuntu--lv

接著输入 df -hl 看一下档案系统的使用情况,我们主要档案是使用 /dev/mapper/ubuntu--vg-ubuntu--lv 的空间,只剩下 37MB 可以用了:anguished: ,势必得进行扩充,就算把 sda3 全部的空间分下去,MetaMap 一解压缩就会爆了。

$ df -hl
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              795M  1.1M  794M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   14G   13G   37M 100% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  130M  1.7G   8% /boot
tmpfs                              795M  4.0K  795M   1% /run/user/1000

跟铭祐说后我需要多一点空间后,铭祐二话不说马上帮我开到 80GB(真的非常感谢!),接著就是我要想办法完成扩充磁碟的环节了。

弄脏手

题外话: 一开始铭祐是多给我一颗 50GB 的 vm disk,正当我还在懊恼怎么动手时,铭祐发现可以让原本的 vm disk 直接扩充容量,应该是有让接下来的程序变得简单一点!

弄脏手前可以先大概了解一下 LVM: xxrjun/lvm-note.md

vm disk 扩容后,输入 lsblk 查看,sda 从原本的 30G 变成 80G 了!

$ lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0  55.6M  1 loop /snap/core18/2708
loop1                       7:1    0 116.8M  1 loop /snap/core/14784
loop2                       7:2    0  63.3M  1 loop /snap/core20/1828
loop3                       7:3    0    62M  1 loop /snap/core20/1587
loop4                       7:4    0 139.4M  1 loop /snap/docker/2746
loop5                       7:5    0  55.6M  1 loop /snap/core18/2714
loop6                       7:6    0   338M  1 loop /snap/google-cloud-sdk/324
loop7                       7:7    0 339.5M  1 loop /snap/google-cloud-sdk/326
loop8                       7:8    0  79.9M  1 loop /snap/lxd/22923
loop9                       7:9    0 111.9M  1 loop /snap/lxd/24322
loop10                      7:10   0  38.7M  1 loop /snap/postgresql10/47
loop11                      7:11   0  70.8M  1 loop /snap/powershell/229
loop12                      7:12   0  70.8M  1 loop /snap/powershell/231
loop13                      7:13   0  49.8M  1 loop /snap/snapd/18357
sda                         8:0    0    80G  0 disk
├─sda1                      8:1    0     1M  0 part
├─sda2                      8:2    0     2G  0 part /boot
└─sda3                      8:3    0    28G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0    14G  0 lvm  /

因为我没找到扩充现有分割区的方法,所以我选择将 sda3 删掉再新增一个拥有剩下全部空间的分割区。 输入 fdisk /dev/sda,并针对提示输入,以下是会用到的指令

  • n : 建立新分割槽
  • d : 删除原有分割槽
  • p : 检视分割区
  • w : 储存分割区并退出
Command (m for help): d
Partition number (1-3, default 3): 3

Partition 3 has been deleted.

Command (m for help): n
Partition number (3-128, default 3): 3
First sector (4198400-167772126, default 4198400):  // 这里按Enterr就好
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4198400-167772126, default 167772126):  // 这里按Enter就好

Created a new partition 3 of type ''Linux filesystem'' and of size 78 GiB.
Partition #3 contains a LVM2_member signature.

Do you want to remove the signature? [Y]es/[N]o: n  # 这行我不知道要干嘛,但看到 remove 怕出错就选择 No

Command (m for help): p

Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors
Disk model: QEMU HARDDISK
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: 98221D5A-EB1E-4412-8F70-4C9F40EF706A

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 167772126 163573727  78G Linux filesystem

Command (m for help): w
The partition table has been altered.
Syncing disks.

建立后需要输入 reboot 重新启动即可生效(好像也可以透过重新挂载来生效)

$ reboot

接著我们需要使用 pvresize 指令调整 /dev/sda3 物理卷(Physical Volume) 大小。透过这个指令,LVM 会重新计算物理卷中可用的空间,并且能够使用及管理新增的空间。

$ pvresize /dev/sda3
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

使用 pvdisplay 确认一下,/dev/sda3PV Size 确实增加 50GB 至 78GB 了。

$ pvdisplay
--- Physical volume ---
PV Name               /dev/sda3
VG Name               ubuntu-vg
PV Size               <78.00 GiB / not usable 16.50 KiB
Allocatable           yes
PE Size               4.00 MiB
Total PE              19967
Free PE               12800
Allocated PE          7167
PV UUID               g6WsDR-nJP3-YYYv-72b7-wRQB-51bs-G2Kj4A

pvresize 指令执行后,若是 dev/sda3 有多余的空间,会自动分配给其所属的 Volume Group,进而改变 VG Size,这边改变的很显然是ubuntu-vg,使用 vgdisplay 检查,ubuntu-vgVG Size 确实变为 78GB

$ vgdisplay
--- Volume group ---
VG Name               ubuntu-vg
System ID
Format                lvm2
Metadata Areas        1
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                1
Act PV                1
VG Size               <78.00 GiB
PE Size               4.00 MiB
Total PE              19967
Alloc PE / Size       19967 / <78.00 GiB
Free  PE / Size       0 / 0
VG UUID               xVsU8T-uO85-oDID-5809-pWVu-bGfH-2snBHs

接著使用 LVM 扩展 /dev/ubuntu-vg/ubuntu-lv 的 Logical Volume 大小,以便能够利用前面使用 pvresize 扩展的空间。

  • lvextend 为 LVM 指令,用于扩展 LV(Logical Volume) 的容量。
  • l +100%FREE 表示扩展大小为目前 VG 中所有可用空间的 100%。
  • /dev/ubuntu-vg/ubuntu-lv 为要扩展的 Logical Volume 名称。
$ lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from <28.00 GiB (7167 extents) to <78.00 GiB (19967 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.

最后使用 resize2fs 调整档案系统(Filesystem)可用大小,使其与 Logical Volume 的大小相符。因为在扩展 Logical Volume 大小后,磁盘上的文件系统大小并不会自动跟著扩展,所以必须透过这个指令来调整文件系统大小。

$ 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 = 10
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 20446208 (4k) blocks long.

Finally!

$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              795M  1.1M  794M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   77G   13G   61G  18% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  130M  1.7G   8% /boot
tmpfs                              795M  4.0K  795M   1% /run/user/1000

总结步骤

  1. 调整 (VM) Disk 大小
  2. 建立分割区 (sda3),并使用预设大小,也就是剩余的全部容量。
  3. 调整 sda3 Physical Volume 大小,进而影响 Volume Group 的大小
  4. 调整 Logical Volume 大小
  5. 调整 Filesystem 的大小

后记

下午弄了两个多小时才搞定,本来因为觉得很麻烦所以乾脆砍掉原本资料重装,但我把分割区 sda3 删掉重装后原本的资料居然还在,完全不知道为啥,希望不会有什么后遗症。第一次弄磁碟相关的东东,怕未来忘记所以打这篇记下。

非常感谢提供资源的铭祐以及整个Cloud Infrastructure Lab团队,也希望专题能够顺顺利利。

参考资料(References)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment