cria um instantâneo device-mapper de um dispositivo linear múltiplo de volume lvm com dados de vaca fora do grupo de volume

1

Eu preciso fazer um instantâneo na memória de um sistema de arquivos raiz montado em execução.

O próprio sistema de arquivos está em um dispositivo lvm, mas não há espaço livre no VG e não há como expandi-lo. No entanto, tenho bastante memória RAM e só preciso do meu instantâneo para fazer um backup e, talvez, reverter para ele. Eu não me importo se o servidor for reinicializado e "reverter" para o instantâneo. Estou usando mapeador de dispositivos e não lvm2 porque não encontrei uma maneira de fazer isso com lvm. Então, na terminologia do DM, eu preciso fazer um snapshot-origin e um snapshot sobre ele.

Eu criei um dispositivo de bloco na memória (linear em cima do loop sobre o arquivo em tmpfs) para dados de vaca e funciona.

Meu problema é que meu dispositivo root fs é dois dispositivos lineares, não um:

root: 0 57000000 linear 8:48 2048
root: 57000000 160000000 linear 8:48 73869312
cow: 0 20971520 linear 7:2 0

(root não é o único LV neste vg, vaca é meu dispositivo na memória)

Encontrei um monte de artigos sobre como fazer isso on-line, por exemplo: link No entanto, não encontrei a sintaxe adequada para criar a origem do instantâneo no topo de dois ou mais dispositivos lineares.

quando eu faço assim: %código% Eu recebo "comando falhou" e isso no dmesg:

[ 2957.073592] device-mapper: table: 254:1: snapshot-origin: Cannot get target device
[ 2957.073595] device-mapper: ioctl: error adding target to table

Quando uso a mesma abordagem para um único dispositivo linear, tudo está bem.

Atualização:
Fiz um instantâneo lvm em uma mesma configuração, mas com algum espaço no vg para dar uma olhada em como o lvm lida com isso. Bem, isso acontece, mas eu ainda não entendo como faço isso manualmente (com meu próprio dispositivo de causa).

A configuração inicial:

Root: 0 57090048 linear 8:48 2048
Root: 57090048 160571392 linear 8:48 73869312

Isto é o que o lvm faz em dmsetup table root| sed 's~linear.*~snapshot-origin /dev/mapper/root~g'| dmsetup create snapshot-origin . Então é isso que eu quero criar manualmente:

Root--snap: 0 217661440 snapshot 254:1 254:4 P 8
Root-real: 0 57090048 linear 8:0 2048
Root-real: 57090048 160571392 linear 8:0 73869312
Root: 0 217661440 snapshot-origin 254:1
Root--snap-cow: 0 8388608 linear 8:0 57092096

Como eu entendo a documentação do dm e vários artigos, deve-se começar marcando o dispositivo original como origem do instantâneo:

dmsetup -vvv create so --table '0 217661440 snapshot-origin /dev/mapper/Root'            
dm version   OF   [16384] (*1)
Udev cookie 0xd4d3634 (semid 12746752) created
Udev cookie 0xd4d3634 (semid 12746752) incremented to 1
Udev cookie 0xd4d3634 (semid 12746752) incremented to 2
Udev cookie 0xd4d3634 (semid 12746752) assigned to CREATE task(0) with flags DISABLE_LIBRARY_FALLBACK         (0x20)
dm create so  OF   [16384] (*1)
dm reload so  OF   [16384] (*1)
<backtrace>
Udev cookie 0xd4d3634 (semid 12746752) decremented to 1
Udev cookie 0xd4d3634 (semid 12746752) incremented to 2
Udev cookie 0xd4d3634 (semid 12746752) assigned to REMOVE task(2) with flags DISABLE_LIBRARY_FALLBACK         (0x20)
dm remove so  OF   [16384] (*1)
Udev cookie 0xd4d3634 (semid 12746752) decremented to 1
Udev cookie 0xd4d3634 (semid 12746752) waiting for zero
Udev cookie 0xd4d3634 (semid 12746752) destroyed
Command failed

Update2:

open("/dev/mapper/control", O_RDWR)     = 3
/...cut.../
write(1, "dm create ECS-LVRoot  OF   [1638"..., 40dm create ECS-LVRoot  OF   [16384] (*1)
) = 40
ioctl(3, DM_DEV_CREATE, 0x7f66e826f350) = -1 EBUSY (Device or resource busy)
write(1, "<backtrace>\n", 12<backtrace>
)           = 12
write(2, "Command failed\n", 15Command failed
)        = 15
    
por Scott Tiger 17.02.2017 / 04:50

0 respostas