使用DD命令

时间:2016-12-19 12:56:42

标签: linux-device-driver dd scsi sata



我正在为基于FPGA的嵌入式系统开发低级SATA驱动程序。司机运行正常。

当我使用dd命令从磁盘读取扇区时,我可以看到SCSI读取(10)命令(操作码0x28)由我的低级驱动程序接收,我认为是正确的。但是,当我使用dd命令将扇区写入磁盘时,SCSI驱动程序会多次发送第一个read(10)命令(操作码0x28),然后发送几个write(10)命令(操作码0x2A)。

有人可以解释一下,为什么SCSI驱动程序在写操作期间发送read()命令?

编辑:在文件写入操作期间,我可以看到驱动程序首先从LBA 0读取(DMA模式)到大约8个扇区。然后它写入(DMA)sg块,然后读取(PIO)磁盘特定信息。之后需要一些随机LBA并执行多次读取(DMA),最后通过读取设备特定数据读取(PIO)来停止。这是dd&1; 1KB文件的序列。磁盘没有分区表,也没有文件系统(从fdisk实用程序验证)。 这是司机的正常行为吗?如果是,那么它是不是降低了运行速度?由于写入操作中的额外读取,整体文件读取比写入更快。

谢谢

1 个答案:

答案 0 :(得分:1)

如果不了解您的系统,很难具体说。我想到了两种可能性:

  1. Linux正在寻找分区表。如果读取到LBA 0和前几个逻辑块,或者读取到设备的最末端,那么可能就是这种情况,其中有一个辅助GPT头。

  2. 您正在使用文件系统上的文件,文件系统正在读取未缓存的元数据。