sg_write_same(sg3_utils)和dd命令

时间:2019-01-28 05:10:07

标签: command scsi

我正在使用sg_write_same命令在特定的lba写入文件。然后,我正在用dd命令读取特定的块。我无法检索该文件。这是我遵循的步骤顺序。

a> sg_write_same --32 --lba=2468 --in=sg_modes.c /dev/sda
b> dd if=/dev/sda skip=2468 bs=512 of=file  count=10000.

但是我无法在of = file中检索文件sg_modes.c。 #请让我知道如何验证写入和读取。

1 个答案:

答案 0 :(得分:0)

除了其他参数之外,您至少还需要提供传输长度:

 sg_write_same --32 --lba=2468 --in=sg_modes.c --xferlen=512 /dev/sda

您可能还会发现您的设备不支持WRITE SAME(32)。如果看起来不起作用,请尝试使用--16或--10变体。

WRITE_SAME写入许多输入数据的副本。在上面的示例中,它仅写入第一个逻辑块的一个副本(512字节)。运行命令时有一个隐式(默认)--num=1。如果要写入整个文件,则必须指定--xferlen等于源文件的大小,然后除以512以获取--num的值。但是,它不可能被512整除,因此您需要做一些挠头工作。

通过示例,您可以从lba 2468开始写入文件的前512个字节的8个副本,如下所示:

 sg_write_same -v --32 --lba=2468 --num=8 --xferlen=512 --in=sg_modes.c /dev/sda

然后,当您在LBA 2468、2469、2470等处进行读取时,您应该能够观察到文件的开头。

但是,如果您的目的只是写一次文件,则可能只需要常规的旧SCSI WRITE(16)。