Por que alguém precisa de um dispositivo de loop?

9

Eu usei anteriormente para criar arquivos de imagem usando dd , configurei um sistema de arquivos neles usando mkfs e mount para acessá-los como partições montadas. Mais tarde, vi na Internet que muitos exemplos usam losetup antes para criar uma entrada de dispositivo de loop em /dev e montá-lo. Eu não sabia dizer por que um usuário praticamente precisaria de um arquivo de imagem para se comportar como um dispositivo de loop e ter sua própria entrada /dev , enquanto o mesmo comportamento pode ser obtido sem todos os problemas.

Resumo: Em um cenário da vida real, por que precisamos que uma entrada /dev/loopX esteja presente, quando podemos apenas montar a imagem fs sem ela? Qual é a utilidade de um dispositivo de loop?

    
por corsel 17.10.2018 / 17:26

4 respostas

17

As montagens, geralmente, devem ser feitas em dispositivos de bloco. O driver de loop coloca um dispositivo de bloco de front-end em seu arquivo de dados.

Se você montar um loop sem losetup , o sistema operacional fará um em segundo plano.

por exemplo

$ dd if=/dev/zero of=/tmp/foo bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0798775 s, 1.3 GB/s
$ mke2fs /tmp/foo
mke2fs 1.42.9 (28-Dec-2013)
....


$ losetup    
$ mount -o loop /tmp/foo /mnt1    
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         1  0 /tmp/foo
$ umount /mnt1
$ losetup
$ 

Você pode precisar chamar losetup diretamente se sua imagem de arquivo tiver partições incorporadas nela.

por exemplo, se eu tiver esta imagem:

$ fdisk -l /tmp/foo2      

Disk /tmp/foo2: 104 MB, 104857600 bytes, 204800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1f25ff39

     Device Boot      Start         End      Blocks   Id  System
/tmp/foo2p1            2048      204799      101376   83  Linux

Eu não posso montar isso diretamente

$ mount -o loop /tmp/foo2 /mnt1
mount: /dev/loop0 is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error

Mas se eu usar losetup e kpartx , posso acessar as partições:

$ losetup -f /tmp/foo2
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /tmp/foo2
$ kpartx -a /dev/loop0
$ mount /dev/mapper/loop0p1 /mnt1
$
    
por 17.10.2018 / 17:39
15

Os sistemas de arquivos esperam ler e gravar em dispositivos de bloco, mas os arquivos de imagem não são dispositivos de bloco. Os dispositivos de loop fornecem um dispositivo de bloco no topo de um arquivo (ou outro dispositivo de bloco, opcionalmente com remapeamento).

Não é preciso considerar dispositivos de loop ao montar imagens em muitos casos, porque mount cuida de tudo para você; mas os dispositivos de loop ainda estão envolvidos. losetup -l -a mostrará a eles.

Veja também Qual é a diferença entre o mount e o mount -o loop .

    
por 17.10.2018 / 17:31
11

Você parece estar no Linux e o Linux usa um nome errado para esse recurso.

Eu inventei esse recurso em 1988 no SunOS-4.0 e chamo esse recurso de fbk - Arquivo emula o dispositivo BlocK.

O segundo plano é que o driver de dispositivo emula um dispositivo de bloco sobre um arquivo simples. Você precisa disso como um sistema de arquivos não pode usar um arquivo simples como armazenamento em segundo plano para um sistema de arquivos. Ele precisa de um dispositivo de bloco e é isso que o fbk emula.

Desde então, algumas pessoas tornaram o programa mount um pouco mais inteligente e há implementações de montagem que criam automaticamente uma instância fbk para um arquivo, caso o programa mount detecte que o argumento esperado ser um dispositivo de bloco parece ser um arquivo de plano.

    
por 17.10.2018 / 17:31
1

Mesmo que não seja necessário em segundo plano para montar sistemas de arquivos a partir de arquivos, você ainda precisará deles para qualquer configuração usando um driver ou programa que realmente espera um dispositivo de bloco. Pense nos servidores nbd (dispositivo de bloco de rede), drivers de dispositivo de bloco compostos como mdraid, lvm etc ....

    
por 18.10.2018 / 10:57