losetup / dev / loop0 desaparece depois de algum tempo

3

no momento eu faço alguns testes com dispositivos de loop no Linux / Ubuntu. Em um pequeno script de teste, tenho os seguintes comandos:

#!/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

Agora meu problema:

Às vezes a linha cryptsetup falha, porque o dispositivo de loop desaparece (como se por mágica) ... durante a execução do script.

E recebo um erro:

Device /dev/loop0 is too small.

Existe uma maneira de impedir / desativar isso?

Atualização 1:

Aqui está a saída completa do meu script (2 execuções: 1 sucesso, 1 falha):

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

Atualização 2:

Se eu alterar o count no dd para 100 (~ 105MB), não haverá problemas (testei 10 execuções com sucesso). Portanto, deve haver qualquer autoclear / timeout ou qualquer outra coisa.

Atualização 3 (solução):

#!/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

Este aqui funciona sem erros, obrigado @frostschutz.

    
por user4013391 25.11.2014 / 08:46

1 resposta

2

Os dispositivos de loop apresentam algumas armadilhas. Muitas operações não são instantâneas, por exemplo, quando você losetup -d do dispositivo de loop será mantido ativo até que não esteja mais em uso. Os dispositivos podem estar em uso mesmo que você não esteja ciente disso, devido a processos em segundo plano que examinam dispositivos para uuids e outras coisas.

Talvez você deva deixar a opção de dispositivo de loop para losetup usando --find --show . Se um dispositivo de loop é inutilizável por qualquer motivo, ele deve escolher outro. Você teria que adaptar seu script para armazená-lo em uma variável então.

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

cryptsetup também é totalmente capaz de criar seu próprio dispositivo de loop, portanto você pode simplesmente renunciar losetup e ter cryptsetup trabalhando com o próprio arquivo. Isso deve ser menos propenso a erros.

cryptsetup ... testfile.x

Isso também funciona para luksOpen e o dispositivo de loop será mantido em volta até luksClose (novamente, até que não esteja mais em uso).

    
por 25.11.2014 / 14:11