現在、私はループデバイスを使用してLinux / Ubuntuでいくつかのテストを実行しています。小さなテストスクリプトには次のコマンドがあります。
#!/bin/sh
rm testfile.x
dd if=/dev/zero of=testfile.x bs=1M count=1200
losetup /dev/loop0 testfile.x
cryptsetup --batch-mode --key-file k.kf --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 --use-random luksFormat /dev/loop0
losetup -d /dev/loop0
今私の質問は次のとおりです。
時々スクリプトの実行中にループデバイスが(魔法のように)消えるので、cryptsetup行は失敗します。
エラーが発生します。
デバイス/dev/loop0が小さすぎます。
それでは、これを防止/無効にする方法はありますか?
アップデート1:
私のスクリプトの完全な出力は次のとおりです(2回実行:1回成功、1回失敗)。
root@test:/home/tester/test# ./x.sh
1200+0 records in
1200+0 records out
1258291200 bytes (1.3 GB) copied, 0.954065 s, 1.3 GB/s
Device /dev/loop0 is too small.
loop: can't delete device /dev/loop0: No such device or address
root@test:/home/tester/test# ./x.sh
1200+0 records in
1200+0 records out
1258291200 bytes (1.3 GB) copied, 0.953886 s, 1.3 GB/s
アップデート2:
count
100(〜105MB)に変更するとdd
問題はありません(10回テスト成功)。したがって、自動消去/タイムアウトなどが必要です。
アップデート3(解決策):
#!/bin/sh
FILE=testfile.x
cryptsetup --batch-mode --key-file k.kf --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 --use-random luksFormat $FILE
cryptsetup luksOpen -d k.kf $FILE hellohello
cryptsetup luksClose hellohello
@frostschutzのおかげでバグなしで動作します。
答え1
循環装置にはいくつかの欠陥があります。多くのタスクは即時ではありません。たとえば、losetup -d
デバイスを循環すると、使用しなくなるまでアクティブになります。知らなくても、バックグラウンドプロセスがデバイスからuuidやその他のものを取得するため、デバイスが使用されている可能性があります。
losetup
を使用して屋根ふき装置を選択する必要があるかもしれません--find --show
。何らかの理由で1つの循環装置が利用できない場合は、別の循環装置を選択する必要があります。その後、スクリプトを調整して変数に保存する必要があります。
lodev=$(losetup --find --show textfile.x)
cryptsetup ... $lodev
cryptsetup
独自の屋根ふき装置を作ることも可能なので、完全に捨ててファイル自体をlosetup
使用することができます。cryptsetup
これにより、エラーが少なくなります。
cryptsetup ... testfile.x
これも適用され、luksOpen
ループ装置はluksClose
使用されなくなるまでそのままである。