dmsetup: Onde os metadados persistentes são armazenados?

5

A documentação do snapshot dmsetup diz:

<persistent?> is P (Persistent) or N (Not persistent - will not survive
after reboot).  O (Overflow) can be added as a persistent store option
to allow userspace to advertise its support for seeing "Overflow" in the
snapshot status.  So supported store types are "P", "PO" and "N".

The difference between persistent and transient is with transient
snapshots less metadata must be saved on disk - they can be kept in
memory by the kernel.

Onde esses dados persistentes são armazenados?

    
por Tom Hale 09.10.2017 / 11:08

1 resposta

3

Existe uma diferença entre os dados no primeiro bloco de um dispositivo de instantâneo persistente vs transiente dmsetup :

Dados estes dispositivos:

$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                         DIO
/dev/loop1         0      0         0  0 /home/var/ravi/tmp/issue/snap-dev   0
/dev/loop0         0      0         0  0 /home/var/ravi/tmp/issue/base-dev   0

E um arquivo de backup de dispositivo de instantâneo inicialmente zerado:

$ od -xc snap-dev
0000000    0000    0000    0000    0000    0000    0000    0000    0000
         
$ sudo dmsetup -v create snapdev --table '0 8 snapshot /dev/loop0 /dev/loop1 N 1'
Name:              snapdev
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        0
Event number:      0
Major, minor:      254, 5
Number of targets: 1

$ od -xc snap-dev
0000000    0000    0000    0000    0000    0000    0000    0000    0000
         
$ sudo dmsetup remove snapdev
$ sudo dmsetup -v create snapdev --table '0 8 snapshot /dev/loop0 /dev/loop1 P 1'
Name:              snapdev
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        0
Event number:      0
Major, minor:      254, 5
Number of targets: 1

$ od -xc snap-dev
0000000    6e53    7041    0001    0000    0001    0000    0001    0000
          S   n   A   p 001  
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                         DIO
/dev/loop1         0      0         0  0 /home/var/ravi/tmp/issue/snap-dev   0
/dev/loop0         0      0         0  0 /home/var/ravi/tmp/issue/base-dev   0
$ od -xc snap-dev
0000000    0000    0000    0000    0000    0000    0000    0000    0000
         
$ sudo dmsetup -v create snapdev --table '0 8 snapshot /dev/loop0 /dev/loop1 N 1'
Name:              snapdev
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        0
Event number:      0
Major, minor:      254, 5
Number of targets: 1

$ od -xc snap-dev
0000000    0000    0000    0000    0000    0000    0000    0000    0000
         
$ sudo dmsetup remove snapdev
$ sudo dmsetup -v create snapdev --table '0 8 snapshot /dev/loop0 /dev/loop1 P 1'
Name:              snapdev
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        0
Event number:      0
Major, minor:      254, 5
Number of targets: 1

$ od -xc snap-dev
0000000    6e53    7041    0001    0000    0001    0000    0001    0000
          S   n   A   p 001  %pre%  %pre%  %pre% 001  %pre%  %pre%  %pre% 001  %pre%  %pre%  %pre%
0000020    0000    0000    0000    0000    0000    0000    0000    0000
         %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%
*
3751613000
%pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% * 3751613000
%pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% * 3751613000
%pre% 001 %pre% %pre% %pre% 001 %pre% %pre% %pre% 0000020 0000 0000 0000 0000 0000 0000 0000 0000 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% * 3751613000
%pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% * 3751613000
%pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% * 3751613000

Veja o que acontece ao usar o sinal N não persistente:

%pre%

Observe que o arquivo de apoio não foi alterado - ainda é tudo P bytes.

Agora, tente novamente com o sinalizador SnAp%code%1 para persistência:

%pre%

Nesse caso, os primeiros bytes do dispositivo são %code% .

Meu palpite é que os dados persistentes são armazenados no primeiro bloco ou blocos do próprio dispositivo de instantâneo.

    
por 09.10.2017 / 12:31