볼륨 그룹 외부의 소 데이터를 사용하여 lvm 볼륨 다중 선형 장치의 장치 매퍼 스냅샷 생성

볼륨 그룹 외부의 소 데이터를 사용하여 lvm 볼륨 다중 선형 장치의 장치 매퍼 스냅샷 생성

나 하나 만들어야 해기억 속에마운트된 루트 파일 시스템의 실행 중인 스냅샷입니다.

파일 시스템 자체는 lvm 장치에 있지만 VG에는 이를 확장할 수 있는 여유 공간이 없습니다. 하지만 RAM이 충분하므로 백업하고 롤백하려면 스냅샷만 있으면 됩니다. 서버가 다시 시작되고 스냅샷으로 "롤백"되는지는 상관하지 않습니다. lvm을 사용하여 만드는 방법을 찾지 못했기 때문에 lvm2 대신 장치 매퍼를 사용하고 있습니다. 그래서 DM 용어로 스냅샷 오리진을 만들고, 거기에 스냅샷을 만들어야 합니다.

나는 소 데이터(tmpfs의 파일 루프 위에 선형)를 위한 메모리 블록 장치를 만들었고 작동합니다.

내 문제는 내 루트 fs 장치가 하나가 아닌 두 개의 선형 장치라는 것입니다.

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

(루트는 이 vg의 유일한 LV가 아니며 소는 내 메모리 장치입니다)

나는 이 작업에 관해 온라인에서 다음과 같은 많은 기사를 찾았습니다. https://wiki.gentoo.org/wiki/Device-mapper#Snapshot 그러나 두 개 이상의 선형 장치 위에 스냅샷 소스를 생성하는 올바른 구문을 찾지 못했습니다.

이렇게 하면 dmsetup table root| sed 's~linear.*~snapshot-origin /dev/mapper/root~g'| dmsetup create snapshot-origin dmesg에 "command failed"라는 메시지가 표시됩니다.

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

단일 선형 장치에 동일한 방법을 사용하면 모든 것이 잘 작동합니다.

고쳐 쓰다:
동일한 구성에서 lvm 스냅샷을 만들었지만 lvm이 이를 어떻게 처리하는지 확인하기 위해 vg에 약간의 공간을 확보했습니다. 그렇습니다. 하지만 수동으로 (내 가축 장비를 사용하여) 어떻게 이 작업을 수행할 수 있는지 이해가 되지 않습니다.

기본 설정:

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

이것이 lvm이 하는 일입니다 lvcreate -s -L10G. 그래서 이것이 제가 수동으로 만들고 싶은 것입니다:

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

dm 문서와 다양한 기사에서 제가 이해하는 한, 원시 장치는 먼저 스냅샷 소스로 표시되어야 합니다.

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

업데이트 2:

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

관련 정보