web-dev-qa-db-fra.com

Pourquoi a-t-on besoin d'un périphérique de boucle?

J'avais l'habitude de créer des fichiers image en utilisant dd, de configurer un système de fichiers sur eux en utilisant mkfset mount pour y accéder en tant que partitions montées. Plus tard, j'ai vu sur Internet que de nombreux exemples utilisent losetup au préalable pour faire une entrée de périphérique de boucle sous /dev, puis montez-le. Je ne pouvais pas dire pourquoi on aurait pratiquement besoin d'un fichier image pour se comporter comme un périphérique en boucle et avoir son propre /dev entrée alors que le même comportement peut être obtenu sans tous les tracas.

Résumé: Dans un scénario réel, pourquoi avons-nous besoin d'un /dev/loopXentrée pour être présent du tout, quand on peut juste monter l'image fs sans elle? Quelle est l'utilité d'un périphérique en boucle?

15
corsel

Les montages doivent généralement être effectués sur des périphériques bloc. Le pilote de boucle place un frontal de périphérique de bloc dans votre fichier de données.

Si vous effectuez un montage en boucle sans losetup, le système d'exploitation en fait un en arrière-plan.

par exemple

$ 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
$ 

Vous devrez peut-être appeler losetup directement si votre image de fichier contient des partitions intégrées.

par exemple si j'ai cette image:

$ 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

Je ne peux pas monter ça directement

$ 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

Mais si j'utilise losetup et kpartx alors je peux accéder aux partitions:

$ 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
$
22
Stephen Harris

Les systèmes de fichiers s'attendent à lire et à écrire sur les périphériques bloqués, mais les fichiers image ne bloquent pas les périphériques. Les périphériques en boucle fournissent un périphérique de bloc au-dessus d'un fichier (ou un autre périphérique de bloc, éventuellement avec remappage).

Dans de nombreux cas, il n'est pas nécessaire de prendre en compte les périphériques en boucle lors du montage d'images car mount s'occupe de tout pour vous; mais les périphériques de boucle sont toujours impliqués. losetup -l -a les montrera.

Voir aussi Quelle est la différence entre mount et mount -o loop .

18
Stephen Kitt

Vous semblez être sous Linux et Linux utilise un mauvais nom pour cette fonctionnalité.

J'ai inventé cette fonctionnalité en 1988 sur SunOS-4.0 et j'appelle cette fonctionnalité fbk - Le fichier émule le périphérique BlocK.

L'arrière-plan est que le pilote de périphérique émule un périphérique de bloc au-dessus d'un fichier ordinaire. Vous en avez besoin car un système de fichiers ne peut pas utiliser un fichier brut comme stockage d'arrière-plan pour un système de fichiers. Il a plutôt besoin d'un périphérique bloc et c'est ce que fbk émule.

Depuis un certain temps, certaines personnes ont rendu le programme mount un peu plus intelligent et il existe des implémentations de montage qui créent automatiquement une instance fbk pour un fichier au cas où le programme mount le détecte l'argument qui devrait être un périphérique de bloc semble plutôt être un fichier de plan.

11
schily

Même s'il n'était pas nécessaire en arrière-plan pour monter des systèmes de fichiers à partir de fichiers, vous en auriez toujours besoin pour toute configuration utilisant un pilote ou un programme qui attend absolument un périphérique de bloc. Pensez aux serveurs nbd (périphérique de bloc réseau), aux pilotes de périphérique de bloc composé comme mdraid, lvm etc ....

1
rackandboneman