it-swarm.com.de

Warum braucht man überhaupt ein Loop-Gerät?

Ich habe zuvor Bilddateien mit dd erstellt und mit mkfsund mount ein Dateisystem darauf eingerichtet, um auf sie als gemountete Partitionen zuzugreifen. Später habe ich im Internet gesehen, dass viele Beispiele zuvor losetup verwenden, um einen Loop-Geräteeintrag unter /dev Zu erstellen und ihn dann zu mounten. Ich konnte nicht sagen, warum man praktisch eine Bilddatei benötigt, um sich als Schleifengerät zu verhalten und einen eigenen /dev - Eintrag zu haben, während das gleiche Verhalten ohne großen Aufwand erzielt werden kann.

Zusammenfassung : Warum benötigen wir in einem realen Szenario überhaupt einen /dev/loopX - Eintrag, um überhaupt vorhanden zu sein, wenn wir das fs-Image nur ohne ihn mounten können? Was nützt ein Loop-Gerät?

15
corsel

Die Montage muss normalerweise auf Blockgeräten erfolgen. Der Schleifentreiber fügt ein Blockgeräte-Frontend in Ihre Datendatei ein.

Wenn Sie einen Loop-Mount ohne losetup durchführen, führt das Betriebssystem einen im Hintergrund durch.

z.B

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

Möglicherweise müssen Sie losetup direkt aufrufen, wenn in Ihr Dateibild Partitionen eingebettet sind.

zB wenn ich dieses Bild habe:

$ 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

Ich kann das nicht direkt montieren

$ 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

Aber wenn ich losetup und kpartx verwende, kann ich auf die Partitionen zugreifen:

$ 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

Dateisysteme erwarten das Lesen und Schreiben von blockierten Geräten, aber Bilddateien blockieren keine Geräte. Schleifengeräte stellen ein Blockgerät über einer Datei bereit (oder ein anderes Blockgerät, optional mit Neuzuordnung).

In vielen Fällen müssen beim Mounten von Images keine Loop-Geräte berücksichtigt werden, da mount alles für Sie erledigt. Es sind jedoch weiterhin Schleifengeräte beteiligt. losetup -l -a wird sie zeigen.

Siehe auch Was ist der Unterschied zwischen mount und mount -o loop .

18
Stephen Kitt

Sie scheinen unter Linux zu sein und Linux verwendet für diese Funktion einen falschen Namen.

Ich habe diese Funktion 1988 unter SunOS-4.0 erfunden und nenne sie fbk - Datei emuliert BlocK-Gerät.

Hintergrund ist, dass der Gerätetreiber ein Blockgerät über einer einfachen Datei emuliert. Sie benötigen dies, da ein Dateisystem eine einfache Datei nicht als Hintergrundspeicher für ein Dateisystem verwenden kann. Es braucht eher ein Blockgerät und das ist es, was fbk emuliert.

Seit einiger Zeit haben einige Leute das Programm mount etwas cleverer gemacht, und es gibt Mount-Implementierungen, die automatisch eine fbk -Instanz für eine Datei erstellen, falls das Programm mount dies erkennt Das Argument, von dem erwartet wird, dass es sich um ein Blockgerät handelt, scheint stattdessen eine Planungsdatei zu sein.

11
schily

Selbst wenn es im Hintergrund nicht zum Mounten von Dateisystemen aus Dateien benötigt würde, würden Sie es dennoch für jedes Setup mit einem Treiber oder Programm benötigen, das unbedingt ein Blockgerät erwartet. Denken Sie an nbd-Server (Network Block Device), Compound Block Device-Treiber wie mdraid, lvm etc ....

1
rackandboneman