losetup /dev/loop0 一段时间后消失

losetup /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:

如果我将 更改countdd100 (~105MB) 就没有问题(测试了 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。如果一个循环设备因任何原因无法使用,则应选择另一个循环设备。然后,您必须调整脚本以将其存储在变量中。

lodev=$(losetup --find --show textfile.x)
cryptsetup ... $lodev

cryptsetup也完全能够创建自己的循环设备,因此您可以完全放弃losetup并使用cryptsetup文件本身。这应该不太容易出错。

cryptsetup ... testfile.x

这也适用于luksOpen并且循环设备将保留直到luksClose(再次,直到它不再使用)。

相关内容