zfs 中有没有办法找出特定文件的块存储在哪里?我希望能够询问文件的所有块的位置,包括同上块。
(是的,我知道这是通常不会向用户公开的低级内容。)
(v0.6.0.56-rc8,ZFS 池版本 28,ZFS 文件系统版本 5,Ubuntu 11.10)
ZFS 使用 DVA(设备虚拟地址)偏移量 + 长度来物理存储数据。您可以使用 as 来获取相关数据zdb -bbb -vvv <dataset> -O <filename>
。您应该记住:
zdb
将它们以字节为单位转换zdb
以十六进制格式输出这些数字例如,在刚刚创建的(否则为空的)测试池上:
root@localhost:~# zpool status
pool: tank
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
/root/disks/disk1.img ONLINE 0 0 0
root@localhost:~# cp /etc/services /tank/
root@localhost:~# zdb -bbb -vvv tank -O services
...
Indirect blocks:
0 L0 DVA[0]=<0:10007000:4000> [L0 ZFS plain file]
# some math:
# 0x10007000 == 268464128 == 65543 4K blocks
# 65543 + 1024 4K blocks (header) == 66567 4K blocks
# our file starts at 4k offset 66567
# check with dd over the raw device (a backing file, in this test)
root@localhost:~# dd if=/root/disks/disk1.img bs=4k count=1 skip=66567 | head -3
1+0 records in
1+0 records out
4096 bytes (4.1 kB, 4.0 KiB) copied, 2.3434e-05 s, 175 MB/s
# Network services, Internet style
#
# Updated from https://www.iana.org/assignments/service-names-port-numbers...
Run Code Online (Sandbox Code Playgroud)
一些参考:
https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSDVAOffsetVdevDetails https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSDVAOffsetsInBytesII
您可以使用ls -i
查看初始 inode,之后我建议阅读发布的源代码以了解磁盘上的数据结构。完成后,我建议您编写自己的工具来读取原始设备并组装您感兴趣的所有块布局信息。有一个小型 ZFS API (libzfs) 项目,仅提供基本的 ZFS 配置例如列出、创建 zpool 等。
归档时间: |
|
查看次数: |
1004 次 |
最近记录: |