Qual é a diferença entre mount e mount -o loop

28

Eu tenho um arquivo iso chamado ubuntu.iso.

Eu posso mountlo com o comando: mount ubuntu.iso /mnt. Após a montagem, eu posso vê-lo da outout do comando df -h: /dev/loop0 825M 825M 0 100% /mnt.

No entanto, se eu executar o comando mount -o loop ubuntu.iso /mnt, obterá o mesmo resultado.

Como eu sei, o dispositivo de loop nos permite visitar o arquivo iso como um dispositivo, acho que é por isso que adicionamos a opção -o loop. Mas eu posso visitar meu arquivo iso mesmo se eu apenas executar mount ubuntu.iso /mnt.

Então, eu não consigo ver a diferença entre mounte mount -o loop.

Yves
fonte
Também é importante que, às vezes, o mount não possa configurar o dispositivo de loopback com as devidas configurações. Por exemplo: mount ubuntu.iso /mntele não configura um dispositivo de loopback somente leitura e mount /image.squashfs /mntnão configura um dispositivo de loopback DIO( losetup --direct-io=on).
Analfabeto

Respostas:

47

Ambas as versões usam dispositivos de loop e produzem o mesmo resultado; a versão curta se baseia em "inteligência" adicionada mountnos últimos anos. mount -o loopdiz mountexplicitamente para usar um dispositivo de loop; ele deixa o dispositivo de loop propriamente dito mount, que procurará um dispositivo disponível, configurará e usará. (Você também pode especificar o dispositivo com, por exemplo mount -o loop=/dev/loop1 .)

A inteligência é que, quando um arquivo for montado, ele mountusará automaticamente um dispositivo de loop para montá-lo quando necessário - ou seja , o sistema de arquivos não está especificado ou libblkiddetermina que o sistema de arquivos é suportado apenas em dispositivos de bloco (e, portanto, um é necessário um dispositivo de loop para converter o arquivo em um dispositivo de bloco).

A seção do dispositivo de loop da mountpágina de manual possui mais detalhes.

Stephen Kitt
fonte
11
Há muito tempo atrás, também não havia opção "-o loop" no mount e você teria que criar manualmente o dispositivo de loop com o comando losetup.
Edheldil 6/09/19
@ Edheldil que depende da sua noção de "há muito tempo" ;-). util-linux2.11 foi apoiado mount -o loopem 2001 e acho que o 2.10 também o teve, pelo menos um ano antes.
Stephen Kitt
Sim, mas as distribuições estáveis ​​comumente usadas em 2001 já usam o util-linux 2.11?
rackandboneman
2
@rackandboneman Fui cavando um pouco mais, e acontece que o suporte -o loopfoi adicionado em algum momento entre util-linux2,4 e 2,5j; O Debian 1.1 tinha o último e foi lançado em junho de 1996. Portanto, esta opção está disponível em distribuições há mais de vinte anos.
Stephen Kitt
Uma vantagem dessa inteligência: se / quando o novo recurso "montagem direta de arquivo" dos desenvolvedores do XFS (sem a necessidade de dispositivos de loop) atingir o kernel, mountserá possível alternar para esse mecanismo de forma transparente (pelo menos nos primeiros 15 minutos até Acontece que ele quebrou o shellscript de alguém e todo mundo tem que voltar aos dispositivos de loop) , ao contrário do mount -o loopque ainda pede explicitamente o mecanismo antigo (atual).
grawity
9

O loopdispositivo é controlado principalmente com o losteupcomando Assim, losetup -avocê fornece uma visão geral sobre os dispositivos de loop usados ​​e os arquivos anexados. O mountcomando pode montar apenas o dispositivo de bloco . O dispositivo de loop pode criar o dispositivo de bloco virtual a partir de um arquivo (dispositivo de caractere).

De fato, há uma grande diferença entre esses comandos, porque em sistemas Linux mais antigos mountnão era possível reconhecer o arquivo como o dispositivo correto a ser montado, mas durante o tempo em que o comando mount foi concluído com muitos recursos, portanto, agora é possível decidir tente chamar o comando losetup e monte o resultado. Mas se você tiver uma imagem de disco inteira não no formato iso, mas, por exemplo, com o MBR no início, o comando mount não poderá reconhecê-la e você terá que encontrar a partição utilizável (por exemplo, com o parted disk_image.raw unit B printcomando) yoursef e montá-la com a opção completa mount comman Como :

mount disk_image.raw /mntpoint/ -o loop,offset=${OFFSET_of_PARTITION}

Nesta sintaxe, o dispositivo de loop não foi especificado e supõe-se que o sistema escolha o primeiro livre ( /dev/loop0, /dev/loop1etc). Entre os outros novos recursos do comando mount, você não precisa especificar o tipo de sistema de arquivos do dispositivo de bloco montado (no seu caso -t iso9660) se o suporte ao sistema de arquivos foi instalado.

schweik
fonte
7

Não há diferença entre mount ubuntu.iso /mnte mount -o loop ubuntu.iso /mnt.

O primeiro é tratado de forma transparente como se você tivesse usado o segundo.

Emmanuel Rosa
fonte