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
プログラムを介さずに、ドライブにキーを設定できるようです。
ASC0x26が「パラメータリストの無効なフィールド」であると述べているSCSIマニュアルを見つけましたが、これはあまり説明されていません。
他の誰かが以前にこのエラーを見たことがありますか、またはドライブにキーを受け入れるようにする方法について何かアイデアがありますか?
いつものように、何時間ものトラブルシューティングは何の意味もありませんが、公開フォーラムに質問を投稿するとすぐに問題が明らかになります。
Stenc 1.0.7にはバグがあり、空のテープで--detail
を使用するとクラッシュします。修正を加えて作者に連絡しようとしましたが、彼を捕まえることができません。
このクラッシュにより、ドライブは一貫性のない状態になり、それ以上のキーの受け入れが拒否されるようです。バグを修正してからstenc --detail
をクラッシュせずに実行すると、問題が修正されたようです。これで、任意のキーを何度でも設定できるようになり、それ以上の問題は発生していません。
他の誰かが同じ問題を抱えている場合は、176行目のstenc-1.0.7/sec/scsiencrypt.cpp
に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);
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;
_
アップロード時に使用したオプションに関係なく、完全にパッチが適用されたstenc
1.0.7を使用して暗号化を構成しているときに、Quantum LTO7HHドライブがSenseエラーを出し続ける理由をデバッグするのに1日を費やしました。
最後に、この場合、キーの生成時にキー記述子を設定したためであることがわかりました。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
その後、同じコマンドを使用してアップロードが成功します。これが誰かに役立つことを願っています!
ファームウェアを更新することにより、IBM SCSILTO-4ドライブでわずかに異なるstenc
エラーを解決しました。工場のファームウェアは暗号化をまったくサポートしていなかったようです。
私のエラーは:
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サーバーで少し掘り下げて見つけることができます(直接リンクできると感じるほど公開されていません)、またはここのLenovoサイトで:- https://datacentersupport.lenovo.com/gb/en/products/storage/tape-and-backup/ts3200/6173/downloads/driver-list/component?name=Software%20and%20Utilities