vdbench工具进行测试时加上-v选项,可自动进行数据一致性校验,一般是写数据时在工具中备份写入的数据,再次写入时,先读出这块数据和工具中保存的数据进行对比,校验一致性通过后再写入。
1. file lba和sector lba
出现数据不一致问题时,工具日志中不仅会记录报错数据不一致的文件,还会记录file lba 和 sector lba,这两个参数是什么含义呢?
- file lba
- 文件内部的逻辑块地址,表示数据在文件内部的块偏移(相对于文件起始位置)
- 单位:由vdbench的xfersize参数决定
- 示例:
file lba=100
表示文件的第100个块,每个块的大小由xgersize定义
- sector lba
- 存储设备(如磁盘、SSD)的逻辑块地址,表示数据在存储设备商的逻辑块地址
- 单位:通常以512B大小的扇区为单位
- 示例:
sector lba=2048
表示设备上第2048个扇区,即2048 x 512B = 1MB
位置
2. 如何计算真实地址
定位数据不一致问题,需要通过逻辑地址计算出数据在盘上的真实地址,从而进一步再确定盘上是否出现了数据不一致。
真实地址的计算分为以下两个场景:
场景一:直接操作裸盘设备rd
若vdbench直接测试裸盘设备,则真实地址=sector lba。
例如,工具日志显示:
Data validation error: file=file1, file_lba=100, sector_lba=2048
则设备上的错误位置为2048号扇区,即2048 x 512B = 1MB
处。
场景二:操作文件系统fs
若vdbench测试的是文件系统上的文件,则需结合文件在设备上的位置和sector lba计算真实地址。
例如,工具日志显示:
Data validation error: file=file1, file_lba=100, sector_lba=2048
- 确定文件在设备上的起始扇区
假设文件系统块大小为4KB,则起始物理扇区为# 使用filefrag查看文件物理分布 filefrag -v file1 # 输出示例 Extents: startblock 逻辑块号 长度(块数) 2048 0 1024 # 文件起始物理块号为 2048(单位:文件系统块,通常 4KB)
2048 x (4096/512B) = 16384
扇区 - 计算文件内部的偏移量
- 将file lab转换为字节 :
file lba x xfersize
- 假设xfersize为4K,则文件内偏移为
100 x 4096 = 409600
字节
- 将file lab转换为字节 :
- 计算设备上的真实扇区地址
- 真实扇区地址 = 文件在设备上的起始扇区 + 文件内偏移对应的扇区数:
真实扇区地址 = 起始扇区 + (file_lba x xfersize) / 512
- 示例
# 起始扇区 = 16384 # file_lba=100, xfersize=4K 真实扇区地址 = 16384 + (100 x 4096) / 512 = 17184
- 真实扇区地址 = 文件在设备上的起始扇区 + 文件内偏移对应的扇区数:
- 对比sector lba
- 若计算出的真实扇区地址和日志中的sector lba一致,则说明错误位置正确映射;
- 若不一致,可能因为文件系统碎片、RAID条带化或缓存导致地址偏移
3. 验证盘上数据
可以通过dd和hexdump命令直接读取设备或文件的数据,手动验证一致性。
【Linux】dd和hexdump命令的使用-CSDN博客