我正在尝试在 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&Library Tools,并使用同一盘磁带进行了加密测试,并且通过了测试,因此驱动器似乎能够设置密钥,但stenc
由于某种原因无法通过程序设置。
我找到了一本 SCSI 手册,上面说 ASC 0x26 是“参数列表中的无效字段”,但这并没有真正解释太多。
有没有其他人见过这个错误或者知道如何让驱动器接受密钥?
答案1
像往常一样,几个小时的故障排除毫无意义,但在公共论坛上发布问题可以立即发现问题。
stenc 1.0.7 中有一个错误,如果--detail
在空白磁带上使用会导致崩溃。我曾尝试联系作者并寻求解决方案,但没能联系到他。
看来这次崩溃导致驱动器处于不一致状态,拒绝接受其他密钥。修复错误然后运行而stenc --detail
不会崩溃似乎已经解决了问题。我现在可以多次设置任何密钥,并且没有出现其他问题。
如果其他人遇到同样的问题,在stenc-1.0.7/sec/scsiencrypt.cpp
第 176 行中显示delete status;
。您需要在此行正下方添加一个新行,内容为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);
答案2
从 CentOS 7.3 或 7.4(7.2 有效)开始,我遇到了另一个在尝试启用加密时随机出现的非法请求错误。
我发现 SCSI 命令中的一些保留位未正确初始化。设置时#define DEBUGSCSI
可以看到这些位在每次调用时都不同。
添加以下内容memset()
来scsiencrypt.cpp
修复它:
SCSIWriteEncryptOptions():
...
SSP_KAD kad;
=> memset(&kad,0,sizeof(kad));
kad.type=0x00;
答案3
我花了一天时间调试为什么当我们使用完全修补的stenc
1.0.7 版本配置加密时,我们的 Quantum LTO7 HH 驱动器不断出现 Sense 错误,而不管上传时使用什么选项。
最后,我们发现,在我们的案例中,这是因为我们在生成密钥时设置了密钥描述符——使用 生成密钥stenc -g 256 -k test.key -kd TESTKEY
然后使用 上传密钥stenc -f /dev/nst0 -e on -k test.key -a 1
会失败,而stenc -g 256 -k test.key
使用相同命令上传则会成功。希望这对大家有所帮助!
答案4
我stenc
通过更新固件解决了 IBM SCSI LTO-4 驱动器上略有不同的错误。看来工厂固件根本不支持加密。
我的错误是:
Status for /dev/nst0
--------------------------------------------------
Device Mfg: IBM
Product ID: ULTRIUM-TD4
Product Revision: 74H6
Sense Code: Illegal Request (0x05)
ASC: 0x24
ASCQ: 0x00
这些固件在 IBM 网站上需要付费才能获得,但您可以经过一番挖掘在 IBM FTP 服务器上找到它们(它们不够公开,我觉得不能直接链接),或者在联想网站上找到它们:https://datacentersupport.lenovo.com/gb/en/products/storage/tape-and-backup/ts3200/6173/downloads/driver-list/component?name=Software%20and%20Utilities