XFS寻址模拟

ops/2024/10/10 21:25:25/

XFS寻址

XFS 大部分时候都会用绝对地址,即包含AG信息和相对AG偏移量的信息,但有些时候会使用相对地址“相对AG的偏移量”

[root@ip-172-31-35-68 ~]# xfs_db -r /dev/nvme1n1
xfs_db> sb 0
xfs_db> p
magicnum = 0x58465342
blocksize = 4096
dblocks = 2621440
rblocks = 0
rextents = 0
uuid = 76cef79a-56f3-49ba-ada8-ed01d066ebe6
logstart = 2097158
rootino = 128
rbmino = 129
rsumino = 130
rextsize = 1
agblocks = 163840
agcount = 16
rbmblocks = 0
logblocks = 16384
versionnum = 0xb5b5
sectsize = 512
inodesize = 512
inopblock = 8
fname = "\000\000\000\000\000\000\000\000\000\000\000\000"
blocklog = 12
sectlog = 9
inodelog = 9
inopblog = 3
agblklog = 18
rextslog = 0
inprogress = 0
imax_pct = 25
icount = 64
ifree = 59
fdblocks = 2604952
frextents = 0
uquotino = null
gquotino = null
qflags = 0
flags = 0
shared_vn = 0
inoalignmt = 8
unit = 1
width = 1
dirblklog = 0
logsectlog = 0
logsectsize = 0
logsunit = 4096
features2 = 0x18a
bad_features2 = 0x18a
features_compat = 0
features_ro_compat = 0xd
features_incompat = 0xb
features_log_incompat = 0
crc = 0x1f3bb170 (correct)
spino_align = 4
pquotino = null
lsn = 0x100000130
meta_uuid = 00000000-0000-0000-0000-000000000000

