Tenho trabalhado com suporte a instantâneo de mapeador de dispositivo recentemente e, embora pareça que tenho as coisas funcionando satisfatoriamente, fico um pouco confuso com relação à finalidade do snapshot-origin
de destino. Os documentos do kernel sobre o tópico parecem pouco claros. Especificamente, eles dizem:
...which will normally have one or more snapshots based on it. Reads will be mapped directly to the backing device. For each write, the original data will be saved in the of each snapshot to keep its visible content unchanged, at least until the fills up.
... e isso parece descrever os instantâneos em geral em vez do uso específico da meta snapshot-origin
. Os documentos sugerem que os instantâneos devem ser "baseados" no destino de origem do instantâneo, mas isso não parece ser necessário. Ou seja, posso criar um instantâneo como este:
dmsetup create snap --table \
"0 $(blockdev --getsz /dev/realdevice) /dev/realdevice /dev/cowdevice N 16"
E funciona como pretendido. As gravações vão para o dispositivo COW, as leituras vêm do dispositivo real ou do dispositivo COW, conforme apropriado.
Parece que posso usar o snapshot-origin
target para expor o conteúdo original de /dev/realdevice
. Dado o exemplo acima, tentar montar /dev/realdevice
produziria:
mount: /dev/realdevice is already mounted or /mnt busy
Mas se eu criar um destino de origem do instantâneo:
dmsetup create origin --table "0 $(blockdev --getsz /dev/realdevice) snapshot-origin /dev/realdevice"
Eu posso montar o snapshot-origin
target:
mount /dev/mapper/origin /mnt
É (expondo a origem do instantâneo como um segundo dispositivo que pode ser acessado mesmo quando o principal é bloqueado / em uso como parte de um instantâneo) a finalidade do snapshot-origin
target?
Tags snapshot linux device-mapper