设置 LTO 加密时什么可能导致“感知错误”?

设置 LTO 加密时什么可能导致“感知错误”?

我正在尝试在 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

我花了一天时间调试为什么当我们使用完全修补的stenc1.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

相关内容