物理机操作系统使用df -h查看的磁盘实际使用情况和服务器BMC带外查看的信息不一致问题分析

物理机操作系统使用df -h查看的磁盘实际使用情况和服务器BMC带外查看的信息不一致问题分析

一 问题描述

物理机中操作系统使用df -h查看的磁盘实际使用情况和服务器BMC带外查看的信息不一致

操作系统:df -h查看20T磁盘实际使用了5T存储
BMC带外:查看20T磁盘实际使用了10T存储

二 问题排查

lsblk -D查看,sdx设备支持discard情况。
可以从DISC-GRAN(丢弃粒度)和DISC-MAX(最大丢弃请求大小)的值来确定,通过lsblk -D命令查看sdx设备支持discard 操作,这通常与SSDs 或支持 TRIM命令的存储设备相关。DISC-ZERO列的值为0,这意味着丢弃数据块后设备不保证读取操作会返回全零数据。

DISC-GRAN列显示为512B,意味着最小的丢弃单位是512B。
DISC-MAX 列显示为2G,意味着一次丢弃请求最多可以处理2G的数据。

操作系统默认支持使用WRITE SAME命令来发送UNMAP指令。在两个函数
sd_setup_write_same16_cmnd和sd_setup_write_same10_cmnd中都有所体现。
这两个函数都是设置WRITE SAME命令的,一个是16字节版本(WRITESAME 16),另一个是10字节版本(WRITE SAME 10)。它们的差别主要在于命令长度和地址及长度字段的大小。在这段代码中,如果unmap参数为true ,则设置cmd->cmnd[1]的
第三位(即0x8),这表示UNMAP标志被设置。这是SCSI命令协议中用来指示存储设备应该回收指定扇区的标志。WRITE SAME命令通常用于优化存储设备的写入性能,但当配合UNMAP标志使用时,它告诉存储设备可以释放这些扇区供重新使用。

三 解决方法

3.1 手动执行fstrim命令
命令格式:fstrim 挂载点

执行fstrim /data命令,操作系统端使用df -h查看,和BMC端查看,结果相同。可见系统在执行fstrim之后下发了unmap指令。只是说需要手动执行fstrim,才会下发。

3.2 查看fstrim服务及定时器

fstrim.service和fstrim.timer
fstrim.service:这是一个服务单元,它可以手动启动,用来立即执行fstrim命令。
fstrim.timer: 这是一个定时器单元,它定期触发fstrim.service 。
默认情况下,这个定时器通常是每周触发一次。这意味着每周系统会自动运行一次fstrim 命令来回收未使用的块。fstrim.service 是由fstrim.timer定期激活的,因此,您不需要并且通常也不应该直接启fstrim.service。相反,您应该启用和启动 fstrim.timer定时器,它将按照预设的时间表定期触发fstrim.service。

3.3 修改systemd timer定时器的时间间隔

要修改fstrim.timer的时间间隔,需要编辑定时器的配置文件。fstrim.timer定义了何时运行fstrim.service 。以下是修改时间间隔的步骤:

(1)查找定时器配置文件:
默认的fstrim.timer文件通常位于
/usr/lib/systemd/system/或/lib/systemd/system/目录中。如果您要自定义,建议将其复制到/etc/systemd/system/目录中,以覆盖默认配置。

(2)编辑定时器文件:
使用文本编辑器(如nano或vim) 编辑定时器文件。
cp /usr/lib/systemd/system/fstrim.timer /bak #备份fstrim.timer文件到/bak目录下
vim /etc/systemd/system/fstrim.timer

(3)修改OnCalendar行:
在文件中找到[Timer] 部分,并编辑OnCalendar行来设置您希望的时间间隔。例如,如果要每天运行,可以设置为:
[Timer]
OnCalendar=daily
或者,如果要更具体,可以使用更详细的时间规范,例如每周一上午8点:
[Timer]
OnCalendar=Mon *-*-* 08:00:00

(4)重新加载 systemd守护进程:
完成编辑后,重新加载systemd守护进程以确保它识别到更改:
systemctl daemon-reload

(5)重新启动定时器:
重新启动fstrim.timer以应用更改:
systemctl restart fstrim.timer

(6)检查定时器状态:
确认定时器的新时间表:
systemctl list-timers --all

修改fstrim.timer文件时,应避免改变任何其他的配置。另外,尽量不要直接修改/usr/lib/systemd/system/中的默认文件,因为它们可能会在系统升级时被覆盖。总是将自定义文件放在/etc/systemd/system/中。

四 问题建议

建议开启fstrim.timer,定期执行fstrim。默认周期是一周执行一次。

systemctl enable fstrim.timer
systemctl start fstrim.timer
  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值