我正在尝试在
Linux下的LTO-4驱动器上设置加密密钥.我成功地做了一次,电源循环驱动器,现在我无法让驱动器再次接受密钥.
我使用的命令是这样的:
$stenc -f /dev/nst0 -a 1 -e on -k test.key Provided key length is 256 bits. Key checksum is 7a43. Turning on encryption on device '/dev/nst0'... Sense Code: Illegal Request (0x05) ASC: 0x26 ASCQ: 0x00 Additional data: 0x00000000000000000000000000000000 Error: Turning encryption on for '/dev/nst0' Failed! Usage: stenc --version | -g <length> -k <file> [-kd <description>] | -f <device> [--detail] [-e <on/mixed/rawread/off> [-k <file>] [-kd <description>] [-a <index>] [--protect | --unprotect] [--ckod] ] Type 'man stenc' for more information.
驱动器是HP所以我需要使用-a 1但是不同的值不会改变结果.使用/ dev / sg1会有相同的问题.
磁带是LTO-4,因此支持加密:
$mt-st -f /dev/nst0 status SCSI 2 tape drive: File number=0,block number=0,partition=0. Tape block size 0 bytes. Density code 0x46 (LTO-4). Soft error count since last status=0 General status bits on (41010000): BOT ONLINE IM_REP_EN
我跑了HP Tape&库工具并使用相同的磁带进行加密测试并通过,因此驱动器似乎能够设置密钥,而不是由于某种原因通过stenc程序.
我发现一个SCSI手册,说ASC 0x26是“参数列表中的无效字段”,这并没有真正解释.
有没有其他人看到此错误或有任何想法如何让驱动器接受密钥?
解决方法
像往常一样,数小时的故障排除意味着什么,但在公共论坛上发布问题会立即显示问题.
stenc 1.0.7中存在一个错误,如果在空白磁带上使用–detail,则会导致崩溃.我试图联系作者修复但无法抓住他.
似乎这次崩溃使驱动器处于不一致的状态,它拒绝接受更多的密钥.修复错误然后运行stenc –detail没有崩溃似乎已经解决了问题.我现在可以设置任意次数的任何键,并且没有其他问题.
如果其他人遇到同样的问题,在第176行的stenc-1.0.7 / sec / scsiencrypt.cpp中它表示删除状态;.您需要在此下方添加一个新行,其中读取status = NULL;.这修复了导致崩溃的双重错误.
--- a/src/scsiencrypt.cpp +++ b/src/scsiencrypt.cpp @@ -174,6 +174,7 @@ SSP_NBES* SSPGetNBES(string tapeDevice,bool retry){ if(status->nbes.encryptionStatus!=0x01)break; if(moves>=MAX_TAPE_READ_BLOCKS)break; delete status; + status=NULL; //double free bug fix if(!moveTape(tapeDevice,1,true))break; moves++; status=SSPGetNBES(tapeDevice,false);