Linux 장치 맵퍼는 스냅 샷을 작성할 때 LV 내에 중첩 된 LVM PV를 매핑합니다.


13

이 머신을 백업하려는 계획이 정말 엉망입니다 ...

여러 가상 머신의 KVM 하이퍼 바이저 인 서버가 있습니다. 이 중 하나가 Docker를 실행 중입니다. / dev / vdb에 Docker 볼륨이 있으며 LVM PV로 설정되며 Docker는 direct-lvm 드라이버 를 사용 하여 Docker 컨테이너 데이터를 저장합니다. 이 가상 디스크는 호스트 로컬 디스크의 LVM LV입니다.

호스트와 게스트 모두 Fedora 21을 실행합니다.

이 볼륨의 호스트보기는 다음과 같습니다 (관련 볼륨 만 표시됨).

[root@host ~]# lvs
  LV                           VG         Attr       LSize
  docker2.example.com-volumes vm-volumes -wi-ao---- 40.00g
[root@host ~]# dmsetup ls --tree
vm--volumes-docker2.example.com--volumes (253:10)
 └─ (9:125)

이 볼륨에 대한 손님의 관점은 다음과 같습니다 (다시 관련 볼륨 만 표시됨).

[root@docker2 ~]# pvs
  PV         VG             Fmt  Attr PSize  PFree
  /dev/vdb   docker-volumes lvm2 a--  40.00g    0 

호스트의 다른 모든 LVM 볼륨을 사용하여을 사용하여 스냅 샷을 생성하고 스냅 샷을 lvcreate --snapshot백업 한 다음 lvremove문제없이 수행 할 수 있습니다 . 그러나이 특정 볼륨 lvremove으로는 사용 중이므로 할 수 없습니다 .

[root@host ~]# lvremove /dev/vm-volumes/snap-docker2.example.com-volumes 
  Logical volume vm-volumes/snap-docker2.example.com-volumes is used by another device.

결국 호스트의 device-mapper가이 논리 볼륨 스냅 샷 에 LVM PV가 포함되어 있음을 알아 낸 다음 스냅 샷 내의 논리 볼륨을 호스트에 매핑했습니다 (관련 볼륨 만 표시됨).

[root@host ~]# dmsetup ls --tree
vm--volumes-docker2.example.com--volumes (253:10)
 └─vm--volumes-docker2.example.com--volumes-real (253:14)
    └─ (9:125)
docker--volumes-docker--data (253:18)
 └─vm--volumes-snap--docker2.example.com--volumes (253:16)
    ├─vm--volumes-snap--docker2.example.com--volumes-cow (253:15)
    │  └─ (9:125)
    └─vm--volumes-docker2.example.com--volumes-real (253:14)
       └─ (9:125)
docker--volumes-docker--meta (253:17)
 └─vm--volumes-snap--docker2.example.com--volumes (253:16)
    ├─vm--volumes-snap--docker2.example.com--volumes-cow (253:15)
    │  └─ (9:125)
    └─vm--volumes-docker2.example.com--volumes-real (253:14)
       └─ (9:125)

이들은 VM 내부의 논리적 볼륨과 정확히 일치합니다.

[root@docker2 ~]# lvs
  LV          VG             Attr       LSize
  docker-data docker-volumes -wi-ao---- 39.95g
  docker-meta docker-volumes -wi-ao---- 44.00m

특히 시스템 부팅시 LVM LV에 대해 시도하지 않고 스냅 샷을 찍을 때만 시도합니다.

무슨 일이야? 장치 매퍼가 LVM 스냅 샷의 내용을 검사하여 그 안에 아무것도 도움이되지 않는지 확인하는 것을 원하지 않습니다. 이 동작을 억제 할 수 있습니까? 아니면 다른 방법으로 스냅 샷을 만들어야합니까?

답변:


8

때로는 관련 문서가 문서가 아닌 구성 파일에 숨겨져있는 경우가 있습니다. 따라서 LVM과 같습니다.

기본적으로 LVM은 모든 PV가 있고 lvmetad 및 udev (또는 가장 최근에 시스템화 된)가 실행되는 한 부팅 후 시스템에 연결된 모든 물리적 장치에서 볼륨 활성화를 자동으로 시도합니다 . LVM 스냅 샷이 작성되면 udev 이벤트가 발생하고 스냅 샷에 PV가 포함 pvscan되므로 lvmetad가 자동으로 실행 됩니다.

