我正在尝试使用以下命令:
dd if=/dev/urandom of=/dev/sg11 bs=16K count=1
Run Code Online (Sandbox Code Playgroud)
但是在执行它时,我收到以下错误:
dd: writing `/dev/sg11': Function not implemented
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 时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 值。
ric*_*ici 11
/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 还包括sg_dd哪个版本dd可以理解低级 SCSI 协议。(但只有在您知道自己在做什么时才使用它!)