LUN的LBA如何映射到iSCSI file-based target的镜像文件

How does LBA of LUN mapped to image file of iSCSI file-based target

我通过 dd 文件创建了一个基于文件的目标并映射到 iSCSI 目标。 这是通过 here

中的示例完成的
dd if=/dev/zero of=/root/os.img bs=1G count=10
Target iqn.2010-06.ServerName:desc
Lun 0 Path=/root/os.img,Type=fileio

我可以从 wireshark 看到 windows(iSCSI 启动器)和 iSCSI 目标之间的包。

我的问题是 iSCSI 发起程序尝试访问的地址 (LBA) 是如何映射到映像文件 (os.img) 的? LUN中会有元数据吗?

没有额外的元数据。当您访问启动器上的逻辑块地址 (LBA) 0 时,您正在访问您创建的 10G 文件中的偏移量 0。当您将 10MiB 处的 LBA 访问到 LUN 时,您将访问偏移量 10MiB 处的块到 os.img。块是 512 字节。

要使用 LUN,您可能需要使用文件系统对其进行格式化。文件系统包含元数据,例如文件名、属性以及映射到它们的块。

如果您正在考虑 LUN 本身的自动精简配置元数据,您有一些迂回的方式,因为您的 LUN 作为文件 (os.img) 存储在文件系统上(任何包含 /root).文件系统跟踪文件中分配了哪些块。但是,由于您是使用 dd 创建它的,因此您已经分配了它的所有块。您可以通过像这样为 lun 创建一个稀疏文件来避免这种情况:

truncate -s 10G os.img

(礼貌 Quickly create a large file on a Linux system?

但是,除了这两个切线相关的示例之外,没有元数据。