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

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

      • [**一 问题描述**](#一 问题描述)
      • [**二 问题排查**](#二 问题排查)
      • [**三 解决方法**](#三 解决方法)
          • [3.1 手动执行fstrim命令](#3.1 手动执行fstrim命令)
          • [3.2 查看fstrim服务及定时器](#3.2 查看fstrim服务及定时器)
          • [3.3 修改systemd timer定时器的时间间隔](#3.3 修改systemd timer定时器的时间间隔)
      • [**四 问题建议**](#四 问题建议)

一 问题描述

物理机中操作系统使用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,这意味着丢弃数据块后设备不保证读取操作会返回全零数据。

bash 复制代码
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命令
bash 复制代码
命令格式: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 。以下是修改时间间隔的步骤:

bash 复制代码
(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。默认周期是一周执行一次。

bash 复制代码
systemctl enable fstrim.timer
systemctl start fstrim.timer
相关推荐
矛取矛求2 小时前
Linux如何更优质调节系统性能
linux
内核程序员kevin3 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
Ztiddler5 小时前
【Linux Shell命令-不定期更新】
linux·运维·服务器·ssh
小小不董5 小时前
Oracle OCP认证考试考点详解082系列16
linux·运维·服务器·数据库·oracle·dba
IPdodo全球网络5 小时前
如何利用静态住宅IP优化Facebook商城的网络稳定性与运营效率
运维·服务器
a1denzzz5 小时前
Linux系统的网络设置
linux·服务器·网络
运维&陈同学6 小时前
【模块一】kubernetes容器编排进阶实战之k8s基础概念
运维·docker·云原生·容器·kubernetes·云计算
ac.char6 小时前
在CentOS下安装RabbitMQ
linux·centos·rabbitmq
m0_519523106 小时前
Linux——简单认识vim、gcc以及make/Makefile
linux·运维·vim