dd 输出:尝试写入 /dev/sg11 时“功能未实现”

dd 输出:尝试写入 /dev/sg11 时“功能未实现”

我正在尝试使用以下命令:

dd if=/dev/urandom of=/dev/sg11 bs=16K count=1

但是当执行它时,我收到以下错误:

dd: writing `/dev/sg11': Function not implemented

当我尝试使用 时dd if=/dev/urandom of=/dev/sg11 bs=16K count=1 conv=fsync,我收到一个cannot allocate memory错误,Function not implemented当我增加 bs 大小时,它会变成一个错误。

是什么原因导致此问题以及如何解决它?

更新:有时它会告诉我cannot allocate memory,然后它会再次告诉我function not implemented对于相同的 bs 值。

答案1

/dev/sgxx是一种 SCSI 通用设备,允许发送和接收原始 SCSI 命令。当您写入设备时,您应该从 SCSI 标头开始写入,该标头定义了您想要执行的操作。

将随机数据写入sg设备确实是一个坏主意。您将发送随机 SCSI 命令,这些命令甚至可能不存在(因此function not implemented),并且为操作提供随机字节长度,这很可能导致cannot allocate memory. (如果你真的不走运,随机命令可能会做一些事情。)

根据您实际连接的设备/dev/sg11,您可能需要研究sg3_utils软件包,或者一些更具体的 SCSI 设备驱动程序,例如st(磁带驱动器)。

sg utils 附带的有用实用程序命令之一是sg_map,它可以让您知道 sg 设备对应的主设备是什么。在非古老的 ​​Linux 系统上,您还可以安装它lsscsi,它提供了一个很好的 SCSI 设备列表,同样包含 /dev/sg 设备和主设备。

sg3_utils 还包括了解低级 SCSI 协议sg_dd的版本。 dd(但只有当你知道自己在做什么时才使用它!)

相关内容