살펴본 /etc/lvm/backup/docker-volumes결과 lvmetad가 pvscan장치 주 및 부 번호를 사용하여 스냅 샷에서 명시 적으로 실행되었음을 확인할 수있었습니다 . 파일에 포함 된 내용 :

description = "Created *after* executing 'pvscan --cache --activate ay 253:13'"

auto_activation_volume_listin 을 설정하여이 동작을 제어 할 수 있습니다 /etc/lvm/lvm.conf. 자동으로 활성화 할 수있는 볼륨 그룹, 볼륨 또는 태그를 설정할 수 있습니다.

따라서 간단히 호스트에 대한 두 볼륨 그룹을 모두 포함하도록 필터를 설정했습니다. 필터와 일치하지 않는 항목은 자동으로 활성화되지 않습니다.

auto_activation_volume_list = [ "mandragora", "vm-volumes" ]

게스트의 LVM 볼륨이 더 이상 호스트에 나타나지 않으며 마지막으로 백업이 실행되고 있습니다.


4

KVM 호스트의 물리적 장치 만 검사하도록 /etc/lvm/lvm.conf에서 'filter'값을 편집하려고합니다. 기본값은 LV 자체를 포함하는 '모든 블록 장치'를 허용합니다. 기본값 위의 주석은 상당히 포괄적이며 사용 방법을 설명하는 것보다 나을 수 있습니다.


필자는 필터를 추가하고 pvscan --cachelvmetad에 새 필터에 대해 알리기 위해 실행 했으며 pvscan이제는 PV가 필터에 의해 거부되고 있지만 문제가 지속된다는 것을 나타냅니다.
Michael Hampton

나는 당신이 스냅 샷을 제거 할 수 없다는 것을 의미한다고 가정합니다. 이 단계에서는 까다로울 수 있으며 모호한 제안 만 제공 할 수 있습니다. KVM 호스트 재부팅에 문제가 없다면 (그리고 그것이 슬레지 해머 접근법이라는 것을 인정합니다), 아마도 호스트에서 'lvchange -an / path / to / LV'가 보류를 해제합니다. 그렇지 않다면 LVM 도구를 사용하지 않고 시도하기 위해 다양한 dmsetup 작업을 실험하고있을 것입니다. 그것은 털이 있지만, 나는 특정 작업을 추천하는 것이 편안하지 않습니다.
Craig Miskell

lvmetad가 udev 이벤트에 대한 응답으로 스냅 샷을 명시 적으로 스캔하기 때문에 필터는 아무 것도 수행하지 않습니다. 솔루션은 구성에서 다른 것으로 판명되었습니다.
Michael Hampton

2

와 비슷한 문제가 발생했습니다 vgimportclone. 때로는 다음과 같이 실패합니다.

  WARNING: Activation disabled. No device-mapper interaction will be attempted.
  Physical volume "/tmp/snap.iwOkcP9B/vgimport0" changed
  1 physical volume changed / 0 physical volumes not changed
  WARNING: Activation disabled. No device-mapper interaction will be attempted.
  Volume group "insidevgname" successfully changed
  /dev/myvm-vg: already exists in filesystem
  New volume group name "myvm-vg" is invalid
Fatal: Unable to rename insidevgname to myvm-vg, error: 5

이 시점에서 스냅 샷을 삭제하려면 https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1088081에udev 설명 된 버그로 인해 먼저 일시적으로 비활성화해야했습니다.

그러나 그럼에도 불구하고 중첩 LVM의 볼륨 그룹을 성공적으로 비활성화 한 후에 의해 생성 된 중첩 PV에 대한 파티션 매핑이 kpartx어떻게 든 사용되었습니다.

트릭은 장치 맵퍼가 트리 목록에서 다음과 같이 이전 볼륨 그룹 이름을 사용하여 추가 상위 맵핑을 유지 한 것으로 보입니다.

insidevgname-lvroot (252:44)
 └─outsidevgname-myvm--root-p2 (252:43)
    └─outsidevgname-myvm--root (252:36)

해결책은로 특정 매핑을 간단히 제거하는 것이 었습니다 dmsetup remove insidevgname-lvroot. 그 후, kpartx -dlvremove벌금을했다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.