Quelle est la différence entre le montage et le montage -o loop

28

J'ai un fichier iso nommé ubuntu.iso.

Je peux mountavec la commande: mount ubuntu.iso /mnt. Après le montage, je peux voir de la outout de la commande df -h: /dev/loop0 825M 825M 0 100% /mnt.

Cependant, si j'exécute la commande mount -o loop ubuntu.iso /mnt, j'obtiendrai le même résultat.

Comme je le sais, le périphérique en boucle nous permet de visiter le fichier iso en tant que périphérique, je pense que c'est pourquoi nous ajoutons l'option -o loop. Mais je peux visiter mon fichier iso même si je ne fais qu'exécuter mount ubuntu.iso /mnt.

Je ne vois donc pas la différence entre mountet mount -o loop.

Yves
la source
De plus, une chose importante est parfois que mount ne peut pas configurer de périphérique de bouclage avec les arugments appropriés Par exemple: mount ubuntu.iso /mntil ne configure pas de périphérique de bouclage en lecture seule, et mount /image.squashfs /mntil ne configure pas de périphérique de bouclage DIO( losetup --direct-io=on).
analphabète

Réponses:

47

Les deux versions utilisent des périphériques en boucle et produisent le même résultat; la version courte repose sur "l'intelligence" ajoutée à mountces dernières années. mount -o loopindique mountexplicitement d'utiliser un périphérique de boucle; il laisse le périphérique de boucle lui-même mount, qui recherchera un périphérique disponible, le configurera et l'utilisera. (Vous pouvez également spécifier l'appareil avec, par exemple mount -o loop=/dev/loop1 .)

L'astuce est que, quand on lui donne un fichier à monter, mountil utilisera automatiquement un périphérique de boucle pour le monter si nécessaire - c'est-à - dire que le système de fichiers n'est pas spécifié, ou libblkiddétermine que le système de fichiers n'est pris en charge que sur les périphériques de bloc (et donc un périphérique de boucle est nécessaire pour traduire le fichier en périphérique bloc).

La section de périphérique de boucle de la mountpage de manuel contient plus de détails.

Stephen Kitt
la source
1
Il n'y a pas * longtemps * qu'il n'y avait pas d'option "-o loop" dans le montage non plus et vous deviez créer manuellement le périphérique de boucle avec la commande losetup.
Edheldil
@Edheldil qui dépend de votre notion d '«il y a longtemps» ;-). util-linux2.11 soutenu mount -o loopen 2001, et je pense que 2.10 l'avait aussi, au moins un an plus tôt.
Stephen Kitt
Oui, mais les distributions stables couramment utilisées en 2001 utilisaient-elles déjà util-linux 2.11?
rackandboneman
2
@rackandboneman Je suis allé creuser un peu plus, et il s'avère que le support pour a -o loopété ajouté entre util-linux2.4 et 2.5j; Debian 1.1 avait cette dernière version et a été publiée en juin 1996. Cette option est donc disponible dans les distributions depuis plus de vingt ans.
Stephen Kitt
Un avantage de cette intelligence: si / quand la nouvelle fonctionnalité de "montage direct de fichiers" des développeurs XFS (sans avoir besoin de périphériques de boucle) atteint le noyau, mountsera en mesure de basculer vers ce mécanisme de manière transparente (au moins pendant les 15 premières minutes jusqu'à ce qu'elle s'avère qu'il a brisé le script de quelqu'un et que tout le monde doit revenir aux périphériques de boucle) , contrairement à mount -o loopce qui demande toujours explicitement l'ancien mécanisme (actuel).
grawity
9

L' loopappareil est principalement contrôlé par la losteupcommande. losetup -aVous donne donc un aperçu des périphériques de boucle utilisés et des fichiers joints. La mountcommande peut uniquement monter le périphérique de bloc . Le périphérique de boucle peut créer le périphérique de bloc virtuel à partir d'un fichier (périphérique de caractères).

En fait, il y a une grande différence entre ces commandes, car sur les anciens systèmes Linux, elles mountne pouvaient pas reconnaître le fichier comme le bon périphérique à monter, mais pendant le temps où la commande de montage était terminée avec beaucoup de fonctionnalités, elle peut désormais décider de essayez d'appeler la commande losetup et montez le résultat. Mais si vous avez une image disque entière non au format iso mais par exemple avec MBR au début, la commande de montage ne pourrait pas la reconnaître et vous devez trouver la partition utilisable (par exemple avec la parted disk_image.raw unit B printcommande) yoursef et la monter avec l'option de montage complète comman comme:

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

Dans cette syntaxe, le périphérique de boucle n'a pas été spécifié et il est supposé que le système choisit le premier gratuit ( /dev/loop0, /dev/loop1etc.) Parmi les autres nouvelles fonctionnalités de la commande mount, vous n'avez pas besoin de spécifier le type de système de fichiers du périphérique de bloc monté (dans votre cas -t iso9660) si le support du système de fichiers a été installé.

schweik
la source
7

Il n'y a aucune différence entre mount ubuntu.iso /mntet mount -o loop ubuntu.iso /mnt.

Le premier est traité de manière transparente comme si vous aviez utilisé le second.

Emmanuel Rosa
la source