Perché è necessario un dispositivo loop?


15

In precedenza ho usato per creare file di immagini utilizzando dd, impostare un filesystem su di essi utilizzando mkfse mountloro per accedervi come partizioni montate. Più tardi, ho visto su Internet che molti esempi usano in losetupanticipo per creare una voce del dispositivo in loop /deve quindi montarla. Non riuscivo a capire perché uno avrebbe praticamente bisogno di un file di immagine per comportarsi come un dispositivo loop e avere una propria /devvoce mentre lo stesso comportamento può essere ottenuto senza tutto il fastidio.

Riepilogo: in uno scenario di vita reale, perché abbiamo bisogno di una /dev/loopXvoce per essere presenti, quando possiamo semplicemente montare l'immagine fs senza di essa? A che serve un dispositivo loop?


9
"... mentre lo stesso comportamento può essere ottenuto senza tutta la seccatura." - Ti sbagli lì;) - su Linux, un file non può essere montato senza la "seccatura" di un dispositivo loop. È solo che al giorno d'oggi mountè abbastanza intelligente da fare la seccatura per te. (come mostra Stephen Harris nella sua risposta)
marcelm

Risposte:


22

I montaggi, in genere, devono essere eseguiti su dispositivi a blocchi. Il driver del loop inserisce un front-end del dispositivo a blocchi nel file di dati.

Se fai un loop mount senza losetup il sistema operativo esegue uno in background.

per esempio

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

Potrebbe essere necessario chiamare losetup direttamente se l'immagine del file contiene partizioni incorporate.

ad esempio se ho questa immagine:

$ 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

Non posso montarlo direttamente

$ 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

Ma se uso losetupe kpartxquindi posso accedere alle partizioni:

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

Non è necessario esplicito losetup, basta usare mount -o loop,offset=$((512*2048)), dove 512è la dimensione del settore, ed 2048è ciò che ha fdiskdato a partire Startdalla partizione.
Ruslan,

Sì, questo era solo un esempio di utilizzo. In questo esempio specifico potrebbe essere più semplice eseguire il calcolo dell'offset ma potrebbero esserci casi d'uso (ad es. Più partizioni che si desidera montare contemporaneamente) in cui può essere più semplice solo losetupe kpartx. Lascia che gli strumenti facciano il duro lavoro :-)
Stephen Harris,

18

I file system prevedono di leggere e scrivere per bloccare i dispositivi, ma i file di immagine non sono dispositivi a blocchi. I dispositivi loop forniscono un dispositivo a blocchi sopra un file (o un altro dispositivo a blocchi, facoltativamente con rimappatura).

In molti casi non è necessario prendere in considerazione i dispositivi ad anello durante il montaggio delle immagini mount si occupa di tutto per te; ma i dispositivi loop sono ancora coinvolti. losetup -l -ali mostrerò.

Vedi anche Qual è la differenza tra mount e mount -o loop .


Quindi la gestione del dispositivo a blocchi è gestita implicitamente da mount?
corsetto

2
Sì, si mountprende cura di losetup, aggiungendo -o loopecc.
Stephen Kitt,

@corsel, Nella maggior parte dei casi avere mount call losetup per te funziona bene, ma ci sono eccezioni come il montaggio di più partizioni da un'immagine del disco.
Hildred

11

Sembra che tu sia su Linux e Linux usa un nome sbagliato per quella funzione.

Ho inventato quella funzione nel 1988 su SunOS-4.0 e la chiamo funzione fbk- File emula il dispositivo BlocK.

Lo sfondo è che il driver del dispositivo emula un dispositivo a blocchi sopra un semplice file. Questo è necessario in quanto un filesystem non può usare un file semplice come archivio in background per un filesystem. Ha piuttosto bisogno di un dispositivo a blocchi e questo è ciò che fbkemula.

Da un po 'di tempo alcune persone hanno reso il programma mountun po' più intelligente e ci sono implementazioni di mount che creano automaticamente fbkun'istanza per un file nel caso in cui il mountprogramma rilevi che l'argomento che dovrebbe essere un dispositivo a blocchi sembra invece essere un file di piano.


3
CV molto impressionante che hai ottenuto sul tuo profilo. Rispetto ...
corsetto

11
Il tuo post risulta alquanto elitario. Potresti aver scritto la prima implementazione, ma Linux usa un'implementazione diversa, quindi non usa il nome "sbagliato", solo diverso da quello che hai scelto per l'implementazione.
Austin Hemmelgarn,

4
Non ho mai detto che usassero il nome giusto, ho solo detto che affermare che era sbagliato ti fa sembrare un elitario supponente.
Austin Hemmelgarn,

9
Il nome 'loop' è l'abbreviazione di "loopback" 'e si riferisce al modo in cui le operazioni sul dispositivo a blocchi vengono "ricollegate" al VFS. Solaris 8 ha introdotto un dispositivo lofi("file di loopback") che ha funzionato in modo simile; BSD li ha introdotti con il nome vnd("vnode disk"), quindi il concetto ha avuto molti nomi diversi nel corso degli anni.
Caf

2
I due problemi più difficili in CS: coerenza della cache, denominazione dell'identificatore ed errori off-by-one.
Jens,

1

Anche se non fosse necessario in background per montare filesystem da file, ne avresti comunque bisogno per qualsiasi installazione usando un driver o un programma che si aspetta assolutamente un dispositivo a blocchi. Pensa ai server nbd (dispositivo a blocchi di rete), ai driver dei dispositivi a blocchi composti come mdraid, lvm ecc ....

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.