Você pode fazer isso com o mapeador de dispositivos e sua meta snapshot
.
Basicamente, você faria o mesmo que o LVM ao criar um instantâneo gravável.
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"
Depois, você pode acessar o dispositivo sobreposto como /dev/mapper/newdevice
.
Se você também precisar acessar o dispositivo original ao mesmo tempo, faça o seguinte:
printf '%s\n' "0 $size snapshot-origin $dev" |
dmsetup create originaldevice
E acesse-o em mais de /dev/mapper/originaldevice
.
Você pode gravar nesse dispositivo e, além dos fragmentos gravados no dispositivo de instantâneo, o arquivo de sobreposição conterá uma cópia dos fragmentos que foram sobrescritos ao gravar na origem do instantâneo.
O arquivo de sobreposição pode ser um arquivo esparso. (por exemplo, crie-o como truncate -s10G the-file
) e não precisa ser tão grande quanto o dispositivo original. Você pode dizer o quanto está cheio com dmsetup status "$newdevname"
.
Observação: há requisitos de tamanho e conteúdo em um dispositivo de instantâneo .