在Linux系统中模拟一个硬盘

10
作为一个研究项目的一部分,我开发了一个基于FUSE的文件系统,现在需要研究硬盘接收到的实际读/写请求。为了做到这一点,我考虑在Linux中创建一个虚拟硬盘,以拦截正在生成的文件系统请求并记录它们。
是否有任何可用于互联网上的资源,可以帮助我编写模拟器和/或开发编写所需的技能集? 我目前正在阅读《Linux设备驱动程序3》书籍,以了解Linux如何管理块设备。
感谢任何帮助。
2个回答

3

嗯,有一种方法可以将映像文件挂载为分区:

mount -t <fs type> -o loop file.img /mnt

用您的文件系统类型替换,file.img 应该是所需分区的映像。

另一种方法是安装 VirtualBox,在虚拟机上安装 Linux,添加一个新的虚拟硬盘,然后从虚拟机内部使用所需的文件系统格式化虚拟硬盘并使用它。这种方法的优点是提供了一个安全的沙盒,以便在实验过程中不会意外损坏现有系统。


1
谢谢你的回答。但是那个解决方案并不能让我真正了解事件的细节。我想要能够跟踪从设备驱动程序发送的请求。我认为实现这一点的方法是编写一个块设备驱动程序,然后将请求路由到模拟器。然而,模拟器将在用户空间运行,而不是块设备驱动程序,在内核空间运行。我还需要一种机制来将请求从块设备驱动程序传输到模拟器。这就是我正在寻找编写模拟器文献的原因。 - Anand Suresh

3

看一下SCSI调试驱动程序。引用自该网站的说明:

scsi_debug适配器驱动程序模拟了可变数量的SCSI磁盘,每个磁盘共享由驱动程序分配的一定数量的RAM,以充当(易失性)存储器。

如果是我,我会启用该驱动程序中已经存在的调试日志记录功能,然后根据您的需求进行增强。


我阅读了你在帖子中提到的链接的文档。我不能使用它,因为我需要持久性,而scsi_debug模块使用的是内存解决方案。此外,我正在尝试避免干扰总线。我希望将控制权从块设备驱动程序(我将自己编写)传递给仿真器。我查看了CDemu,它具有相同的架构(尽管它确实有一个虚拟主机总线适配器模块),其中内核空间组件将控制权传递给在用户空间运行的守护程序。 - Anand Suresh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接