losstup /dev/loop0 はしばらくすると消えます。

losstup /dev/loop0 はしばらくすると消えます。

現在、私はループデバイスを使用して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:

count100(〜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使用されなくなるまでそのままである。

関連情報