XFS默认会支持64位地址,但是一般小于2T会折叠上32位,日志的起始为0x200006 agblklog = 18(sb_agblklog 是 XFS 文件系统的超级块 (superblock) 中的一个字段。它表示每个分配组(AG,Allocation Group)块数的对数

因此log 的block 会在 1000000000000000000110 / 2^18=8 的1000000000000000000110%2^18=3 偏移 ,即日志在AG7 的 第三个block开始

我们算出了逻辑偏移但还是需要计算物理偏移

 (AG number) * (blocks per AG) + (relative block offset)8		*     163840		+     3dd if=/dev/nvme1n1 bs=4096  skip=$((8*163840 + 3)) count=1 | hexdump -C

再来计算一个文件,通过文件查询BMAP来找到对应的bloc

首先查看/mnt/testxfs/hello的inode为133,内容是hello word
image-20240807031636304

[root@ip-172-31-35-68 ~]# xfs_db -r /dev/nvme1n1
xfs_db> inode 133
xfs_db> bmap
data offset 0 startblock 10 (0/10) count 1 flag 0
按照前面的方法计算物理偏移(AG number) * (blocks per AG) + (relative block offset)0		*     163840		+     10

然后通过dd将blockdd出来查看1047040image-20240807031530493

再来个复杂点的

[root@ip-172-31-35-68 log]# ll -i secure-20240721
8524693 -rw-r--r--. 1 root root 35006 Jul 20 17:07 secure-20240721xfs_db> inode 8524693
xfs_db> bmap
data offset 0 startblock 1072956 (1/24380) count 1 flag 0
data offset 1 startblock 1073378 (1/24802) count 1 flag 0
data offset 2 startblock 1073375 (1/24799) count 2 flag 0
data offset 4 startblock 1073420 (1/24844) count 1 flag 0
data offset 5 startblock 1073443 (1/24867) count 2 flag 0
data offset 7 startblock 1085579 (1/37003) count 1 flag 0
data offset 8 startblock 1085592 (1/37016) count 1 flag 0#提取part
dd if=/dev/nvme0n1p1 bs=4096  skip=$((1*1047040 + 24380)) count=1 of=part1
dd if=/dev/nvme0n1p1 bs=4096  skip=$((1*1047040 + 24802)) count=1 of=part2
dd if=/dev/nvme0n1p1 bs=4096  skip=$((1*1047040 + 24799)) count=2 of=part3
dd if=/dev/nvme0n1p1 bs=4096  skip=$((1*1047040 + 24844)) count=1 of=part4
dd if=/dev/nvme0n1p1 bs=4096  skip=$((1*1047040 + 24867)) count=2 of=part5
dd if=/dev/nvme0n1p1 bs=4096  skip=$((1*1047040 + 37003)) count=1 of=part6
dd if=/dev/nvme0n1p1 bs=4096  skip=$((1*1047040 + 37016)) count=1 of=part7#合并
cat part1 part2 part3 part4 part5 part6 part7 > complete_file
#对比只是多了合并时候的一个end of file 
[root@ip-172-31-35-68 test]# diff complete_file secure-20240721
306d305
<
\ No newline at end of file 

http://www.ppmy.cn/ops/90153.html

相关文章

PCL Chaikin曲线逼近型细分算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Chaikin 逼近型细分算法是一种生成平滑曲线的方法,常用于计算机图形学和曲线建模。它基于 Paul Chaikin 于 1974 年提出的算法,通过迭代地插入新的控制点并移动原始控制点来细分曲线,从而逐渐逼近光滑曲线。具体…

阶段项目——拼图小游戏

Java学习笔记&#xff08;新手纯小白向&#xff09; 第一章 JAVA基础概念 第二章 JAVA安装和环境配置 第三章 IntelliJ IDEA安装 第四章 运算符 第五章 运算符联系 第六章 判断与循环 第七章 判断与循环练习 第八章 循环高级综合 第九章 数组介绍及其内存图 第十章 数…

强软弱虚四大引用

强引用&#xff1a; 如果一个对象具有强引用&#xff0c;垃圾回收器不会回收该对象&#xff0c;当内存空间不足时&#xff0c;JVM 宁愿抛出 OutOfMemoryError异常。 // 强引用 User usernew User();//user就是强引用软引用&#xff1a; 如果一个对象只具有软引用&#xff0…

数据库的管理

1、官网下载或者wget tar -xvf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 2、确定mysql-community-server正常安装之后就可以开始配置 3、初始化mysqld 服务 mysqld initeialize 4、启动服务 systemctl start mysqld 5、添加开机启动列表 systecmctrl enable mysqld在/var…

数据库漫游记:表、视图、函数、存储过程及触发器之跨平台兼容性分析(上)

先言之 &#x1f31f;余撰此文&#xff0c;乃为导引初窥数据库之学人&#xff0c;俾其明了表、视图、函数、存储过程及触发器之义理&#xff0c;及其于诸般平台之上创建、修改与废弃之法式。盖初学之人&#xff0c;常陷于迷雾之中&#xff0c;难辨东西&#xff0c;故须详述而明…

sql注入复现(1-14关)

目录 第一关&#xff08;字符型注入&#xff09; 第二关&#xff08;数字型注入&#xff09; 第三关&#xff08;闭合方式不同&#xff09; 第四关&#xff08;用双引号闭合&#xff09; 第五关&#xff08;不会数据回显&#xff09; 第六关&#xff08;闭合方式不同双引…

vs2022 开发vue带后端

1)参考官方方法新建开始 refs: 使用 Vue 创建 ASP.NET Core 应用 - Visual Studio (Windows) | Microsoft Learn 2)对于已有的可以参考这个开始 refs: 解答网友提问 | 使用VS2022快速生成React/Angular/Vue.js Web API前后端集成项目-CSDN博客

麻雀搜索算法(SSA)与门控循环单元(GRU)结合的预测模型(SSA-GRU)的Python 和 MATLAB实现

以下是麻雀搜索算法&#xff08;Sparrow Search Algorithm, SSA&#xff09;与门控循环单元&#xff08;GRU, Gated Recurrent Unit&#xff09;结合的预测模型在 Python 和 MATLAB 中的实现示例。 ### Python 实现 #### 1. 安装必要的库 确保已经安装了 TensorFlow 和 NumPy: …