Como obtenho o losetup -a para se comportar?

2
# losetup /dev/loop0 /tmp/tmpuUwgbn
# losetup -a
# losetup -f
/dev/loop1
# losetup /dev/loop0
/dev/loop0: [0806]:33654 (/tmp/tmpuUwgbn)
# ls -la /tmp/tmpuUwgbn
-rw------- 1 root root 0 2011-08-24 15:49 /tmp/tmpuUwgbn
# losetup -a
#

Por que não losetup -a list /dev/loop0 quando ele sabe claramente sobre isso? A página man não fornece sugestões e o Google não ajuda.

Observação: achei a resposta por tentativa e erro ao escrever esta pergunta, mas estou postando mesmo assim, na esperança de que isso possa ajudar alguém. Veja minha resposta abaixo.

    
por Lauritz V. Thaulow 24.08.2011 / 16:15

2 respostas

4

Dispositivos de loop com arquivo de apoio inferior a 512B não estão listados em /proc/partitions , que losetup usa para procurar dispositivos de loop. Eu acredito que a razão pela qual ele não está listado lá é que, criando esse dispositivo de loop, você obtém um dispositivo de bloco que é menor que o seu tamanho de bloco (512B no caso do dispositivo de loop).

Portanto, enquanto o losetup e o kernel permitem que você crie um dispositivo de loop menor que 512B, você não pode usá-lo de qualquer maneira (não pode ler ou gravar nele, blocksize --getsize returns 0 ). A única coisa que você pode fazer com esse dispositivo é - tanto quanto eu entendo - aumentar o arquivo de backup e chamar losetup -c /dev/loopX - se o arquivo de backup > = 512B, o dispositivo de loop agora aparecer em /proc/partitions e $(losetup -a) .

A capacidade para losetup -c é IMHO a razão pela qual o kernel suporta a criação de dispositivo de loop com o arquivo de apoio < 511B em vez de retornar um erro.

    
por 24.08.2011 / 17:28
3

É porque losetup -a , por algum motivo, não lista os dispositivos de loop cujos arquivos associados são menores que 512 bytes:

# losetup /dev/loop1 'mktemp'
# losetup -a
# losetup -d /dev/loop1
# t='mktemp'; truncate --size 1 $t; losetup /dev/loop1 $t
# losetup -a
# losetup -d /dev/loop1
# t='mktemp'; truncate --size 511 $t; losetup /dev/loop1 $t
# losetup -a
# losetup -d /dev/loop1
# t='mktemp'; truncate --size 512 $t; losetup /dev/loop1 $t                    
# losetup -a
/dev/loop1: [0806]:33683 (/tmp/tmp.M0F7bovkxK)

Por quê? Eu gostaria de saber. Eu sinto que a página man deveria mencionar isso em algum lugar.

    
por 24.08.2011 / 16:15