Ansible:是否可以调整 ext4 文件系统的大小?

Ansible: is it possible to resize ext4 filesystem?

如何通过 Ansible 调整 ext4 文件系统的大小?我知道 filesystem 模块,但我没有看到“调整大小”参数或其他相关信息...

如果您查看 filesystem module 当前的源代码,您会发现似乎没有任何东西可以用来调整文件系统的大小。

幸运的是,您有以下选择:command module and the shell module

command 模块优于 shell 模块,因为它不受用户环境的影响,所以我将向您展示如何使用以下方法进行操作:

- name: "resize my ext4 filesystem, please"
  command: resize2fs /dev/sda1 
  sudo: True

其中 sda1 是您的文件系统。如果您需要首先扩大文件系统,请使用相同的方法,但改为调用 fdisk(使用正确的命令行开关)。

查看 man resize2fs 以获取该命令的特定选项和 ansible 文档以获取更多信息,包括参数化您的命令。

为了制作任务idempotent,添加另一个任务以首先检查是否有任何未扩展的分区。例如,如果您希望根分区至少为 10 GB:

  - name: Assert root partition is expanded
    assert: { that: item.mount != '/' or item.size_total > 10737418240 } # 10 GB
    with_items: '{{ ansible_mounts }}'
    ignore_errors: yes
    register: expanded

注意:如果分区 / 小于 10 GB,此任务将失败。

接下来,将扩展任务设为条件 expanded|failed:

  - name: Expand partition
    command: parted /dev/mmcblk0 resizepart 2 15.5GB # NOTE: Assumes 16GB card
    when: expanded|failed
    notify: Expand filesystem

就我而言,我正在块设备 /dev/mmcblk0 上扩展分区 2(对于 Raspberry Pi)。您当然应该替换为系统上的设备名称。

最后,notify触发文件系统扩展:

  handlers:
  - name: Expand filesystem
    command: resize2fs /dev/mmcblk0p2

不知道能不能帮上忙。但是,由于 Ansible 2.0filesystem 模块中有 resizefs 选项,默认情况下是 false 并且支持 ext4.

If yes, if the block device and filesystem size differ, grow the filesystem into the space. Supported for ext2, ext3, ext4, ext4dev, f2fs, lvm, xfs, vfat, swap filesystems.

https://docs.ansible.com/ansible/latest/modules/filesystem_module.html

- name: 'Extend the FS'
  filesystem:
    fstype: 'ext4'
    dev: '/dev/sda1'
    resizefs: yes