使用 Ansible 计算时使用的磁盘百分比 space 不正确
Incorrect used disk space percentage when calculated using Ansible
您能告诉我为什么使用 ansible 的已用驱动器(磁盘 space)的百分比显示为 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的,因为你在手动计算时也会遇到同样的问题。
要获得与 df 完全相同的百分比,您必须添加分区的保留块数。例如,您可以使用 tune2fs 获取此值。你的情况:
tune2fs -l /dev/mapper/ihs_vg_yt | grep 'Reserved block count'
然后如果你这样做 (block_used + reserved_block_count)*100 / block_total
你应该得到正确的值。
您能告诉我为什么使用 ansible 的已用驱动器(磁盘 space)的百分比显示为 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的,因为你在手动计算时也会遇到同样的问题。
要获得与 df 完全相同的百分比,您必须添加分区的保留块数。例如,您可以使用 tune2fs 获取此值。你的情况:
tune2fs -l /dev/mapper/ihs_vg_yt | grep 'Reserved block count'
然后如果你这样做 (block_used + reserved_block_count)*100 / block_total
你应该得到正确的值。