Ubuntu 扩容 docker 目录挂载的逻辑卷

服务器将 /var/lib/docker 挂载到了一个卷上,方便对数据进行集中管理,某天发现该卷使用空间已达 100%,在使用了 docker image prune -a 清除无效镜像无果后,只能对其扩容。

本文将介绍如何将其它逻辑卷上的空间扩容到 docker 所在的卷上。

首先,使用 df -h 查看磁盘情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
➜  /home/uyoufu df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.6G 3.7M 1.6G 1% /run
efivarfs 128K 74K 50K 60% /sys/firmware/efi/efivars
/dev/mapper/ubuntu--vg-ubuntu--lv 231G 13G 206G 6% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 5.0M 12K 5.0M 1% /run/lock
/dev/nvme0n1p2 2.0G 286M 1.6G 16% /boot
/dev/nvme0n1p1 1.1G 6.2M 1.1G 1% /boot/efi
/dev/mapper/hdd--vg-lv--usr 492G 6.0G 461G 2% /srv
/dev/mapper/hdd--vg-lv--home 492G 285G 182G 61% /home
/dev/mapper/hdd--vg-lv--var 492G 488G 0 100% /var/lib/docker
tmpfs 1.6G 20K 1.6G 1% /run/user/1000

可以看到,机械硬盘卷 /dev/mapper/hdd--vg-lv--usr 上还有很多空间,因此,现在将 /dev/mapper/hdd--vg-lv--usr 中的空间移动部分到 /dev/mapper/hdd--vg-lv--var 上。

操作步骤如下:

  1. 停止服务

    1
    sudo systemctl stop docker

    若出现以下提示:

    1
    2
    Stopping 'docker.service', but its triggering units are still active:
    docker.socket

    需要同时停用 docker.socket,操作如下:

    1
    sudo systemctl stop docker docker.socket

    确保服务完全关闭

    1
    2
    sudo systemctl status docker docker.socket
    # 存在 Active: inactive (dead) since xxx 时表示已关闭
  2. 缩小 usr 文件系统

    1
    2
    3
    4
    sudo umount /srv  # 卸载卷
    sudo e2fsck -f /dev/mapper/hdd--vg-lv--usr # 检查文件系统
    sudo resize2fs /dev/mapper/hdd--vg-lv--usr 50G # 缩小文件系统到 50G(调整为实际需要)
    sudo mount /dev/mapper/hdd--vg-lv--usr /srv # 重新挂载
  3. 扩展 var 逻辑卷

    1
    sudo lvextend -l +100%FREE /dev/mapper/hdd--vg-lv--var  # 使用所有可用空间
  4. 扩展 var 文件系统

    1
    sudo resize2fs /dev/mapper/hdd--vg-lv--var  # 扩展到新大小
  5. 重新启动服务并验证

    1
    2
    3
    4
    5
    6
    7
    sudo systemctl start docker
    # 若有需要
    sudo systemctl start docker.socket
    # 检查状态
    sudo systemctl status docker docker.socket
    # 检查空间
    df -h