Skip to content

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 分区工具。

bash
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):
  1. 输入“n”,按“Enter”,开始新建分区。

    bash
    Partition number (4-128, default 4):
  2. 以分区编号选择“4”为例,输入主分区编号“4”,按“Enter”。

    bash
    First sector (41940992-134217694, default 41940992):
  3. 输入新分区的起始磁柱编号,如设置默认值,按“Enter”。本步骤中使用默认起始磁柱编号为例。

    bash
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (41940992-134217694, default 134217694):
  4. 输入新分区的截止磁柱编号,按“Enter”。本步骤中使用默认截止磁柱编号为例。

    bash
    Created a new partition 4 of type 'Linux filesystem' and of size 44 GiB.
  5. 输入“p”,按“Enter”,查看新建分区。回显类似如下信息:

    bash
    Command (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 分区。

  6. 输入“w”,按“Enter”,将分区结果写入分区表中。

    如果之前分区操作有误,请输入“q”,则会退出fdisk分区工具,之前的分区结果将不会被保留。

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

    表示分区创建完成。

  7. 执行命令 partprobe,将新的分区表变更同步至操作系统。

扩容

接下来分为两种扩容方式:挂载到指定目录实现扩容,给挂载到根目录的逻辑卷扩容。

挂载到指定目录实现扩容

  1. 执行以下命令,设置新建分区文件系统格式。 以“ext4” 文件格式为例:

    bash
    mkfs -t ext4 /dev/sda4

    设置xfs文件系统的操作与ext3或者ext4一样,命令为:mkfs -t xfs /dev/vda2

    格式化需要等待一段时间,请观察系统运行状态,若回显中进程提示为done,则表示格式化完成。

  2. 执行以下命令,将新建分区挂载到需要增加空间的目录下,以“/opt”为例。

    bash
    mount /dev/vda2 /opt

    新增加的分区挂载到不为空的目录时,该目录下原本的子目录和文件会被隐藏,所以,新增的分区最好挂载到空目录或者新建目录。如确实要挂载到不为空的目录,可将该目录下的子目录和文件临时移动到其他目录下,新分区挂载成功后,再将子目录和文件移动回来。

  3. 执行以下命令,查看挂载结果。

    bash
    root@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系统为磁盘分区提供的唯一的标识字符串。

  1. 执行如下命令,查询磁盘分区的UUID。 blkid 磁盘分区 以查询磁盘分区 /dev/sda4 的UUID为例:

    bash
    blkid /dev/sda4

    回显类似如下信息:

    bash
    root@diyworld:~# blkid /dev/sda4
    /dev/sda4: PARTUUID="918dd8ab-8991-3545-b80a-608784543283"

    表示 /dev/sda4 的UUID。

  2. 执行以下命令,使用VI编辑器打开“fstab”文件。

    bash
    vi /etc/fstab

    按“i”,进入编辑模式。

    将光标移至文件末尾,按“Enter”,添加如下内容。

    bash
    UUID=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开始,系统会按照数字从小到大依次检查下去。
  3. 按“ESC”后,输入“:wq”,按“Enter”,保存设置并退出编辑器。

给挂载到根目录的逻辑卷扩容

  1. 创建 PV

    bash
    #pvcreate用于创建物理卷,可以使用磁盘直接创建物理卷,也可以使用磁盘分区创建物理卷
        root@diyworld:~# pvcreate /dev/sda4
        Physical volume "/dev/sda4" successfully created.
  2. 将新创建的PV加入VG中 通过lvs命令,得知根分区所属VG是 ubuntu-vg

    bash
    root@diyworld:~# lvs
    LV        VG        Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
    ubuntu-lv ubuntu-vg -wi-ao---- 10.00g
  3. PV加入VG

    bash
    root@diyworld:~# vgextend ubuntu-vg /dev/sda4
    Volume group "ubuntu-vg" successfully extended

    PV加入VG后,查看一下VG的可用容量在 52G 左右,先记以下。

    bash
    root@diyworld:~# vgs
    VG        #PV #LV #SN Attr   VSize   VFree  
    ubuntu-vg   2   1   0 wz--n- <62.22g <52.22g
  4. 扩容根分区 由于这里只有一个逻辑卷,如果有多个逻辑卷可以执行以下命令查看所挂载的目录

    bash
     root@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 命令查看。

    bash
    root@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.
  5. 更新逻辑卷信息

    bash
    root@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.
  6. 验证扩容后的容量

bash
    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

相关参考来源: 实战 | Linux根分区扩容Linux系统盘扩容后处理(fdisk)

Released under the MIT License.