【问题标题】:Incorrect used disk space percentage when calculated using Ansible使用 Ansible 计算时使用的磁盘空间百分比不正确
【发布时间】:2020-03-26 01:30:45
【问题描述】:

您能否告诉我为什么使用 ansible 时已用驱动器(磁盘空间)的百分比显示为 28.5%,而 df -k 显示在远程 Linux 主机上仅使用了 19%?

这是我的剧本代码:

- name: Generate JSON data
  set_fact:
    "{{ ansible_host }}_{{ item.mount }}: {{ (100 * ((item.size_total - item.size_available) / item.size_available)) | round(1, 'common') }}"
  when: item.mount == '/ihs'
  with_items: '{{ ansible_mounts }}'

我的剧本运行的输出:

ok: [myhostone] => (item={u'block_used': 2857014, u'uuid': u'3fa1ec29-aca5-476b-8041-6a7bc6b1efc2', u'size_total': 52701921280, u'block_total': 12866680, u'mount': u'/ihs', u'block_available': 10009666, u'size_available': 40999591936, u'fstype': u'ext4', u'inode_total': 3276800, u'inode_available': 3264353, u'device': u'/dev/mapper/ihs_vg_yt', u'inode_used': 12447, u'block_size': 4096, u'options': u'rw,seclabel,relatime,stripe=256,data=ordered'}) => {
    "ansible_facts": {
        "_raw_params": "myhostone_/ihs: 28.5"
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": {
        "block_available": 10009666,
        "block_size": 4096,
        "block_total": 12866680,
        "block_used": 2857014,
        "device": "/dev/mapper/ihs_vg_yt",
        "fstype": "ext4",
        "inode_available": 3264353,
        "inode_total": 3276800,
        "inode_used": 12447,
        "mount": "/ihs",
        "options": "rw,seclabel,relatime,stripe=256,data=ordered",
        "size_available": 40999591936,
        "size_total": 52701921280,
        "uuid": "3fa1ec29-aca5-476b-8041-6a7bc6b1efc2"

这是来自目标服务器的 df -k 的输出:

# df -k
Filesystem                     1K-blocks    Used Available Use% Mounted on
devtmpfs                         1905280       0   1905280   0% /dev
tmpfs                            1922024       0   1922024   0% /dev/shm
/dev/sda1                        1942528  295616   1646912  16% /boot
/dev/mapper/OMT-home           15718400  832120  14886280   6% /home
/dev/mapper/OMT-tmp             6133760   33160   6100600   1% /tmp
/dev/mapper/OMT-opt            10475520 4658356   5817164  45% /opt
/dev/mapper/OMT-var            16734208 8803440   7930768  53% /var
/dev/loop0                       3704296 3704296         0 100% /mnt/media
/dev/mapper/ihs_vg_yt          51466720 8790352  40038956  19% /ihs
tmpfs                             384408       0    384408   0% /run/user/0

你能告诉我为什么用 ansible 显示已用磁盘的百分比为 28.5%,而 df -k 显示只有 19% 已用?

如果我尝试除以 item.size_total 而不是 item.size_available

  set_fact:
    "{{ ansible_host }}_{{ item.mount }}: {{ (100 * ((item.size_total - item.size_available) / item.size_available)) | round(1, 'common') }}"

我得到 22.2 % 作为输出,但仍然与 19% 不同。你能解释一下为什么数字不同吗?

【问题讨论】:

    标签: ansible mount diskspace linux-disk-free


    【解决方案1】:

    这个问题实际上与 ansible 无关,因为手动计算也会遇到同样的问题。

    要获得与 df 完全相同的百分比,您必须添加分区的保留块计数。例如,您可以使用 tune2fs 获取此值。在你的情况下:

    tune2fs -l /dev/mapper/ihs_vg_yt | grep 'Reserved block count'
    

    那么如果你做(block_used + reserved_block_count)*100 / block_total,你应该得到正确的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多