Ubuntu 下的磁盘分区、挂载、根目录扩容
这里是基于 Ubuntu 22.04.1
,操作前一定要保存快照!
关于相关知识的解释 Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理。
我在 VMware 上安装 Ubuntu 忘记修改默认的硬盘大小,到后来不够用了,所以又增加了64G,并根据网上教程琢磨出了怎么对其扩容。
步骤都是亲身实践过,成功率应该不小。
我在网上找教程的时候,全是一大堆复制来复制去的垃圾文章,各种失败,最终根据不多的有用教程整理出了这篇文章。
分区
执行 df -h
查看系统存储空间使用情况
```bash
root@diyworld:~# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 390M 1.6M 388M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 9.8G 3.8G 5.5G 41% / #逻辑卷只有不到10G
tmpfs 2.0G 16K 2.0G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 1.8G 126M 1.5G 8% /boot
tmpfs 390M 4.0K 390M 1% /run/user/1000
```
在新增加磁盘后执行 fdisk -l
```bash
root@diyworld:~# fdisk -l
GPT PMBR size mismatch (41943039 != 134217727) will be corrected by write.
Disk /dev/sda: 64 GiB, 68719476736 bytes, 134217728 sectors
Disk model: VMware Virtual S
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: D3C7888D-E2AE-44A9-A5AC-44D49372AF1C
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 3719167 3715072 1.8G Linux filesystem
/dev/sda3 3719168 41940991 38221824 18.2G Linux filesystem
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
```
可以看到新加的 Disk /dev/sda: 64 GiB 以及下面的分区 /dev/sda1
/dev/sda2
/dev/sda3
,但这几个分区加起来明显不够 64GB,所以需要添加分区。
进入 fdisk
分区工具。
root@diyworld:~# 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 (41943039 != 134217727) 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”,按“Enter”,开始新建分区。
bashPartition number (4-128, default 4):
以分区编号选择“4”为例,输入主分区编号“4”,按“Enter”。
bashFirst sector (41940992-134217694, default 41940992):
输入新分区的起始磁柱编号,如设置默认值,按“Enter”。本步骤中使用默认起始磁柱编号为例。
bashLast sector, +/-sectors or +/-size{K,M,G,T,P} (41940992-134217694, default 134217694):
输入新分区的截止磁柱编号,按“Enter”。本步骤中使用默认截止磁柱编号为例。
bashCreated a new partition 4 of type 'Linux filesystem' and of size 44 GiB.
输入“p”,按“Enter”,查看新建分区。回显类似如下信息:
bashCommand (m for help): p Disk /dev/sda: 64 GiB, 68719476736 bytes, 134217728 sectors Disk model: VMware Virtual S 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: D3C7888D-E2AE-44A9-A5AC-44D49372AF1C Device Start End Sectors Size Type /dev/sda1 2048 4095 2048 1M BIOS boot /dev/sda2 4096 3719167 3715072 1.8G Linux filesystem /dev/sda3 3719168 41940991 38221824 18.2G Linux filesystem /dev/sda4 41940992 134217694 92276703 44G Linux filesystem
可以看到新的
/dev/sda4
分区。输入“w”,按“Enter”,将分区结果写入分区表中。
如果之前分区操作有误,请输入“q”,则会退出fdisk分区工具,之前的分区结果将不会被保留。
bashCommand (m for help): w The partition table has been altered. Syncing disks.
表示分区创建完成。
执行命令
partprobe
,将新的分区表变更同步至操作系统。
扩容
接下来分为两种扩容方式:挂载到指定目录实现扩容,给挂载到根目录的逻辑卷扩容。
挂载到指定目录实现扩容
执行以下命令,设置新建分区文件系统格式。 以“ext4” 文件格式为例:
bashmkfs -t ext4 /dev/sda4
设置xfs文件系统的操作与ext3或者ext4一样,命令为:mkfs -t xfs /dev/vda2
格式化需要等待一段时间,请观察系统运行状态,若回显中进程提示为done,则表示格式化完成。
执行以下命令,将新建分区挂载到需要增加空间的目录下,以“/opt”为例。
bashmount /dev/vda2 /opt
新增加的分区挂载到不为空的目录时,该目录下原本的子目录和文件会被隐藏,所以,新增的分区最好挂载到空目录或者新建目录。如确实要挂载到不为空的目录,可将该目录下的子目录和文件临时移动到其他目录下,新分区挂载成功后,再将子目录和文件移动回来。
执行以下命令,查看挂载结果。
bashroot@diyworld:~# df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 43G 2.0G 39G 5% / devtmpfs devtmpfs 509M 0 509M 0% /dev tmpfs tmpfs 520M 0 520M 0% /dev/shm tmpfs tmpfs 520M 7.2M 513M 2% /run tmpfs tmpfs 520M 0 520M 0% /sys/fs/cgroup tmpfs tmpfs 104M 0 104M 0% /run/user/0 /dev/vda2 ext4 43G 51M 40G 1% /opt
设置开机自动挂载磁盘
推荐使用UUID来配置自动挂载数据盘,磁盘的UUID(universally unique identifier)是Linux系统为磁盘分区提供的唯一的标识字符串。
执行如下命令,查询磁盘分区的UUID。
blkid 磁盘分区
以查询磁盘分区/dev/sda4
的UUID为例:bashblkid /dev/sda4
回显类似如下信息:
bashroot@diyworld:~# blkid /dev/sda4 /dev/sda4: PARTUUID="918dd8ab-8991-3545-b80a-608784543283"
表示
/dev/sda4
的UUID。执行以下命令,使用VI编辑器打开“fstab”文件。
bashvi /etc/fstab
按“i”,进入编辑模式。
将光标移至文件末尾,按“Enter”,添加如下内容。
bashUUID=918dd8ab-8991-3545-b80a-608784543283 /opt ext4 defaults 0 2
以内容上仅为示例,具体请以实际情况为准,参数说明如下:
- 第一列为UUID,此处填写查询到的磁盘分区的UUID。
- 第二列为磁盘分区的挂载目录,可以通过
df -TH
命令查询。 - 第三列为磁盘分区的文件系统格式, 可以通过
df -TH
命令查询。 - 第四列为磁盘分区的挂载选项,此处通常设置为defaults即可。
- 第五列为Linux dump备份选项。
- 0表示不使用Linux dump备份。现在通常不使用dump备份,此处设置为0即可。
- 1表示使用Linux dump备份。
- 第六列为fsck选项,即开机时是否使用fsck检查磁盘。
- 0表示不检验。
- 挂载点为(/)根目录的分区,此处必须填写1。 根分区设置为1,其他分区只能从2开始,系统会按照数字从小到大依次检查下去。
按“ESC”后,输入“:wq”,按“Enter”,保存设置并退出编辑器。
给挂载到根目录的逻辑卷扩容
创建 PV
bash#pvcreate用于创建物理卷,可以使用磁盘直接创建物理卷,也可以使用磁盘分区创建物理卷 root@diyworld:~# pvcreate /dev/sda4 Physical volume "/dev/sda4" successfully created.
将新创建的PV加入VG中 通过lvs命令,得知根分区所属VG是
ubuntu-vg
bashroot@diyworld:~# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert ubuntu-lv ubuntu-vg -wi-ao---- 10.00g
PV加入VG
bashroot@diyworld:~# vgextend ubuntu-vg /dev/sda4 Volume group "ubuntu-vg" successfully extended
PV加入VG后,查看一下VG的可用容量在 52G 左右,先记以下。
bashroot@diyworld:~# vgs VG #PV #LV #SN Attr VSize VFree ubuntu-vg 2 1 0 wz--n- <62.22g <52.22g
扩容根分区 由于这里只有一个逻辑卷,如果有多个逻辑卷可以执行以下命令查看所挂载的目录
bashroot@diyworld:~# cat /etc/fstab | grep ubuntu-vg # / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
可以看到
ubuntu-vg
挂载到了/
根目录,那接下来就是对它扩容。语法格式 : lvextend [参数] 逻辑卷
常用参数: -L 指定逻辑卷的大小(容量单位) -l 指定逻辑卷的大小(PE个数)
这里的
+52G
就是前面让记一下的数,不能超过VFree
的大小。逻辑卷地址可以用
lvscan
命令查看。bashroot@diyworld:~# lvextend -L +52G /dev/ubuntu-vg/ubuntu-lv Size of logical volume ubuntu-vg/ubuntu-lv changed from 10.00 GiB (2560 extents) to 62.00 GiB (15872 extents). Logical volume ubuntu-vg/ubuntu-lv successfully resized.
更新逻辑卷信息
bashroot@diyworld:~# 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 = 8 The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 16252928 (4k) blocks long.
验证扩容后的容量
root@diyworld:~# df -Th
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 390M 1.6M 388M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 61G 4.5G 54G 8% /
tmpfs tmpfs 2.0G 16K 2.0G 1% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 ext4 1.8G 245M 1.4G 15% /boot
tmpfs tmpfs 390M 4.0K 390M 1% /run/user/1000