# Ubuntu 扩充服务器磁盘空间 > 透过此文件记录扩容过程。 > Written by [@xxrjun](https://github.com/xxrjun) - [Ubuntu 扩充服务器磁盘空间](#ubuntu-扩充服务器磁盘空间) - [前情提要](#前情提要) - [弄脏手](#弄脏手) - [总结步骤](#总结步骤) - [后记](#后记) - [参考资料(Referneces)](#参考资料referneces) ## 前情提要 一开始伺服器的磁碟空间有 30GB,今天(2023/03/17)不过是下载完 MetaMap 的压缩档就发现磁碟爆了(一开始分割的时候只有分配 14GB),虽然可以把剩下的 10GB 多可以分配过去,但是! 1. 我不会做扩充磁碟或是磁碟分割有的没的,所以想说可以顺便学 2. MetaMap 解压缩就 16G 了,之后还要装资料库的东西,所以现在不弄未来还是得弄!但修了 29 学分的我可不想拖任何事! 在铭祐扩大 vm disk 的容量之前,输入 `lsblk` 看一下磁碟分割的状况,总共有 30G,我们主要是使用 `sda3` 的区域,有 28G ```shell $ 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 一解压缩就会爆了。 ```shell $ 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](https://gist.github.com/xxrjun/863b9a9733b20da1905d8223b38770cd) vm disk 扩容后,输入 `lsblk` 查看,`sda` 从原本的 30G 变成 80G 了! ```shell $ 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` : 储存分割区并退出 ```shell 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` 重新启动即可生效(好像也可以透过重新挂载来生效) ```shell $ reboot ``` 接著我们需要使用 `pvresize` 指令调整 `/dev/sda3` 物理卷(Physical Volume) 大小。透过这个指令,LVM 会重新计算物理卷中可用的空间,并且能够使用及管理新增的空间。 ```shell $ pvresize /dev/sda3 1 physical volume(s) resized or updated / 0 physical volume(s) not resized ``` 使用 `pvdisplay` 确认一下,`/dev/sda3` 的 `PV Size` 确实增加 50GB 至 78GB 了。 ```shell $ 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-vg` 的 `VG Size` 确实变为 78GB ```shell $ 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 名称。 ```shell $ 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 大小后,磁盘上的文件系统大小并不会自动跟著扩展,所以必须透过这个指令来调整文件系统大小。 ```shell $ 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! ```shell $ 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](https://www.facebook.com/NCU.CILab/about)团队,也希望专题能够顺顺利利。 ## 参考资料(References) - https://askubuntu.com/questions/1215404/lvm-expansion-problem - http://webnas.bhes.ntpc.edu.tw/wordpress/wp-content/uploads/2019/06/虚拟机房Linux硬碟扩充教学.pdf - [Logical Volume Management in Linux](https://dextutor.com/logical-volume-management-in-linux/) - [[SOLVED] Resize Ubuntu VM disk](https://forum.proxmox.com/threads/resize-ubuntu-vm-disk.117810/) - [IBM Physical partitions](https://www.ibm.com/docs/en/aix/7.1?topic=concepts-physical-partitions)