GNU / Linux: dispositivo di blocco overlay / dispositivo di blocco impilabile


14

GNU / Linux ha union mount che sovrappone dirs. Quindi puoi montare una directory scrivibile sopra una directory di sola lettura. Quando la directory scrivibile viene smontata, la directory di sola lettura non viene toccata.

Sto cercando la stessa funzionalità per i dispositivi a blocchi, preferibilmente con la parte scrivibile memorizzata in un file. Quindi vorrei eseguire qualcosa del tipo:

device-setup /dev/newdevice /dev/read-only-device overlayfile

Se scrivo su / dev / newdevice, le modifiche dovrebbero essere archiviate in un file overlay. Se leggo i settori scritti, dovrei ottenere i dati dal file di overlay. Se leggo settori non scritti, dovrei ottenere i dati dal dispositivo / dev / read-only-only.

Esiste un tale strumento?


Risposte:


22

Puoi farlo con il mapper del dispositivo e il suo snapshottarget.

Fondamentalmente, faresti lo stesso di quello che LVM fa quando crei un'istantanea scrivibile.

dev=/dev/read-only-device
ovl=/path/to/overlay.file
newdevname=newdevice
size=$(blockdev --getsz "$dev")

loop=$(losetup -f --show -- "$ovl")
printf '%s\n' "0 $size snapshot $dev $loop P 8" |
  dmsetup create "$newdevname"

Quindi è possibile accedere al dispositivo sovrapposto come /dev/mapper/newdevice.

Se è necessario anche accedere al dispositivo originale contemporaneamente, è possibile:

printf '%s\n' "0 $size snapshot-origin $dev" |
  dmsetup create originaldevice

E accedervi /dev/mapper/originaldevice.

È possibile scrivere su quel dispositivo, quindi oltre ai blocchi scritti sul dispositivo di istantanea, il file di sovrapposizione conterrà una copia dei blocchi che sono stati sovrascritti durante la scrittura sull'origine dell'istantanea.

Il file overlay può essere un file sparse. (ad esempio, crealo come truncate -s10G the-file) e non deve essere grande come il dispositivo originale. Puoi dire quanto è pieno dmsetup status "$newdevname".

Nota: ci sono requisiti di dimensioni e contenuti su un dispositivo di istantanea .


1
Una successiva domanda interessante è se le modifiche accumulate possano essere successivamente unite nel dispositivo originale
imz - Ivan Zakharyaschev,

1
La risposta successiva: si. "Device-mapper ti consente ... *) Per unire nuovamente un'istantanea di un dispositivo a blocchi nel dispositivo di origine dell'istantanea." kernel.org/doc/Documentation/device-mapper/snapshot.txt
imz - Ivan Zakharyaschev

Che cosa significa il parametro chunksize sul target dell'istantanea (8 nel tuo caso)? Come sceglierlo
imz - Ivan Zakharyaschev

1
@Tom Quei numeri nelle tabelle DM si riferiscono sempre a unità da 512 byte, non alle dimensioni del settore fisico dei dispositivi a blocchi sottostanti. Quindi usare qualcosa che non è un multiplo di 8 un'istantanea sopra un dispositivo con settori 4K sarebbe una cattiva idea.
Stéphane Chazelas,

1
@Tom, il chunksize determina la granularità dell'istantanea. non si tratta della dimensione a blocchi di FS per il file overlay, ma della ganularità delle operazioni di I / O eseguite su qualunque cosa si trovi sul dispositivo a blocchi. Da qui il rollback. Grazie per il getsz vs getsize.
Stéphane Chazelas,
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.