物理机操作系统使用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基本指令(中)!
linux·指令
Eternal-Student13 分钟前
预处理、编译、汇编、链接
linux·汇编·windows
sp_wxf1 小时前
Stream流
linux·服务器·windows
LYK_HAHA1 小时前
centos常用知识和命令
linux·运维·centos
PythonFun2 小时前
自建RustDesk服务器:详细步骤与操作指南
运维·服务器
Android技术栈2 小时前
鸿蒙开发(NEXT/API 12)【管理应用与Wear Engine服务的连接状态】手机侧应用开发
服务器·harmonyos·鸿蒙·鸿蒙系统·openharmony
可涵不会debug2 小时前
【Linux】信号知识三把斧——信号的产生、保存和处理
linux·运维·信号
笑的像个child2 小时前
使用树莓派搭建音乐服务器
服务器·树莓派·navidrome
facaixxx20242 小时前
京东云主机怎么用?使用京东云服务器建网站(图文教程)
运维·服务器·京东云
jyan_敬言2 小时前
【Linux】Linux命令与操作详解(一)文件管理(文件命令)、用户与用户组管理(创建、删除用户/组)
linux·运维·服务器·c语言·开发语言·汇编·c++