在 Ceph 中,我们可以对一个 Pool 的空间和文件数设置配额大小, 对 RBD image/volume 也可心进行在线调整大小, 十分方便.

Pool 配额设置

设置 Pool 的配额大小

  1. 设置空间大小

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # usage
    =======
    thumbnailImage: ceph.png
    coverImage:
    ---

    在 Ceph 中,我们可以对一个 Pool 的`空间大小`和`文件数`设置配额大小, 对 `RBD` 的 `image/volume` 也可心进行在线调整大小, 十分方便.
    <!--more-->
    ## Pool 配额设置
    ### 设置 Pool 的配额大小
    1. 设置`空间大小` 配额
    ```bash
    ## usage
    $ ceph osd pool set-quota {pool-name} max_bytes {bytes}
    ## e.g.
    $ ceph osd pool set-quota test-pool max_bytes $((100 * 1024 * 1024 * 1024))
  2. 设置 文件数 配额

    1
    2
    3
    4
    ## usage
    $ ceph osd pool set-quota {pool-name} max_objects {file_num}
    ## e.g.
    $ ceph osd pool set-quota test-pool max_objects 10000
  3. 两个配额可以同时设置, 既设置空间限制, 又设置文件数限制.

查寻 Pool 配额设置

1
2
3
4
## usage
$ ceph osd pool get-quota {pool-name}
## e.g.
$ ceph osd pool get-quota test-pool

取消 Pool 的配额

要取消一个 Pool 的配额, 只需要将相应的限制设为 0 即可.

1
2
3
4
5
## usage
$ ceph osd pool set-quota {pool-name} max_bytes|max_objects 0
## e.g.
$ ceph osd pool set-quota test-pool max_bytes 0
$ ceph osd pol set-quota test-pool max_objects 0

RBD 镜像在线调整大小

RBD 镜像调整大小很简单. 若是离线状态, 可以直接对其调整大小, 若是已经将其挂载到系统中, 则需要将其卸载, 调整后再挂载. 对于挂载到虚拟机上的可以通过 virsh 命令在线调整.

利用 libvirt 调整 rbd 镜像

在物理机上调整大小

  1. 获取当前镜像大小

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ## usage
    $ qemu-img info -f rbd "rbd:{pool-name}/{image-name}"
    ## e.g.
    $ qemu-img info -f rbd "rbd:volume/test-imgage"
    image: json:{"pool": "volumes", "image": "test-image", "driver": "rbd"}
    file format: rbd
    virtual size: 50G (53687091200 bytes)
    disk size: unavailable
    cluster_size: 4194304
  2. 将镜像大小调整到一个合适的大小, 一般只能调大, 否则很可能会损坏文件系统. 若要调小容量, 需要加上 --allow-shrink 选项.

    1
    2
    3
    ## e.g.
    $ qemu-img resize -f rbd "rbd:volumes/test-image" 30G --allow-shrink
    Image resized.
  3. 列出所有挂载的 镜像.

    1
    2
    3
    4
    ## usage
    $ virsh domblklist {domain-name}
    ## e.g.
    $ virsh domblklist rbd-test
  4. 调整 libvirt 块设备

    1
    2
    $ virsh blockresize --domain rbd-test --path vdb --size 60G
    $ virsh info volumes/test-block

在虚拟机上调整大小

  1. 重新挂载 rbd, 假定挂载到 /mnt/rbd/data:

    1
    $ sudo mount -o remount,rw /dev/vdb1
  2. 文件系统为 xfs:

    1
    $ xfs_growfs /mnt/rbd/data
  3. 文件系统为 ext3/ext4:

    1
    2
    3
    4
    $ e2fsck -fy /dev/vdb1
    $ resize2fs /dev/vdb1
    ## check rbd size
    $ df -h

利用内核模块调整 RBD 大小

在 内核版本在3.10+ 以上的系统上, 可以直接使用 rbdresize 功能:

  1. 获取 RBD 镜像当前大小:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ rbd info volumes/volume-a737fff5-6426-42ab-8873-4119bbecebbf
    rbd image 'volume-a737fff5-6426-42ab-8873-4119bbecebbf':
    size 60 GiB in 15360 objects
    order 22 (4 MiB objects)
    id: 2b4301cac20ca
    block_name_prefix: rbd_data.2b4301cac20ca
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    op_features:
    flags:
    create_timestamp: Tue Sep 18 09:00:49 2018
    parent: images/c18d8e1d-b4df-42ec-b06f-53bbe53187c1@snap
    overlap: 1.1 GiB
  2. 物理机调整 RBD 大小:

    1
    $ rbd resize volumes/volume-a737fff5-6426-42ab-8873-4119bbecebbf --size 80G
  3. 虚拟机调整 RBD 大小:

    1
    2
    3
    4
    5
    ### xfs
    $ xfs_growfs /dev/vdb1
    ### ext4
    $ e2fsck -fy /dev/vdb1
    $ resize2fs /dev/vdb1