我正在尝试使用以下命令:
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
(但只有当你知道自己在做什么时才使用它!)